0

假设我有 3 个 Kafka 代理、一个 Zookeeper、50 个生产者、50 个消费者和 1 个主题(testTopic1)。并且所有消费者都订阅了testTopic1。现在我将与 50 个生产者同时发送 50 条消息到同一个主题 ( testTopic1)。现在我希望 Kafka 集群不要同时向消费者发送超过 40 条消息。剩下的 10 个将继续排队或丢弃它。

也许这是 Kafka 中的负载均衡。我不明白我将如何完成这项工作。我是卡夫卡的新手,请帮忙。

4

2 回答 2

1

卡夫卡经纪人很愚蠢。他们不能限制/删除发布到 kafka 的消息。

如果所有 kafka 消费者都属于同一个消费者组,并且有 50 个消费者,那么所有消费者可能会或可能不会同时收到所有这 50 条消息,具体取决于密钥。如果多条消息具有相同的键,则所有相同键的消息将被单个消费者一一收听。如果所有 50 条消息都有不同的键,那么它们可能会或可能不会(取决于键的散列)将被相同或不同的消费者监听。

您能否更多地解释您的用例以便更好地理解。

于 2019-07-14T12:13:48.280 回答
0

Kafka 代理不能随机丢弃消息。但是您可以在消费者内部实现逻辑以在处理时删除消息。

如果您有一个主题和该主题的单个分区;您的消费者中的一个属于同一消费者组将处理您的所有消息,因为分区保证了消费者端处理中的顺序。

如果您有 10 个消费者组,每个消费者组属于 5 个消费者,并且主题有一个分区,则至少有 10 个消费者处理来自主题的消息。如果 consumer-group-1 中的一个消费者无法处理消息,来自同一消费者组的另一个消费者将处理该消息。

如果你需要在处理时随机丢弃 10 条消息中的 1 条,你可以通过调整消费者端的逻辑来实现。但是,如果系统配置为在代理端维护偏移量管理,则根据代理的消费者组偏移量,所有数据都会在其端进行处理。

于 2019-07-14T15:42:37.583 回答