【发布时间】:2017-08-24 10:13:50
【问题描述】:
我正在使用 Apache Kafka 及其 Java 客户端,我发现消息在属于同一组的不同 Kafka 消费者之间进行负载平衡(即共享相同的组 ID)。
在我的应用程序中,我需要所有消费者阅读所有消息。
所以我有几个问题:
如果我没有在 Consumer Properties 中设置任何组 id,那么 Kafka Consumer 会被赋予什么组 id?
是否有一个默认值?
客户端每次都创建一个随机值吗?
我是否需要为每个消费者创建不同的 id 以确保每个消费者都能收到所有消息?
编辑: 谢谢你的回答。
你是对的:如果没有设置消费者组 id,Kafka 应该抱怨。
但是,我发现如果 group id 为 null,Java 客户端将其设置为空字符串 "" 以避免出现问题。 所以显然这是我正在寻找的默认值。
让我的所有消费者感到惊讶,即使我没有设置他们的 groupId(所以他们都使用 groupId == "")似乎收到了生产者写的所有消息。
我仍然无法解释:有什么建议吗?
【问题讨论】:
-
这可能与您的分区数有关。你有多少个分区,你使用了多少个消费者?事实上,当多个消费者订阅一个主题并属于同一个消费者组时,组中的每个消费者都会收到来自该主题中不同分区子集的消息。
-
我为每个主题使用一个分区,所以所有消费者都从同一个分区接收消息:/
标签: apache-kafka kafka-consumer-api