java - 听单个消费者的多个主题
问题描述
我最近开始研究 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();
}
}
解决方案
我的问题是,这样做是一个好习惯吗?
这取决于用例。在您的主题与表相关的示例中,您可能每个主题都应该有一个消费者,因为如果您的消费者正在从许多不相关的主题中消费,那么消费将会减慢。消费比生产效率低,所以最常见的用例是将你的主题分成多个分区,每个主题有多个消费者。
如果主题是相关的,那么从多个主题中消费是有意义的。有一个用例,Confluent 编写了一份白皮书,介绍他们在数据中心之间复制数据的位置,并且主题以数据中心 ID 为前缀。然后,消费者从具有匹配名称但不同数据中心 ID 的所有主题中消费。
推荐阅读
- javascript - 路由推送后发出事件是否安全
- .htaccess - 使用 htaccess 在 url 中隐藏子文件夹
- apache-spark - pyspark 数据框列:Hive 列
- datetime - 为多个时区的用户指定时间(尤其是美国/加拿大)
- c# - 这里有一些循环的、重复的事件处理?但是什么和怎么做?
- .net - 从 BindingSource 中删除特定行
- java - ScalaMock 模拟泛型 Java 接口重载方法
- apache - 在 linux vps 中使用 cpanel 在 apache 服务器中找不到 a2enmod 命令
- maven - 如何在 jenkins 插件中加载资源文件?
- php - 使用 ACF Gallery 图像在图像链接上覆盖文本