我正在查看春季的Kafka代码,并且有一些疑问:
如果我们使用1个@kafkaListener和2个主题,那么spring Kafka会创建一个MessageListenerContainer。而且,如果我为每个主题使用单独的@kafkaListener,则将创建2个MessageListenerContainer。
MessageListenerContainer表示消费者吗?
如果我在ConcurrentKafkaListenerContainerFactory中将并发设置为4,那意味着对于每个kafkaListener,我都会使用Broker打开4个线程?这意味着协调员将他们视为4个不同的消费者。
kafkaListener如何进行轮询?每次只能从经纪人那里获得1条ConsumerRecord吗?
请帮助。
答案 0 :(得分:1)
MessageListenerContainer
有两种实现方式-KafkaMessageListenerContainer
(KMLC)和ConcurrentMessageListenerContainer
(CMLC)。
CMLC只是一个或多个KMLC的包装,其中concurrency
指定了KMLC的数量。
@KafkaListener
始终使用CMLC。
每个KMLC都获得一个Consumer
(和一个线程)。线程使用指定的poll()
连续pollTimeout
消费消费者。
主题/分区在KMLC之间的分布方式取决于
partition.assignment.strategy
财产如果您的多个主题的分区数少于并发数,则可能需要一个备用的分区分配器,例如循环分配器,否则您将有闲置的容器没有分配。
@KafkaListener
注释。max.poll.records
,fetch.min.bytes
,fetch.max.wait.ms
。