Flink CDC中flink-sql里的更新记录是一直都在的?
是的,在 Flink SQL 中,插入、删除、更新三种操作都会在流式环境中持续不断地更新,并保留一段时间的历史记录,直到被提交或达到超时时限为止。
具体来说,在 Flink SQL 中,Table API 提供了一种类似于 SQL 的方式来操作流数据,并且支持 Insert、Delete 和 Update 三种操作。它们都会产生一个更新语句,并且保持在内存中,等待后续的操作。当出现删除或更新操作时,它会被触发并在流水线中传输到下游的 Job 之中。
如果你想检查某一条记录是否被更新或删除,可以使用 EXISTS 和 ROW_NUMBER 函数来检索历史记录,并在每一步得到结果之前做统计分析,从而确定是否存在更新或删除记录。
Flink CDC是变更数据获取的简称,它可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。Flink SQL内部支持了完整的changelog机制,所以Flink对接CDC数据只需要把CDC数据转换成Flink认识的数据。在Flink 1.11里面重构了TableSource接口,以便更好支持和集成CDC。重构后的TableSource输出的都是RowData数据结构,代表了一行的数据。在RowData上面会有一个元数据的信息,我们称为RowKind。RowKind里面包括了插入、更新前、更新后、删除,这样和数据库里面的binlog概念十分类似。通过Debezium采集的JSON格式,包含了旧数据和新数据行以及原数据信息,op的u表示是update更新操作标识符,ts_ms表示同步的时间戳。因此,Flink-sql里的更新记录是一直都在的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。