ConcurrentKafkaListenerContainerFactory 是否增加了 Kafka 主题消息消费的并行度

Ama*_*nha 4 apache-kafka kafka-consumer-api spring-kafka

我一直读到Kafka只将一个消费者实例(线程)分配给一个分区。我最近遇到了ConcurrentKafkaListenerContainerFactory并正在阅读它,有些方面似乎与我之前所知道的相矛盾。

假设我们有一个消费者实例(pod/机器),在其中我使用ConcurrentKafkaListenerContainerFactory ,并发级别设置为 3 3。我有一个包含三个分区的 Kafka 主题。将并发级别设置为三时,我知道我的@KafkaListener 方法将从主题的所有三个分区读取消息

这是否意味着即使只有一个消费者实例,我们也能够并行消费来自三个分区的消息。

这可以作为替代方案来提高 Kafka 主题的消费率而不增加分区数量吗?我知道的唯一其他方法是创建一个线程池并将收到的消息提交给它。我们可以使用 ConcurrentKafkaListenerContainerFactory 作为此过程的替代品吗,因为这听起来确实更容易实现

Art*_*lan 6

根据您的配置创建实例ConcurrentKafkaListenerContainer数量KafkaConsumer。这\xe2\x80\x99就是如何并行读取不同分区的方法。

\n

不要\xe2\x80\x99t 混合KafkaConsumer对象与一般消费者实体定义混合。换句话说,根据 Apache Kafka 定义,您的消费者应用程序绝对不是 Kafka Consumer 对象。这不是第一次听说人们将他们的应用程序称为 \xe2\x80\x9cKafka Consumer\xe2\x80\x9d\xe2\x80\xa6 您读过哪些文档让您这么认为?

\n

在其文档中查看有关 Spring for Apache Kafka 并发性的更多信息:https://docs.spring.io/spring-kafka/docs/current/reference/html/#message-listener-container

\n

  • 谢谢。因此,据我了解,我的应用程序中的消费者实例数量与 ConcurrentKafkaListenerContainer 的并发级别一样多。这基本上意味着,如果有一个三分区主题和三个消费者应用程序实例,并且 ConcurrentKafkaListenerContainer 并发设置为 3,那么我们实际上有 9 个消费者实例线程,但只有其中三个会被使用? (3认同)