【问题标题】:CDC for multiple Consumers of same table where each consumer reads different set of ColumnsCDC 用于同一张表的多个消费者,其中每个消费者读取不同的列集
【发布时间】:2020-02-18 21:58:48
【问题描述】:

我有一个表(假设是员工),其中包含大约 130 列描述员工记录的不同属性/特征。现在我有多个下游系统需要数据作为文件(批处理),这些文件定期运行(每 12 小时或 1 天)。

每个消费者只对某些列值感兴趣,而不是对整个员工记录集感兴趣。 例如。消费者 1:需求列 1、2、5、10、15、100、121、130 消费者 2:需要 3、4、15、125、126

等等。目前有 10-12 个不同的消费者需要不同的列集。

有趣的是,每个消费者只对基于该消费者感兴趣的列的 DELTA 信息感兴趣。 例如。因此,仅当第 1、2、5、10、15、100、121、130 列发生变化时,消费者 1 才应获得 DELTA。

是否有任何 CDC 或任何其他工具可以帮助我们实现这一要求?

PS:以下解决方案已被考虑并正在计划中。不知道该选哪一个:

维护 Employee 的前一天(历史)数据表,然后在 Oracle 中使用减号 ('-') 运算符来捕获差异。例如。 (Select Col 1, Col2, Col5, Col10.. from current-day-employee) - (Select Col 1, Col2, Col5, Col10.. from previous-day-employee)。

未考虑此选项,因为 (1) current-day-employee 表中的数据不断从源实时更改,并且 (2) 必须为每个下游消费者创建表。

请提出一个工具或解决方案。

【问题讨论】:

  • 您好 Ravish,如果我的回答是“是否有任何 CDC 或任何其他工具可以帮助我们实现这一要求?”,请告诉我。我怀疑我已经概述了一种让我们的产品满足它的方法,但请让我知道我给出的答案。

标签: database oracle apache-kafka cdc


【解决方案1】:

IBM IDR 产品具有“KCOP”(Kafka 自定义操作处理器)功能。它允许您定义任意数量的记录以写入 Kafka 以响应 DML 事件。因此,在单个 CDC 事件中,您可以为每个应用程序写入不同主题的自定义数据,然后只需要读取其各自的主题。

此外,还有提供前后值的 KCOP,因此您可以根据感兴趣的前后列之间是否发生变化,以编程方式确定何时写出记录。因此,每个结果主题只能包含一个条目,如果其中有适用的列更改。

https://www.ibm.com/support/knowledgecenter/en/SSTRGZ_11.4.0/com.ibm.cdcdoc.cdckafka.doc/concepts/kafkakcop.html

还有其他潜在的方法可以实现您的某些目标,但这是 IBM 产品 IDR 可以实现您的目标的一种方式的示例。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2021-12-31
    • 2011-06-04
    相关资源
    最近更新 更多