【发布时间】:2019-07-02 19:43:02
【问题描述】:
如果使用相同消费者组 (group.id) 的两个进程订阅相同的 topicPattern - Kafka 是否会对两个进程之间已解决的主题进行负载平衡?
在我的例子中,大约有 400 个主题与该模式匹配,并且每个主题都有一个分区。我想知道我是否可以通过具有相同消费者组的不同进程对主题的消费进行负载平衡,但似乎只有一个进程处理所有主题。这是因为只有分区是负载平衡的 - 还是因为订阅使用了主题 pattern?
我做了一些更深入的调试。我的测试设置实际上不是两个进程,而是两个线程——我想这不重要。调试打印主题描述输出如下内容(IP 被混淆):
(groupId=foo-bar-group, isSimpleConsumerGroup=false,
members=
(memberId=KafkaTestApplication:KafkaTestApplication-1-20126d55-678d-46f5-bc73-3769db2c8901,
clientId=KafkaTestApplication:KafkaTestApplication-1,
host=/aa.bb.c.dd,
assignment=(topicPartitions= <all topics here>)),
(memberId=KafkaTestApplication:KafkaTestApplication-2-8d34e81a-8f57-4d4e-bd9e-b56edc4e706c,
clientId=KafkaTestApplication:KafkaTestApplication-2,
host=/aa.bb.c.dd,
assignment=(topicPartitions=)),
partitionAssignor=range,
state=Stable,
coordinator=aaa.bb.ccc.d:9092 (id: 9 rack: null)
)
我可以看到消费者组中有两个不同的成员,它们有两个不同的 clientId。尽管如此,所有主题都分配给了第一个消费者,而第二个消费者没有分配任何主题。我希望两位成员都能得到一些话题。两位成员每隔几秒就进行一次投票。
【问题讨论】:
-
你如何检查“看起来”这种方式?你真的想要每个消费者进程有 200 个分区吗?好像很多
-
现在我只通过检查日志来检查:-| - 如果重新平衡工作,我可能会根据需要启动尽可能多的流程来处理预期数量的记录。
标签: java apache-kafka kafka-consumer-api