如何确定春季卡夫卡中要设置的并发?

时间:2020-02-01 04:29:58

标签: apache-kafka kafka-consumer-api spring-kafka

我正在使用@KafkaListener注释编写一个kafka使用者,我知道有一种方法可以使用ConcurrentKafkaListenerContainerFactory中的方法来增加来自不同分区的并发kafka使用者的数量

e.g. factory.setConcurrency(3);

用于setconcurrency的Javadoc表示如下:-

正在运行的并发KafkaMessageListenerContainer的最大数量。来自同一分区内的邮件将被顺序处理。

现在我的问题是

我有一个kafka主题,其中有144个分区,我们的应用程序需要使用该分区来消耗消息,并且3个应用程序实例并行运行。

我想知道如何确定并发值需要下注

ConcurrentKafkaListenerContainerFactory.setconcurrency (<Value>) 

以便我们可以在使用消息时实现高吞吐量。

我应该使用144/3 = 48作为并发因子,还是有一个公式可以得出这个数字?

1 个答案:

答案 0 :(得分:0)

是的,最好的做法是在每个实例中将并发设置为48,以便将每个分区都从使用者组中的唯一线程中使用。此外,要实现高吞吐量,您可以将Batch listeners与{ {3}}

另一个最佳选择是让更多实例运行,例如14,并且每个实例的并发级别为10。在这两种方法中,您还需要考虑每个实例higher batch size的可用CPU

从1.1版开始,您可以配置@KafkaListener方法以接收从消费者调查中收到的整批消费者记录。要配置侦听器容器工厂以创建批处理侦听器,可以设置batchListener属性