如何控制Kafka集群发送的请求/消息?

时间:2019-07-14 11:09:45

标签: apache-kafka load-balancing kafka-cluster

假设我有3位Kafka经纪人,一名动物园管理员,50位生产者,50位消费者和1个主题(testTopic1)。 并且所有消费者都订阅了testTopic1。现在,我将与50个生产者同时向同一主题(testTopic1)发送50条消息。现在,我希望Kafka集群不能同时向消费者发送40条以上的消息。其余的10个将继续排队或丢弃。

也许这是Kafka中的负载平衡。 我不明白我将如何进行这项工作。我是Kafka的新手,请帮忙。

2 个答案:

答案 0 :(得分:1)

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

如果所有kafka消费者都属于同一个消费者组,并且有50个消费者,则取决于密钥,所有消费者可能会或可能不会同时收到所有这50条消息。如果多个消息具有相同的密钥,则单个使用者将一一收听所有相同的密钥消息。如果所有50条消息都具有不同的密钥,则相同或不同的使用者都将侦听它们的(可能是或不是)(取决于密钥的哈希值)。

您能否进一步解释用例以更好地理解。

答案 1 :(得分:0)

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

如果您有一个主题,并且该主题有一个分区;您的消费者中的一个消费者属于同一消费者组,因为分区保证在消费者端进行排序,因此该用户将处理所有消息。

如果您有10个使用者组,每个使用者组都属于5个使用者,并且该主题有一个分区,则至少有10个使用者处理您的主题消息。如果“消费者组1”中的一个消费者未能处理该消息,则来自同一消费者组的另一消费者将处理该消息。

如果需要在处理过程中随机丢弃10条消息中的1条,则可以通过调整用户端的逻辑来实现。但是,如果系统配置为在经纪人端维护偏移量管理,则根据消费者组的每个偏移量(根据经纪人),所有数据都将在其末尾处理。