【问题标题】:Load balance Kafka record consumption when using topic pattern使用主题模式时负载均衡Kafka记录消耗
【发布时间】: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


【解决方案1】:

当同组的第二个进程启动时,该组应该重新平衡Topicpartition分配,是的。

但是,我没有任何订阅模式的经验,但我不认为它的工作方式与提供直接的主题列表不同

【讨论】:

  • 那么这是否意味着(或者您期望)即使只有一个分区的主题也会被移动到第二个进程?
  • 应该是,是的。如果你描述消费者组,你应该至少能看到两个 IP 或客户端 ID(假设它们实际上是不同的)
  • JavaDoc 还表示应该进行再平衡。所以我想我这边有问题。将在这个主题上工作一段时间,稍后再回来。谢谢你。
  • 不像我预期的那样工作。将消费者组描述输出添加到问题中。所有主题都分配给第一个成员。我不知道为什么:-(。
  • 您使用什么客户端语言?你真的能够运行两个进程吗?而且IP是一样的,因为它是一台机器上的两个线程?
【解决方案2】:

我终于找到了要改变什么来获得所需的主题/分区平衡。我必须设置 Consumer 属性

partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor

默认设置 (org.apache.kafka.clients.consumer.RangeAssignor) 不适用于我的设置。为什么将 here 解释为 cmets 中提到的 user152468。谢谢!

【讨论】:

猜你喜欢
  • 2021-09-18
  • 2011-08-15
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多