我对重新平衡有些怀疑。现在,我正在手动将分区分配给使用者。因此,根据docs,如果消费者离开/崩溃在一个消费群体中,就不会有再平衡。假设在同一个组中有3个分区和3个使用者,并且每个分区被手动分配给每个使用者。过了一段时间,第三个消费者倒下了。既然没有再平衡,我能采取什么措施来确保停机时间最小化?我是否需要更改前两个分区中任何一个分区的配置以从第三个分区或其他分区开始使用?
2q5ifsrm1#
尽管可能有上下文使方法有效,如前所述,我对你的方法有点怀疑。确保停机时间最少的最佳方法是让kafka代理和zookeeper做他们擅长的事情,在用户中管理您的工作负载(分区),包括在用户停机时重新分配分区。您的最佳路径可能是使用onpartitionsrevoked和onpartitionsassigned事件来处理您需要的任何逻辑,以便能够假设一个新分区(有关这些事件的更多详细信息,请参阅jrs链接)。我将描述我最近遇到的一个用例,希望它与您的用例相关。我最近有5个消费者需要5000万个对象的内存缓存。在没有分区的情况下,每个使用者都有自己的缓存,从而产生2.5亿个对象。为了将这个数字减少到原来的5000万,我们可以使用onpartitionsrevoked事件来清除缓存,使用onassigned事件用分配的分区的相关缓存重新填充缓存。除了使用这两个处理程序之外,如果您真的想手动分配分区,那么您必须自己完成所有编排:如果其他消费者中的一个倒下了,可以监视的东西一些东西,拿起死亡消费者的分区,并处理它协调消费者之间的通信,以便在死亡消费者再次活着时进行通信,这样它就可以重新开始工作。从列表中你可能可以看出,如果你强迫自己走上这条路,你会受到现实世界的伤害,而且你的工作可能不会比Kafka经纪人做得更好——整个企业的全部重点都是开发和维护Kafka,所以你不必处理所有的复杂性。
1sbrub3j2#
我不知道你为什么要手动分配分区给用户?我认为你需要写一篇文章。https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/consumerrebalancelistener.html我的建议是:只要让kafka决定哪个消费者将听哪个分区,您就不必担心这个问题。
2条答案
按热度按时间2q5ifsrm1#
尽管可能有上下文使方法有效,如前所述,我对你的方法有点怀疑。
确保停机时间最少的最佳方法是让kafka代理和zookeeper做他们擅长的事情,在用户中管理您的工作负载(分区),包括在用户停机时重新分配分区。
您的最佳路径可能是使用onpartitionsrevoked和onpartitionsassigned事件来处理您需要的任何逻辑,以便能够假设一个新分区(有关这些事件的更多详细信息,请参阅jrs链接)。
我将描述我最近遇到的一个用例,希望它与您的用例相关。我最近有5个消费者需要5000万个对象的内存缓存。在没有分区的情况下,每个使用者都有自己的缓存,从而产生2.5亿个对象。为了将这个数字减少到原来的5000万,我们可以使用onpartitionsrevoked事件来清除缓存,使用onassigned事件用分配的分区的相关缓存重新填充缓存。
除了使用这两个处理程序之外,如果您真的想手动分配分区,那么您必须自己完成所有编排:
如果其他消费者中的一个倒下了,可以监视的东西
一些东西,拿起死亡消费者的分区,并处理它
协调消费者之间的通信,以便在死亡消费者再次活着时进行通信,这样它就可以重新开始工作。
从列表中你可能可以看出,如果你强迫自己走上这条路,你会受到现实世界的伤害,而且你的工作可能不会比Kafka经纪人做得更好——整个企业的全部重点都是开发和维护Kafka,所以你不必处理所有的复杂性。
1sbrub3j2#
我不知道你为什么要手动分配分区给用户?
我认为你需要写一篇文章。https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/consumerrebalancelistener.html
我的建议是:只要让kafka决定哪个消费者将听哪个分区,您就不必担心这个问题。