【问题标题】:Kafka consumer-group卡夫卡消费者组
【发布时间】:2021-08-22 17:19:33
【问题描述】:

我是 Kafka 的新手,正在学习 Kafka 内部知识。请随时根据需要更正我的理解。

这是我的实时场景。感谢所有回复:

  1. 我有一个接收数据文件的实时 FTP 服务器。假设是索赔文件。
  2. 我会将这些数据发布到一个主题中。让我们将主题称为 claim_topic(2 个分区)。
  3. 我需要订阅这个claims_topic,阅读消息并将它们写入Oracle 和Postgres 表。我们将 oracle 表称为 Otable,将 Postgres 表称为 Ptable。
  4. 我需要捕获每个主题消息并将它们写入 Otable 和 Ptable。基本上 Otable 和 Ptable 必须同步。

假设我将编写两个消费者,一个用于 oracle,另一个用于 postgres。

问题1:两个消费者应该在同一个消费者组中吗?我相信不会。因为它会导致一个消费者仅从特定分区获取消息。

问题 2:如果问题 1 为真。那么请启发我在什么情况下多个消费者被分组在同一个消费者组下?非常感谢实时场景。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    consumer group 是一个应用消费者组合在一起的逻辑名称,他们共同完成对 topic 内部数据的处理,每个分区只能由消费者组的一个消费者处理,使分区计数成为并行消费的最大限制/ 一个主题的处理能力。消费者组中的每个消费者都在处理一个或多个分区,如果您有一个具有多个分区的主题消费者,它将自行处理所有分区,如果您将更多消费者添加到同一个消费者组,他们将划分/“重新平衡”其中的主题分区,希望它能清除一切

    在设置消费者时,您配置其组 id,这是消费者组,具有相同组 id 的两个独立消费者成为同一个消费者组的成员

    如果整个生产过程中产生高产量并且一个消费者无法承受压力,您可以通过运行更多具有相同消费者组的消费者来共同处理主题来扩展它,每个任务将拥有不同分区的所有权

    对于您的用例,Postgres 和 Oracle 的完全同步不容易实现,您可以使用 kafka connect 通过相关的接收器连接器将数据从您的主题读取到您的目标,但它们将再次“最终保持一致”,因为他们不共享原子事务

    我会探索 Spring 数据事务层

    Spring @Transactional with a transaction across multiple data sources

    【讨论】:

    • 感谢您的回复。我的理解是每个消费者都是一个连接到主题的独立过程。考虑到这一点,消费者如何分组在同一个消费者组下?用于将消费者归入同一组的分组标准是什么?
    • 在设置消费者时,您配置其组 id,这是消费者组,具有相同组 id 的两个独立消费者成为同一个消费者组的成员
    • 是的,我知道我们在设置消费者时使用 group.id 来定义其消费者组。我的问题更多是关于我何时需要使用同一组进行独立流程?我在我的问题中发布的用例,oracle 和 Postgres 进程必须在一个单独的组中,对吗?
    • 如果您对 pgs 和 oracle 的摄取过程是分开的,那么您必须使用单独的组才能从主题中获取所有消息。如果整个生产过程中产量很高并且一个消费者无法承受压力,您可以通过运行更多具有相同消费者组的消费者来共同处理主题来扩展它,每个任务将在不同的分区上拥有所有权
    • 好的,所以如果我必须做 3 的并行度,那么我应该复制相同的消费者进程三次并在同一个消费者组下启动所有这些进程。对吗?
    【解决方案2】:

    不,两个消费者都不想在同一个消费者组中,因为他们需要分别消费所有主题数据并写入 Otable 和 Ptable。

    如果两个消费者都在一个消费者组中,那么 Otable 从一个分区获取数据,而 Ptable 从另一个分区获取数据。 (因为你有 2 个分区)

    在我看来,使用两个消费者和两个消费者组,那么如果你的主题有高流量,那么你可以分别为 Otable 和 Ptable 扩展消费者数量。

    如果您需要两个消费者来编写 Ptable,请为这些消费者使用相同的组 id。然后消费者流量将与许多消费者共享。 (在您的情况下,一组消费者的最大数量应该是 2,因为您的主题中只有 2 个分区)。如果 Otable 需要此功能,请遵循相同的方案。

    【讨论】:

    • 感谢您的回复。如何扩展消费者数量?我相信我可以启动多个消费者代码实例?如果有更多方法请更正或添加..谢谢
    • 您可以启动多个消费者属于单个消费者组。然后它将从您的主题的不同分区中消耗。但是消费者实例的最大数量应该是主题的分区数
    猜你喜欢
    • 1970-01-01
    • 2022-07-13
    • 2019-07-03
    • 2018-05-05
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2020-10-28
    • 2015-12-18
    相关资源
    最近更新 更多