繁体   English   中英

在单个消费者上收听多个主题

[英]Listening to multiple topics on single consumer

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

我的问题是,这样做是一个好习惯吗? 假设我们每秒收到 100 条关于每个主题的消息。 来自每个主题的消息需要不同的定制。 和消息。 各个主题进入各自的表格。 示例:来自topic_1消息转到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();
        }

    }

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

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

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

根本不是一个好习惯! 因为它大大降低了消费率,原因很明显......

但是在某些情况下,如果您有许多可以动态生成的生产者,并且您希望保留每个生产者的数据消耗,并且又具有将数据发送到特定设备的能力,那么您将不得不使用它

例如

很多传感器,每个传感器都发送到它自己的主题,其 ID 为outgoing/12445646

来自所有这些传感器的数据的消费者将侦听outgoing/*主题,但仍然可以直接向该传感器发送消息,如incoming/12445646

在流量控制的情况下,单独的传出通道可能非常方便,可以为高吞吐量通道和类似场景生成专用消费者,或者处理特定设备而不影响其余部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM