Flink CDC在 lookup join的时候 jdbc 获取的数据 ttl到了,但是这个时候主表cdc来了一条数据, 这个时候是去拉新数据,还是说旧数据 ,有大佬了解这个吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Flink CDC(Change Data Capture)的主要目标是从数据库中捕获数据的变更,并将这些变更事件发送到Flink进行处理。在处理过程中,如果发生lookup join操作,即从另一个数据源(如JDBC连接的数据库)查询数据并进行join操作,这时如果主表的CDC事件到达,而lookup source的数据TTL到期,那么Flink会如何处理,这取决于Flink的Watermark机制和Event Time处理逻辑。
在Flink中,每个事件都有一个时间戳,称为Event Time。Watermark是用来估计事件时间的,它表示的是某个时间点之后的事件不可能再到达了。当Watermark到达某个状态时,Flink会触发窗口的计算,并处理这个窗口内的所有事件。
对于你的问题,如果lookup source的数据TTL到期,也就是说这个数据在Event Time上可能已经过期了。如果此时主表的CDC事件到达,Flink会根据Watermark来判断这个事件是否应该被处理。如果Watermark已经超过了这个事件的Event Time,那么这个事件就会被丢弃;否则,这个事件会被处理,并在下一个窗口中继续处理lookup source的数据。
所以,在这种情况下,Flink会优先处理最新的CDC事件,然后再处理lookup source的数据。
在Flink CDC中,当使用lookup join时,如果JDBC从维表获取的数据(TTL到达)和主表CDC数据同时到达,具体的行为取决于实现和配置。
通常情况下,你可以配置Flink如何处理这种情况:
缓存策略:
更新策略:
一致性保证:
为了确保正确的数据处理,你需要根据业务场景来设计合适的策略,并可能需要调整相关配置参数。如果希望获得最新的数据,可以考虑设置较短的TTL或者在接收到新的CDC事件时主动更新缓存。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。