ApacheKafka—我们通过使用consumer group的多个消费者从代理读取数据,但是如何组合使用的数据呢?

ao218c7q  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(359)

我需要来自kafka brokers的数据,但是为了快速访问,我使用了多个具有相同组id的消费者,称为消费者组。但是在每个消费者阅读之后,我们如何组合来自多个消费者的数据?有什么逻辑吗?

vh0rcniy

vh0rcniy1#

kafka的目标是为您提供一个可伸缩、高性能和容错的框架。让一组使用者异步读取来自不同分区的数据可以让您归档前两个目标。数据的分组有点超出了标准kafka流的范围-在最简单的情况下,您可以使用单个使用者实现单个分区,但我确信这不是您想要的。
对于来自不同消费者的单一状态的聚合,我建议您应用一些专门为此类目标设计的解决方案。如果您使用的是hadoop,那么就可以使用storm trident bolt,它允许您从kafka喷口聚合数据。或者你可以使用spark流,这将允许你做同样的,但在一个有点不同的方式。或者,作为一个选项,您可以始终使用标准kafka库实现具有此类逻辑的自定义组件。

o8x7eapl

o8x7eapl2#

通过设计,同一消费群体中的不同消费者彼此独立地处理数据(这种行为使应用程序能够很好地扩展。)
但是在每个消费者阅读之后,我们如何组合来自多个消费者的数据呢?有什么逻辑吗?
当你使用Kafka的“消费者api”(也称为“消费者客户机”库)时,我认为你使用的是基于你问题的措辞的简短但稍微简化的答案:如果你需要组合来自多个消费者的数据,最简单的选择是在另一个Kafka主题中提供这个(新的)输入数据,在随后的处理步骤中进行合并。一个简单的例子是:另一个,第二个kafka主题将被设置为只有一个分区,因此任何后续的处理步骤都将看到需要合并的所有数据。
如果这听起来有点太复杂,我建议使用kafka的streams api,这使得定义这样的处理流(例如,连接或聚合,如您的问题中所述)更加容易。换句话说,kafka streams为您提供了许多您想要的内置“逻辑”:https://kafka.apache.org/documentation/streams/

相关问题