Flink CDC2.4.1 flink1.14.6,sql left join一些表,非主键关键,会丢失delete同步,这个咋解决?
如果您使用的是Flink CDC v2.4.1和Flint 1.14.6,可能是因为缺少合适的配置或者连接器导致删除事件无法及时捕获。
针对这种问题,您可以在Flink SQL语句中加入WITH (key='id')
关键字,以指定Join的主键字段,如:
SELECT * FROM sourceTable AS src LEFT JOIN targetTable AS tgt ON src.id = tgt.id WITH (key='id')
在Flink CDC中,如果使用非主键关键进行left join操作,可能会丢失delete同步。这是因为CDC Connector只能保证基于主键的变更捕获和同步,对于非主键的关键字段,无法保证其变更顺序和一致性。
为了解决这个问题,可以考虑以下两种方案:
将非主键关键字段作为主键来处理。这样可以利用Flink CDC提供的基于主键的变更捕获和同步机制,确保数据的一致性和完整性。但需要注意的是,这可能需要对数据模型进行修改,并重新设计表结构。
采用其他方式来保证数据的一致性。例如,可以在应用程序中实现一些逻辑来处理非主键关键字段的变更,或者使用一些外部工具或服务来协调不同表之间的数据同步。但这种方式需要额外的开发和维护工作,并且可能会增加系统的复杂性和风险。
在设计Flink CDC应用时,应该尽量遵循数据库的主键原则,以减少不必要的麻烦和风险。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。