【发布时间】:2018-03-19 15:07:12
【问题描述】:
我需要消费来自不同 kafka 主题的消息,
- 我是否应该为每个主题创建不同的消费者实例,然后根据分区数启动一个新的处理线程。 或
- 我应该从一个消费者实例订阅所有主题,并且应该启动不同的处理线程
感谢和问候, 梅加
【问题讨论】:
标签: multithreading apache-kafka kafka-consumer-api
我需要消费来自不同 kafka 主题的消息,
感谢和问候, 梅加
【问题讨论】:
标签: multithreading apache-kafka kafka-consumer-api
唯一的规则是你必须说明 Kafka 做了什么和不保证什么:
我最近遇到了一个错误,因为我的应用程序通过一个消费者订阅了许多主题。每个主题都是每条消息一个图像的实时图像馈送。由于所有主题总是有新图像,每个 poll() 只返回第一个主题的图像以进行注册。
如果处理所有消息很重要,您需要确定每个消费者可以比创建消息更快地处理来自其所有订阅主题的消息。如果不能,您要么需要更多的消费者在同一个组中提交读取,要么您必须接受某些消息可能永远不会被处理的事实。
显然,一个消费者/主题是最简单的,但它确实增加了一些额外的消费者的开销。您必须根据自己的需要确定这是否重要。
正确回答您的问题的唯一方法是评估您的应用程序的特定要求和功能,并在这些要求和能力范围内构建一些东西和在 Kafka 的限制范围内。
【讨论】:
这实际上取决于您的应用程序的逻辑 - 它是否需要在一个地方同时查看所有消息。有时,就应用程序的业务逻辑而言,单个主题的消费可能更容易实现。
【讨论】:
KafkaConsumer 不是线程保存,所以每个线程应该有一个消费者。