假设我有一个包含4个分区的主题。 我正在使用@KafkaListener注释通过spring kafka微服务使用记录。 这个微服务已被docker化,我有两个实例。然后将每个实例插入两个分区。
我观察到当我有滞后时间赶上时,实例将停留在它所在的分区上,并让第二个分区累积滞后。然后,只有在我们停止产生消息并且完全消除了第一个分区上的延迟后,它才会切换到第二个分区。
我的应用程序中的消费顺序仅部分重要。我的意思是,我可以按不同的顺序处理它们,但不能让消息在分区中停留太长时间。
简单的解决方案就是拥有四个docker实例,一切都会好起来的。
spring-kafka中是否有一些属性,当将KafkaListener插入多个分区时,这些属性使我们能够更改轮询策略。这样的想法是,它将在每次轮询时将分配给每个分区的轮询进行轮询
感谢您的阅读!
答案 0 :(得分:2)
您可以将每个实例的使用者(监听器容器)concurrency
设置为2;这样,您将在2个实例中拥有4个消费者。
使用Spring Boot,它是spring.kafka.consumer.concurrency
。如果要创建自己的工厂,请直接设置属性。