在我们的系统中,我们在tomcat应用程序中使用了较早版本的kafka(0.9.0.1)和旧的scala消费者API。 多数情况下,一切工作正常,但是有时,当运行消费者的服务器被应用程序中的某些其他任务大量使用时,消费者变得无响应,这触发了预期的重新平衡,并且消费者从其分区中删除,其他消费者使用。
我的问题是,是否有一种简单的方法让消费者在备份后重新注册自己?
我知道老用户将分区用户详细信息存储在Zookeeper中,并认为我们可以执行一项任务,该任务将定期检查我们的用户是否已在此注册,如果没有,则重新启动该用户,但是我不确定我们到底是什么应该在那里检查。谁能指出我关于卡夫卡存储在zookeeper中的数据的一些文档(可悲的是,在官方文档中找不到任何东西:()?
答案 0 :(得分:0)
基本上,您想要的是固定分配,并且消费群体永远不会重新平衡。如果有一种方法可以在旧的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.