flinkcdc回撤流 如果更新之前的数据 会把先前的数据删除,再插入更新的数据?
在Flink的流处理中,存在所谓的"回撤流",它有能力对历史数据进行更新。然而,这并不意味着它会直接修改已经发送到下游节点的历史数据。相反,如果发现某些错误数据,它可以通过撤回操作来纠正这些错误数据。具体来说,所谓的"回撤",可以理解为传统数据处理中的"更新"操作,它是流式计算场景下对数据更新的一种处理方式。
对于Flink CDC而言,其主要是基于Change Data Capture(CDC)技术的数据同步工具,将关系型数据库中的数据实时同步到Flink流处理中进行实时计算和分析。因此,如果在更新过程中遇到需要回撤的情况,Flink CDC会通过撤回操作来进行数据的修正,而非直接删除并插入新数据。
是的,Flink CDC的回撤流机制确实是这样的。当一条数据被更新时,Flink CDC会先发送一条删除旧数据的消息,然后再发送一条插入新数据的消息。这样可以确保数据的准确性和一致性,同时也保证了CDC场景下的正确语义。
在Flink CDC中,回撤流(Retract Stream)是用于表示更新操作的一种流式数据格式。当更新之前的数据需要更新时,Flink CDC会将先前的数据标记为撤回(Retract),然后插入更新后的数据。
具体来说,当Flink CDC从数据源中获取到一条更新操作时,它会将更新前的数据标记为撤回,并将撤回的数据和更新后的数据一起发送到回撤流中。这样,接收回撤流的下游处理程序可以根据撤回标记对数据进行处理。
实际上,回撤流中的数据包含两种类型的记录:撤回记录(Retract Record)和插入/更新记录(Insert/Update Record)。撤回记录表示更新前的数据,插入/更新记录表示更新后的数据。下游处理程序可以根据撤回记录将撤回的数据从最终结果中删除,并根据插入/更新记录将更新后的数据插入或更新到最终结果中。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。