大佬们,flinkcdc 监听update操作,获取不到修改前的数据,这是什么原因造成的?[阿里云实时计算 Flink版]

大佬们,flinkcdc 监听update操作,获取不到修改前的数据,这是什么原因造成的?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 在 Flink CDC 中,当使用 upsert 输出格式进行增量同步时,可能会遇到无法获取修改前数据的问题。这是因为 upsert 输出格式只会输出变更后的数据,而不会输出修改前的数据。

    如果您需要获取修改前的数据,可以考虑使用 debezium-json 或 json-schema 格式进行输出。这些输出格式会将变更前后的数据都输出,您可以通过比较变更前后的数据来获取修改前的数据。

    需要注意的是,使用 debezium-json 或 json-schema 输出格式可能会对性能和网络带宽产生一定的影响,因为输出的数据量会比 upsert 格式更大。因此,在选择输出格式时,需要综合考虑数据量、网络带宽和性能等因素。

  2. 在 Flink CDC 中监听 update 操作时,无法获取修改前的数据是因为 Flink CDC 默认只会将变更后的数据作为事件输出,并不包含变更前的数据。这是由 CDC 数据源和 Flink 的实现机制所决定的。

    当使用 Flink CDC 监听数据库的变更操作时,它会识别到数据的变更并生成相应的事件流。对于 update 操作,Flink CDC 只会输出包含变更后的数据的事件,而不会包含变更前的数据。

    要获取修改前的数据,您可以考虑以下几种方式:

    1. 使用 Change Data Capture (CDC) 工具:如果您的数据库支持 CDC 功能,可以使用专门的 CDC 工具来捕获数据库的变更日志。这些变更日志将包含完整的变更前后数据信息,您可以通过解析和处理这些日志来获取变更前的数据。

    2. 开启数据库的历史记录或审计功能:某些数据库提供了历史记录或审计功能,可以记录所有的变更操作,并包含变更前后的数据信息。您可以开启该功能并查询历史记录以获取变更前的数据。

    3. 在应用层进行额外的查询:如果没有其他手段获取变更前的数据,您可以在 Flink 中的处理逻辑中进行额外的查询,以获取变更前的数据。例如,在处理 update 事件时,可以根据已知的唯一标识符再次查询数据库,获取变更前的数据。

    需要注意的是,以上方法都可能会带来额外的开销和复杂性。根据具体业务需求和数据库特性,选择适合的方式来获取变更前的数据。

  3. 不是cdc的,是flink的,https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/connectors/table/formats/debezium/,此回答整理自钉群“Flink CDC 社区”