我对再平衡有些怀疑。现在,我正在手动将分区分配给使用者。因此,根据文件,如果消费者离开/崩溃在一个消费群体中,就不会有再平衡。
假设同一组中有3个分区和3个使用者,每个分区都是手动分配给每个使用者的。一段时间后,第三个消费者倒下了。既然没有再平衡,我可以采取什么措施来确保停机时间最小化?我是否需要更改前两个分区中任何一个的配置,以从第三个分区或其他分区开始使用?
虽然可能有上下文使该方法有效,如文中所述,但我对你的方法有点怀疑。
确保停机时间最小化的最佳方法是让Kafka代理和zookeeper做他们擅长的事情,在消费者中管理工作负载(分区),包括在消费者停机时重新分配分区。
您的最佳路径可能是使用OnPartitionsRevoked和OnpartitionsAssigned事件来处理假设新分区所需的任何逻辑(有关这些事件的更多详细信息,请参阅JRs链接)。
我将描述我最近遇到的一个用例,希望它与您的用例相关。我最近有5个消费者需要5000万个对象的内存缓存。在没有分区的情况下,每个使用者都有自己的缓存,从而产生了2.5亿个对象。为了将这个数字减少到原来的5000万,我们可以使用onpartitionsrevoked事件清除缓存,并使用onassigned事件为分配的分区重新填充相关缓存。
除了使用这两个处理程序,如果您真的想手动分配分区,那么您必须自己完成所有编排:
从列表中你可能可以看出,如果你强迫自己走这条路,你将面临一个真实的伤害世界,你可能不会比Kafka经纪人做得更好——有一个完整的企业,它的全部重点是开发和维护Kafka,所以你不必处理所有的复杂性。
我不知道你为什么要手动为消费者分配分区?
我认为你需要写一篇重新平衡的文章。https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/ConsumerRebalanceListener.html
我的建议是:只要让Kafka决定哪个消费者会听哪个分区,你就不用担心这个问题了。
我知道kafka将一个主题的数据安排在许多分区上,一个消费者组中的消费者被分配到不同的分区,从那里他们可以接收数据: 我的问题是: 术语,它们是由主机/IP标识的,还是由客户端连接标识的? 换句话说,如果我启动两个线程或进程,使用相同的消费者组运行相同的Kafka客户端代码,它们被认为是一个消费者还是两个消费者?
当使用者组a的一个Kafka使用者连接到Kafka代理时,我希望搜索到所有分区的末尾,即使在代理端存储了一个偏移量。如果更多的其他消费者为同一个消费者组连接,他们应该提取最新存储的偏移量。我正在做以下工作: 问题是,当我连接消费者组A的第一个消费者c1时,一切都按预期工作,如果我连接消费者组A的另一个消费者c2,该组将重新平衡,c1将消耗跳过的抵消。 有什么想法吗?
TL;DR;我试图理解一个被分配了多个分区的单个使用者是如何处理reach分区的消费记录的。 例如: 在移动到下一个分区之前,会完全处理一个分区。 每次处理每个分区中的可用记录块。 从第一个可用分区处理一批N条记录 以循环旋转方式处理来自分区的N条记录 我找到了或分配程序的配置,但这只决定了使用者如何分配分区,而不是它如何从分配给它的分区中使用。 我开始深入研究KafkaConsumer源代码,#
我正在创建一个系统,其中前端服务将消息推送到Kafka请求主题,并为一些下游后端消费者(实际上是一个最终推送回Kafka的复杂系统)监听另一个响应主题,以处理请求消息并最终推进到“回应”话题。 我试图找出最优雅的方法来确保消费者监听适当的分区并收到响应,并且后端推送到前端消费者正在监听的分区。我们总是需要确保响应到达产生初始消息的同一个消费者。 到目前为止,我有两种解决方案,但都不是特别令人满意的
有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。
给定以下设置: Kafkav0.11.0.0 3个经纪人 2个主题,每个主题有2个分区,复制因子为3 2个消费者组,每个主题一个 3个包含使用者的服务器 服务器包含两个使用者,每个主题一个,这样: null null null 消费者-B1被分配到topic-1分区-1 消费者-C1被分配到topic-1分区-0 消费者-A1没有分配给分区 这似乎正如我们所料。由于分区计数为2,我们只有两个活动消