我正在使用 Apache Kafka 及其 Java 客户端,我发现消息在属于同一组的不同 Kafka Consumer 之间进行负载平衡(即共享相同的组 id)。
在我的应用程序中,我需要所有消费者阅读所有消息。
所以我有几个问题:
编辑:
谢谢您的回答。
你是对的:如果没有设置消费者组id,Kafka应该抱怨。
但是,我发现如果组 id 为 null,Java 客户端会将其设置为空字符串“”以避免出现问题。
显然这就是我正在寻找的默认值。
令我所有的消费者感到惊讶的是,即使我没有设置他们的 groupId(因此它们都带有 groupId == ""),似乎也会收到生产者写入的所有消息。
我仍然无法解释这一点:有什么建议吗?
如果我没有在 Consumer Properties 中设置任何组 id,那么 Kafka Consumer 会被赋予什么组 id?
kafka消费者不会有任何消费者组。相反,您会收到此错误:The configured groupId is invalid
是否有一个默认值?
是的,您可以看到consumer.properties
kafka的文件供参考。默认的消费者组id是:group.id=test-consumer-group
客户端每次都会创建一个随机值吗?
不,对于启动 Kafka 0.9.0.x 消费者的 Java 客户端来说,groupId 似乎是必需的。你可以参考这个JIRA:https://issues.apache.org/jira/browse/KAFKA-2648 https://issues.apache.org/jira/browse/KAFKA-2648
我是否需要为每个消费者创建不同的 id 以确保每个消费者都能收到所有消息?
是的,如果所有消费者都使用相同的组 ID,则主题中的消息将在这些消费者之间分发。换句话说,每个消费者将获得消息的不重叠子集。在同一组中拥有更多消费者会增加并行度和消费的整体吞吐量。另一方面,如果每个消费者都在自己的组中,则每个消费者将获得所有消息的完整副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)