我正在使用 @KafkaListener 注释编写一个 kafka 消费者,我知道有一种方法可以使用 ConcurrentKafkaListenerContainerFactory 中的方法增加来自不同分区的并发 kafka 消费者的数量
e.g. factory.setConcurrency(3);
setconcurrency 的 Javadoc 是这样说的:-
KafkaMessageListenerContainer 运行的最大并发数。来自同一分区内的消息将按顺序处理。
现在我的问题是
我有一个带有 144 个分区的 kafka 主题,我们的应用程序需要使用消息,并且 3 个应用程序实例正在并行运行。
我想知道如何决定需要下注的并发值
ConcurrentKafkaListenerContainerFactory.setconcurrency (<Value>)
这样我们就可以在消费消息时实现高吞吐量。
我应该使用 144/3 = 48 作为并发系数还是有公式可以得出这个数字?
是的,最好的方法是将并发设置为48
在每个实例中,以便每个分区都将从消费者组中的唯一线程中消耗,并且为了实现高吞吐量,您可以使用批量监听 https://docs.spring.io/spring-kafka/reference/html/#batch-listeners with 更大的批量 https://stackoverflow.com/questions/51753883/increase-the-number-of-messages-read-by-a-kafka-consumer-in-a-single-poll/51755259#51755259
另一个最佳选择是运行更多实例,例如 14 个实例,每个实例的并发级别为 10。在这两种方法中,您还需要考虑每个实例的可用 CPU拥有比 CPU 更高的开销线程不会提供更好的性能 https://stackoverflow.com/questions/36200089/when-does-concurrency-multithreading-help-improve-performance
从版本 1.1 开始,您可以配置 @KafkaListener 方法来接收从消费者轮询中收到的整批消费者记录。要配置监听器容器工厂来创建批量监听器,可以设置batchListener属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)