我们使用消费者群体通过多个消费者从经纪人那里读取数据,但消费数据是如何组合的?

时间:2017-09-19 09:02:14

标签: apache-kafka kafka-consumer-api consumer

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

2 个答案:

答案 0 :(得分:2)

按照设计,同一个消费者群体中的不同消费者彼此独立地处理数据。 (此行为允许应用程序很好地扩展。)

  

但是在每个消费者阅读之后,我们如何组合来自多个消费者的数据?有什么逻辑吗?

当您使用Kafka" Consumer API"时,简短但略微简化的答案(也称为"消费者客户端"库),我认为你根据问题的措辞使用的是:如果你需要组合来自多个消费者的数据,最简单的选择是做到这一点(新的)输入数据在另一个Kafka主题中可用,您可以在后续处理步骤中进行组合。一个简单的例子是:另一个,第二个Kafka主题将被设置为只有1个分区,因此任何后续处理步骤都将看到需要组合的所有数据。

如果这听起来有点过于复杂,我建议使用Kafka的Streams API,这样可以更容易地定义这样的处理流程(例如连接或聚合,就像你的问题一样)。换句话说,Kafka Streams为您提供了许多所需的内置"逻辑"您正在寻找:https://kafka.apache.org/documentation/streams/

答案 1 :(得分:0)

Kafka的目标是为您提供可扩展,高性能和容错的框架。让一组消费者异步读取来自不同分区的数据,可以将前两个目标归档。数据的分组有点超出了标准Kafka流程的范围 - 您可以在最简单的情况下使用单个消费者实现单个分区,但我确信这不是您想要的。

对于来自不同消费者的单一状态的聚合,我建议您应用专门为此类目标设计的解决方案。如果您正在使用Hadoop,您可以使用Storm Trident bolt,它允许您聚合来自Kafka spouts的数据。或者您可以使用Spark Streaming,它允许您以相同的方式执行相同操作。或者作为一个选项,您始终可以使用标准Kafka库实现具有此类逻辑的自定义组件。