@KafkaListener 并发多个主题

kkf*_*flf 5 apache-kafka spring-kafka

我想创建一个并发 @KafkaListener,它可以处理多个主题,每个主题都有不同数量的分区。

我注意到 Spring-Kafka 只为大多数分区的主题为每个分区初始化一个使用者。

示例:我将并发设置为 8。我@KafkaListener听了以下主题。主题 A 的分区最多 - 5 个,因此 Spring-Kafka 初始化了 5 个消费者。我希望 Spring-Kafka 初始化 8 个消费者,这是根据我的并发属性允许的最大值。

  • 主题 A 有 5 个分区
  • 主题 B 有 3 个分区
  • 话题 C 有 1

不初始化更多消费者的技术原因是什么?

我如何绕过这个,以便我可以使用@KafkaListener注释初始化更多的使用者?(如果可能的话)

Gar*_*ell 5

当监听器配置为监听多个主题时,每个消费者实例监听所有主题;Spring 确实启动了 8 个消费者(在这种情况下),但这些分区实际上分布在消费者之间的方式由 Kafka 的组管理控制:

在此处输入图片说明

在此处输入图片说明

因此,在这种情况下,您最终会得到 3 个空闲的消费者。

可能可以提供自定义partition.assignment.strategy以按照您想要的方式进行分发,但我从未研究过。

编辑

我刚刚测试了RoundRobinAssignor...

spring.kafka.consumer.properties.partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor
Run Code Online (Sandbox Code Playgroud)

和...

在此处输入图片说明