如何决定spring kafka设置的并发数?

Nee*_*009 6 apache-kafka kafka-consumer-api spring-kafka

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

e.g. factory.setConcurrency(3);
Run Code Online (Sandbox Code Playgroud)

setconcurrency 的 Javadoc 是这样说的:-

KafkaMessageListenerContainer 运行的最大并发数。来自同一分区内的消息将按顺序处理。

现在我的问题是

我有一个带有 144 个分区的 kafka 主题,我们的应用程序需要使用消息,并且 3 个应用程序实例正在并行运行。

我想知道如何决定需要设置的并发值

ConcurrentKafkaListenerContainerFactory.setconcurrency (<Value>) 
Run Code Online (Sandbox Code Playgroud)

这样我们就可以在消费消息时实现高吞吐量。

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

Dea*_*ool 3

是的,最好的方法是48在每个实例中设置并发性,以便每个分区都将从消费者组中的唯一线程中消耗,并且为了实现高吞吐量,您可以使用具有更高批量大小的批处理侦听器

另一个最佳选择是运行更多实例,例如 14 个实例,每个实例的并发级别为 10。在这两种方法中,您还需要考虑每个具有开销线程的实例的可用 CPU,而不是 CPU 不会提供更好的性能

从版本 1.1 开始,您可以配置 @KafkaListener 方法来接收从消费者轮询中收到的整批消费者记录。要配置监听器容器工厂来创建批量监听器,可以设置batchListener属性