【发布时间】:2020-09-08 19:47:28
【问题描述】:
我正在开发一个 Springboot 应用程序,它会为 Kafka 主题中的不同分区重新平衡(例如,700 个主题,每个主题有 10 个分区,即 7000 个分区)。但是我想启动多个 dockerized 应用程序实例,其中应用程序将包含所有 700 个主题名称,但它应该只选择前 25 个分区并取消订阅其他分区)
@KafkaListener( topics = "#{kafkaProperties.getTopics()}" )
kafkaProperties.getTopics() 返回所有 700 个主题名称
【问题讨论】:
-
这个不清楚;当每个主题只有 10 个时,“前 25 个分区”是什么意思?更详细地描述您的要求。如果您的意思是您希望每个实例仅获得 25 个分区,例如
c1 - t1(10), t2(10), t3(5)、c2 - t3(5), t4(10), t5(10)等,您将需要自定义ConsumerPartitionAssignor。 -
@GaryRussell 是的,这正是我所需要的,但现在发生的是每个主题分区有一个线程。我参考了这个post 来为每个主题分区创建一个线程,但现在我想将分区分布在多个正在运行的实例中,如果一个实例由于任何原因出现故障,其他实例应该选择负载,直到新实例出现增益.
-
@GaryRussell 让我进一步澄清一下,将运行应用程序的多个实例,例如。多个 jars 或 dockerized 应用程序实例每个都应该具有相同的配置,即所有主题都已配置,但每个实例应该选择有限数量的线程,每个线程都有一个主题/分区,并让其他实例继续使用。现在第二个实例应该从平衡主题中挑选一些,以此类推。
标签: spring-boot apache-kafka spring-kafka