Spring Kafka MessageListenerContainer
Spring Kafka MessageListenerContainer
我看到 spring Kafka 代码,我有一些疑问:
如果我们使用 1 个 @kafkaListener 和 2 个主题,那么 spring Kafka 会创建一个 MessageListenerContainer。如果我为每个主题使用单独的@kafkaListener,那么将创建 2 个 MessageListenerContainer。
MessageListenerContainer是consumer的意思吗?
如果我在 ConcurrentKafkaListenerContainerFactory 中将并发设置为 4,那么这意味着我为每个 kafkaListener 打开 4 个与代理的线程?这意味着协调员将他们视为 4 个不同的消费者。
kafkaListener 如何进行轮询?是不是每次只从broker那里得到1条ConsumerRecord?
请帮忙。
MessageListenerContainer
有两个实现 - KafkaMessageListenerContainer
(KMLC) 和 ConcurrentMessageListenerContainer
(CMLC)。
CMLC 只是一个或多个 KMLC 的包装器,KMLC 的数量由 concurrency
指定。
@KafkaListener
始终使用 CMLC。
每个 KMLC 得到一个 Consumer
(和一个线程)。线程不断 poll()
消费者,指定 pollTimeout
.
topics/partitions 如何在 KMLC 中分配取决于
- 主题有多少个分区
- 消费者的
partition.assignment.strategy
属性
如果您有多个分区少于并发的主题,您可能需要备用分区分配器,例如循环分配器,否则您将有没有分配的空闲容器。
- 正确;如果您明确希望每个主题有不同的容器,您可以在同一方法上提供多个
@KafkaListener
注释。
- 看我上面的解释。
- 这是正确的 - 这是与 Kafka 并发的唯一方法(无需添加非常复杂的逻辑来管理偏移量)。
- 每次轮询返回的记录数取决于消费者属性的数量,
max.poll.records
、fetch.min.bytes
、fetch.max.wait.ms
。
我看到 spring Kafka 代码,我有一些疑问:
如果我们使用 1 个 @kafkaListener 和 2 个主题,那么 spring Kafka 会创建一个 MessageListenerContainer。如果我为每个主题使用单独的@kafkaListener,那么将创建 2 个 MessageListenerContainer。
MessageListenerContainer是consumer的意思吗?
如果我在 ConcurrentKafkaListenerContainerFactory 中将并发设置为 4,那么这意味着我为每个 kafkaListener 打开 4 个与代理的线程?这意味着协调员将他们视为 4 个不同的消费者。
kafkaListener 如何进行轮询?是不是每次只从broker那里得到1条ConsumerRecord?
请帮忙。
MessageListenerContainer
有两个实现 - KafkaMessageListenerContainer
(KMLC) 和 ConcurrentMessageListenerContainer
(CMLC)。
CMLC 只是一个或多个 KMLC 的包装器,KMLC 的数量由 concurrency
指定。
@KafkaListener
始终使用 CMLC。
每个 KMLC 得到一个 Consumer
(和一个线程)。线程不断 poll()
消费者,指定 pollTimeout
.
topics/partitions 如何在 KMLC 中分配取决于
- 主题有多少个分区
- 消费者的
partition.assignment.strategy
属性
如果您有多个分区少于并发的主题,您可能需要备用分区分配器,例如循环分配器,否则您将有没有分配的空闲容器。
- 正确;如果您明确希望每个主题有不同的容器,您可以在同一方法上提供多个
@KafkaListener
注释。 - 看我上面的解释。
- 这是正确的 - 这是与 Kafka 并发的唯一方法(无需添加非常复杂的逻辑来管理偏移量)。
- 每次轮询返回的记录数取决于消费者属性的数量,
max.poll.records
、fetch.min.bytes
、fetch.max.wait.ms
。