@KafkaListener并发多个主题

时间:2018-08-29 12:05:44

标签: apache-kafka spring-kafka

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

我注意到,Spring-Kafka对于每个分区最多的主题,每个分区仅初始化一个使用者。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

将侦听器配置为侦听多个主题时,每个使用者实例都侦听所有主题; Spring确实启动了8个使用者(在这种情况下),但是这些分区在各个使用者之间的实际分配方式由Kafka的组管理控制:

enter image description here

enter image description here

在这种情况下,您最终将有3个空闲的使用者。

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

编辑

我刚刚用RoundRobinAssignor ...

进行了测试
spring.kafka.consumer.properties.partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor

和...

enter image description here