让Kafka用户订阅不同负载的多个主题会对性能产生什么影响?

时间:2019-12-05 16:01:36

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

我有一个Spring Boot应用程序,其中使用单个KafkaConsumer对象从大约10个不同的Kafka主题中进行消费。该应用程序在Kubernetes上运行,因此有许多Pod并行运行。这些主题在通过它们传递的消息量上有很大的不同。我发现经常出现积压的Kafka主题,而其他主题总是被追上。

我知道,在没有足够的使用者吞吐量的情况下,高负载主题将积压,但是我想知道KafkaConsumer类是否正在并行处理这些主题。或者,是否每个主题都占用了轮询时间的一小部分,为所有主题分配了相等的资源,而不管其新消息的使用率如何?

以下是一些与我的实现类似的代码,删除了所有机密信息:

@Autowired
KafkaConsumer<String, String> kafkaConsumer;
@Audowired
CustomProcessor customProcessor;

public void consume() {
    kafkaConsumer.subscribe(Arrays.asList("topic1", "topic2, "topic3", "topic4", "topic5");
    while (true) {
        ConsumerRecords<String, String> records = kafkaConsumer.poll(100);
        for (ConsumerRecord<String, String> record : records) {
            customProcessor.processMessage(record.value());
        }
    }
}

比方说, topic1 每秒有1000条消息,而其他每个主题每秒有50条消息。等待其他主题对消费第一个主题的吞吐量有什么影响?为高负载主题实例化一个单独的使用者对象会更好吗?

0 个答案:

没有答案