首页 > 解决方案 > 听单个消费者的多个主题

问题描述

我最近开始研究 Apache Kafka。我在各种博客上不断看到的一件事是多个主题配置给同一个听众。

我的问题是,这样做是一个好习惯吗?假设我们每秒收到 100 条关于每个主题的消息。来自每个主题的消息需要不同的自定义。和消息来自。个别主题进入各自的表格。示例:来自 topic1 的消息进入topic_1表。

这是我正在开发的 Spring Boot 应用程序。我也想知道我未来可能面临的其他挑战。

更新:代码示例

@KafkaListener(topics = "#{'${kafka-consumer.topics}'.split(',')}", groupId = "${kafka-consumer.groupId}")
    public void consume(KafkaConsumer<String, String> record) {
        int count = 0;
        ConsumerRecords<String, String> records = record.poll(1000);
        for (ConsumerRecord<String, String> data : records) {
            System.out.println(data.value());
            count++;
        }
        //record.listTopics()
        if(count > 0){
            record.commitAsync();
        }

    }

标签: javaspring-bootapache-kafka

解决方案


我的问题是,这样做是一个好习惯吗?

这取决于用例。在您的主题与表相关的示例中,您可能每个主题都应该有一个消费者,因为如果您的消费者正在从许多不相关的主题中消费,那么消费将会减慢。消费比生产效率低,所以最常见的用例是将你的主题分成多个分区,每个主题有多个消费者。

如果主题是相关的,那么从多个主题中消费是有意义的。有一个用例,Confluent 编写了一份白皮书,介绍他们在数据中心之间复制数据的位置,并且主题以数据中心 ID 为前缀。然后,消费者从具有匹配名称但不同数据中心 ID 的所有主题中消费。


推荐阅读