卡夫卡消费者阅读消息并行

时间:2017-07-06 11:05:42

标签: apache-kafka

我们是否可以让多个消费者从主题中消费以在kafka中实现并行处理。 我的用例是并行读取单个分区的消息。

3 个答案:

答案 0 :(得分:0)

简单地说,默认情况下,我们无法为消费者实现分区级并行。

但你可以试试Akka Streams Kafka (Reactive kafka)。一旦通过这些文档。

答案 1 :(得分:0)

分区数定义了从kafka主题中读取的并行度。但阅读(或多或少)仅受网络容量的限制。

一个好的模式是分离消息的读取和处理(每个主题分区一个线程用于读取,多个线程用于处理此消息)。

答案 2 :(得分:0)

是的,您可以使用多个 Kafka 消费者并行处理消息,但是不行,如果您只有一个分区,这是不可能的。

Kafka 消费中的并行性是由分区数量定义的,您可以随时轻松地重新分区您的主题以创建更多分区。

下面是如何使用 rapids-kafka-client 并行处理消息的示例,这是一个使 Kafka 并行消费更容易的库。

public static void main(String[] args){
  ConsumerConfig.<String, String>builder()
      .prop(KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName())
      .prop(VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName())
      .prop(GROUP_ID_CONFIG, "stocks")
      .topics("stock_changed")
      .consumers(7)
      .callback((ctx, record) -> {
        System.out.printf("status=consumed, value=%s%n", record.value());
      })
      .build()
      .consume()
      .waitFor();
}