【问题标题】:We read data from brokers through multiple consumers using consumer group, but how the consumed data is combined?我们使用消费者组通过多个消费者从brokers读取数据,但是消费的数据是如何组合的呢?
【发布时间】:2017-09-19 09:02:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    根据设计,同一消费者组中的不同消费者彼此独立地处理数据。 (这种行为使应用程序能够很好地扩展。)

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-09-19
        • 2019-06-10
        • 2016-04-12
        • 1970-01-01
        • 2022-10-18
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 2011-06-04
        相关资源
        最近更新 更多