【发布时间】:2017-05-03 17:36:25
【问题描述】:
我知道 kafka 流提供的并行性优势,如果您的并行性需求与主题分区保持一致,则可以利用这些优势。
我正在考虑让一个应用程序将许多消费者订阅到不同的消费者组,以便每个消费者都在消费整个主题的副本。
具体来说,我正在考虑让多个线程使用相同的主题以提供不同的结果,即使我知道我可以使用KStreams 提供的“链接”计算范式来表达我的所有计算需求。
我考虑不同线程的原因是因为我想要多个动态创建的KTable 流实例。每个人都在同一个流(不是子集)上工作并聚合不同的结果。由于它是动态的,它可以创建非常重的负载,可以通过添加线程并行来缓解。我相信每个线程都可以在自己的流实例(和消费者组)上工作的想法是有效的。
当然,我还可以通过让多个线程消耗较小的数据子集并单独执行所有计算(例如,每个线程维护所有不同 KTables 的子集)来添加线程并行性,这仍将提供并发性。
所以,我的问题有两个要点
KafkaStreams通常不适合线程并行,这意味着库不打算以这种方式使用吗?在使用线程来消费主题的情况下,让线程遵循处理不同数据子集的一般 kafka 并行概念是一个更好的主意,因此使线程并行成为应用程序级别类似于使用更多实例进行扩展?
【问题讨论】:
-
看着你的问题(包括更新)和@michael-g-noll 回答我仍然不确定你实际尝试做什么,问题是什么......我认为答案给出了很好的指点,但你没有接受它,因此我认为你还有未解决的问题。也许在 Kafka 邮件列表上讨论会更容易:kafka.apache.org/contact
-
KafkaStreams是多线程的,但它通过分区而不是主题进行扩展。在KafkaStreams实例中使用多个线程相当于创建多个KafkaStreams实例(使用相同的拓扑):cf docs.confluent.io/current/streams/…
标签: apache-kafka apache-kafka-streams