【问题标题】:Kafka old consumer rebalance issueKafka老消费者再平衡问题
【发布时间】:2018-10-04 06:55:04
【问题描述】:

在我们的系统中,我们在 tomcat 应用程序中使用旧版本的 kafka (0.9.0.1) 和旧的 scala 消费者 API。 大多数情况下一切正常,但有时当消费者运行的服务器被应用程序中的一些其他任务大量使用时,消费者会变得无响应,这会按预期触发重新平衡,并且消费者会从其分区中删除,其他消费者是用过。

我的问题是,当消费者重新注册时,是否有一种简单的方法可以重新注册?

我知道旧的消费者将分区消费者的详细信息存储在 Zookeeper 中,并且认为我们可以有一个任务来定期检查我们的消费者是否在那里注册,如果没有则重新启动消费者,但我不确定我们到底是什么应该在那里检查。任何人都可以向我指出一些关于 kafka 存储在 zookeeper 中的数据的文档(遗憾的是在官方文档中没有找到任何内容:()?

【问题讨论】:

  • 您可以使用Zookeeper shell(或Exhibitor),或其他浏览器自行读取Zookeeper数据
  • kafka 为你做rebalance,为什么还要手动做呢?
  • @cricket_007 是的,这就是我想做的事情,但希望有一种更卡夫卡的方式来做到这一点。
  • @Deadpool 是的,kafka 进行了重新平衡。但我的问题如下: - 我有一个由 server1 和 server2 使用的主题 - server1 出现故障或工作过度,因此它无法使用消息,kafka 重新平衡并且只有 server2 使用该主题 - server1 再次可用,但 kafka 没有认识到这一点,不会重新平衡。这是我的问题,如何使 kafka 重新平衡并将 server1 添加到消费者(无需手动执行任何操作-现在我需要弄清楚这已经发生并手动重新启动服务器-)

标签: java apache-kafka apache-zookeeper


【解决方案1】:

基本上,您想要的是固定分配,并且消费者群体永远不会重新平衡。如果有一种方法可以在旧的 Scala 客户端中禁用自动消费者重新平衡,或者甚至将重新平衡超时增加到更高的值,那也可以工作,但我无法找到如何使用旧的 Scala 消费者来做到这一点。

但是,当使用较新的 Java 消费者时,可以分配固定的主题/分区,在相同的 0.9 kafka 版本中也可用。在最新的 Javadocs 中查找 Subscribing To Specific Partitions

https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

Subscribing To Specific Partitions
   In the previous examples we subscribed to the topics we were interested in and 
   let Kafka give our particular process a fair share of the partitions for those topics. 
   This provides a simple load balancing mechanism so multiple instances of our program 
   can divided up the work of processing records.

   In this mode the consumer will just get the partitions it subscribes to 
   and if the consumer instance fails no attempt will be made to 
   rebalance partitions to other instances.

【讨论】:

  • 感谢您的建议,认为有一种方法可以在 kafka 代理本身上执行此操作,因此我仍然可以使用我们当前的实现,也可以尝试一下。唯一的问题是,如果服务器因任何原因变得不可用,其分区将停止被消耗(此设置中没有重新平衡)。
猜你喜欢
  • 2020-06-30
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2019-08-08
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多