目的和区别b / w Apache camel Kafka使用者URI选项consumerStreams vs consumersCount

时间:2016-03-10 15:30:15

标签: apache-camel apache-kafka

Apache Camel Kafka Consumer提供名为“consumerStreams”和“consumersCount”的URI选项。

需要了解差异和使用方案以及它如何适应多分区Kafka主题消息消费

2 个答案:

答案 0 :(得分:3)

我已经检查了Camel Kafka的源代码,看来这些参数加时有不同的用法。

consumerStreams用于旧版本的Camel-Kafka组件,例如2.13,您可以看到here

consumersCount用于最新版本的Camel-Kafka组件(请参阅here),它代表将要实例化的org.apache.kafka.clients.consumer.KafkaConsumer的数量,因此您应该将其用于多分区消费

似乎它们在骆驼2.16中一起使用

答案 1 :(得分:0)

consumerCount控制骆驼端点创建多少个消费者实例。因此,如果您的主题中有3个分区,并且consumerCount为3,则一次可以消耗3条消息(每个分区1条)。 此设置完全符合您对文档的期望

consumerStreams是一个完全不同的设置,并且恕我直言,其名称具有误导性,并且文档具有误导性。

当前文档(https://github.com/apache/camel/blob/master/components/camel-kafka/src/main/docs/kafka-component.adoc)表示:

  

consumerStreams:使用者上的并发使用者数

但是源代码揭示了其真正目的:

consumerStreams配置可供所有使用者使用的线程数。在内部,Kafka端点为每个使用者创建一个Runnable。 (consumerCount = 3)表示3个Runnable。这些可运行对象由ThreadPoolExecutorService执行,并由consumerStreams设置缩放。

由于单个使用者线程是长时间运行的任务,所以consumerStreams的唯一目的可以是处理重新连接或阻塞的线程。 consumerStreams设置更高的值不会带来更多的并行化。并且最好将其命名为consumerThreadPoolSize或类似的名称。