Apache Kafka:3个分区,消费者组3个消费者,每个消费者应该是多线程的

Apache Kafka: 3 partitions, 3 consumers in the consumer group, each consumer should be multithreaded

假设 Apache Kafka 中有一个主题有 3 个分区。我需要 运行 一个消费者组中的 3 个消费者,根据文档,这意味着每个消费者将从 1 个分区读取数据。

消费者是使用 Spring Kafka 实现的。众所周知,默认情况下,所有消息都在一个线程中接收,但是使用 ConcurrentMessageListenerContainer 应该可以让我们设置并发。

我想要什么?我想有效地使用服务器 CPU 资源并让每个消费者在单独的线程中接收和处理消息(在我们的例子中是 3 个线程,等于分区数)。

因此 - 消费者组中有 3 个消费者(3 个服务器),每个消费者都从所有 3 个分区接收消息。

可能吗?如果是,我只使用 ConcurrentMessageListenerContainer 并为每个分区指定 3 个侦听器就足够了吗?

我对你的说法有点困惑。澄清一下,在 Kafka 中,只有一个消费者可以从一个消费者组中的一个分区读取数据。同一消费者组中的两个消费者不可能从同一分区读取。

在一个消费者组中,

  • 如果没有消费者大于分区数,那么额外的消费者线程将空闲。
  • 如果没有消费者小于分区数,那么同一个消费者线程将从多个分区读取

此代码段将从名为 "mytopic" 的主题中读取,并将使用 3 个线程从 3 个分区中读取 @KafkaListener(topics = "mytopic", concurrency = "3", groupId = "myconsumergroup")