【问题标题】:Kafka event Producer on RDBMS data & reading it at consumer in same order of producer in case of multiple topicsRDBMS 数据上的 Kafka 事件生产者并在多个主题的情况下以生产者的相同顺序在消费者处读取它
【发布时间】:2021-06-12 18:54:58
【问题描述】:

我在 RDBMS 中有两个业务实体:Associate 和 AssociateServingStore。我计划有两个主题目前正在将 ADD/UPDATE/DELETE 写入 AssociateTopic 和 AssociateServingStoreTopic,这两个主题被多个下游系统使用,这些系统将用于他们自己的业务需求。

每当从 UI 添加 Associate/AssociateServingStore 时,目前我将 Associate 和 AssociateServingStore 写入两个单独的主题,并且我最后有一个消费者来阅读这两个主题,问题是可以从中读取消息的顺序两个单独的主题..因为这遵循一个工作流程,如果不先阅读 Associate ,我将无法阅读 AssociateServingStore .. 如何按顺序阅读它们? (使用分区键,我可以按分区内相同主题的顺序读取数据)但是在这里我有两个单独的主题并想按顺序阅读,首先阅读 Associate & 然后 AssociateServingSotre 以及如何以我可以阅读的方式设计它在 AssociateServingStore 之前关联。

如果我自己以消费者的身份思考,我计划读取 Associate 的前 50 行,然后从 AssocateServingStore 读取 50 行并处理消息,但问题是如果我从所消耗的 50 条记录中获取 AssociateServingStore 中的一行从前 50 个关联事件中尚未读取/处理,我会在最后遇到问题,说在子插入时未找到父记录。

如何在这些 RDBMS 业务事件的情况下设计消费者,我们有多个主题但按顺序阅读它们,这样我就不会陷入在阅读父主题消息之前可能会阅读特定子主题消息的情况,并且在插入/更新期间遇到问题,例如找不到父记录。有没有办法我们可以在临时表中暂存数据并使用时间戳相应地处理它们?我想不出可以保证读取顺序并相应地处理它们的设计

有什么建议吗?

【问题讨论】:

    标签: apache-kafka event-handling kafka-consumer-api confluent-platform azure-eventhub


    【解决方案1】:

    这似乎是一个流连接用例,由一些流处理框架/库支持。

    例如,使用 Kafka Streams 或 ksqlDB,您可以将这些主题视为表或流,并在表、流或流之间应用连接。

    这些连接处理与传统数据库上不会发生的流相关的所有注意事项,例如当一个流上的时间比另一个流上的时间更近时等待多长时间[1][2]。

    本演示文稿[3] 详细介绍了联接如何在 Kafka Streams 和 ksqlDB 上工作。

    [1]https://cwiki.apache.org/confluence/display/KAFKA/KIP-353%3A+Improve+Kafka+Streams+Timestamp+Synchronization [2]https://cwiki.apache.org/confluence/display/KAFKA/KIP-695%3A+Further+Improve+Kafka+Streams+Timestamp+Synchronization [3]https://www.confluent.io/events/kafka-summit-europe-2021/temporal-joins-in-kafka-streams-and-ksqldb/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2019-01-15
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多