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

时间:2020-01-14 08:34:43

标签: apache-kafka spring-kafka

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

我观察到当我有滞后时间赶上时,实例将停留在它所在的分区上,并让第二个分区累积滞后。然后,只有在我们停止产生消息并且完全消除了第一个分区上的延迟后,它才会切换到第二个分区。

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

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

spring-kafka中是否有一些属性,当将KafkaListener插入多个分区时,这些属性使我们能够更改轮询策略。这样的想法是,它将在每次轮询时将分配给每个分区的轮询进行轮询

感谢您的阅读!

1 个答案:

答案 0 :(得分:2)

您可以将每个实例的使用者(监听器容器)concurrency设置为2;这样,您将在2个实例中拥有4个消费者。

使用Spring Boot,它是spring.kafka.consumer.concurrency。如果要创建自己的工厂,请直接设置属性。