Spring 多个分区上的 Kafka 和轮询策略

Spring Kafka and poll strategy on multiple partitions

假设我有一个包含 4 个分区的主题。 我正在使用 @KafkaListener 注释使用 spring kafka 微服务消费记录。 此微服务已 docker 化,我有两个实例。然后将每个实例插入两个分区。

我观察到当我有滞后要赶上时,实例停留在它所在的分区上,让第二个分区累积滞后。当我们停止生成消息并且第一个分区上的滞后完全消耗时,它只会切换到第二个分区。

我的应用程序中的消费顺序只是部分重要。我的意思是我可以按不同的顺序处理它们,但我不能让消息在分区中停留太久。

简单的解决方案就是拥有四个 docker 实例,一切都会好起来的。

spring-kafka 中是否有一些属性允许我们在 KafkaListener 插入多个分区时更改轮询策略。这个想法是它会轮询分配给每个分区的轮询每次轮询

感谢阅读!

您可以将每个实例上的消费者(侦听器容器)concurrency设置为 2;这样你将在 2 个实例中有 4 个消费者。

使用 spring 引导,这是 spring.kafka.consumer.concurrency。如果您要创建自己的工厂,请直接设置 属性。