Java 聆听关于单个消费者的多个主题

Java 聆听关于单个消费者的多个主题,java,spring-boot,apache-kafka,Java,Spring Boot,Apache Kafka,我最近开始研究ApacheKafka。我一直在各种博客上看到的一件事是,多个主题被配置到同一个侦听器 我的问题是,这样做是一种好的做法吗? 假设我们每秒收到100条关于每个主题的消息。来自每个主题的消息需要不同的定制。和来自的消息。各个主题进入各自的表格。示例:来自topic1的消息转到topic1表 这是我正在开发的Spring Boot应用程序。此外,我还想知道我今后可能面临哪些其他挑战 更新:代码示例 我的问题是,这样做是一种好的做法吗 这取决于用例。在您的示例中,一个主题与一个表相关,您

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

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

这是我正在开发的Spring Boot应用程序。此外,我还想知道我今后可能面临哪些其他挑战

更新:代码示例

我的问题是,这样做是一种好的做法吗

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

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

这根本不是一个好做法!因为它大大降低了消费率,原因很明显

但在某些情况下,如果您有许多生产者可以动态生成数据,并且您希望保留其中每一个生产者的数据消耗量,同时又能够将数据发送到特定设备,则必须使用它

e、 g

很多传感器,每个传感器发送到自己的主题,其id类似于outgoing/12445646等等

来自所有这些传感器的数据的使用者将收听传出的/*主题,但仍然可以通过传入/12445646等通道直接向该传感器发送消息

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


如果您使用一个侦听器来使用多个主题,则会降低您的使用和处理速度。您可以共享代码吗?为什么不能为每个主题创建多个侦听器?通常,如果必须以类似方式处理所有记录,则只应获取多个主题
@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();
        }

    }