我使用spring-kafka批注@KafkaListener来指定我的侦听器方法。
我只使用一个分区就可以使用一个主题。消息永远不会超过一秒或两秒,因此可以接受一个线程。 spring-kafka文档说@KafkaListener默认使用ConcurrentMessageListenerContainer。使用setConcurrency控制并发的正确方法是吗?
或者,我应该以某种方式创建一个单线程的KafkaMessageListenerContainer吗?
我目前正在使用此
@Bean("appContainerFactory")
KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Integer, String>>
kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<Integer, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConcurrency(1);
...
}
答案 0 :(得分:0)
在您的并发中没有任何价值。只要有一个分区,您将总是只有一个线程。建议使用Apache Kafka的方式如下:每个分区一个线程。因此,Spring for Apache Kafka遵循了这一要求,即使您为大量设置了并发性,也不会给我们破坏行为的机会,您也不会从分区并行轮询。当您要使用多个分区时,它将开始带来一个价值。
答案 1 :(得分:0)
使用setConcurrency控制并发的正确方法是吗?
您所拥有的是正确的,但是容器上的默认concurrency
为1,因此在不需要并发时不必指定它。
或者,我应该以某种方式创建一个单线程的
KafkaMessageListenerContainer
吗?
并发容器为每个KafkaMessageListenerContainer
旋转一个“子” concurrency
,因此只为您创建了一个。