这个时候是去拉新数据,还是说旧数据 ,有大佬了解这个吗?

Flink CDC在 lookup join的时候 jdbc 获取的数据 ttl到了,但是这个时候主表cdc来了一条数据, 这个时候是去拉新数据,还是说旧数据 ,有大佬了解这个吗?

展开
收起
真的很搞笑 2023-12-01 08:33:58 53 分享 版权
2 条回答
写回答
取消 提交回答
  • 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的数据。

    2023-12-02 17:11:53
    赞同 展开评论
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在Flink CDC中,当使用lookup join时,如果JDBC从维表获取的数据(TTL到达)和主表CDC数据同时到达,具体的行为取决于实现和配置。

    通常情况下,你可以配置Flink如何处理这种情况:

    1. 缓存策略

      • 如果启用了缓存(如LookupCache),那么查询会首先检查缓存。如果缓存未命中,才去外部数据库查询。
      • 当缓存中的记录过期(TTL到達)且有新的CDC事件到来时,可以选择拉取新数据或继续使用旧数据,这取决于你的业务需求和配置。
    2. 更新策略

      • 可以配置在接收到新的CDC事件时是否强制刷新缓存或者重新查询外部数据库。
    3. 一致性保证

      • Flink提供了多种状态一致性选项,包括at-least-once、at-most-once和exactly-once。选择不同的选项会影响结果的准确性。

    为了确保正确的数据处理,你需要根据业务场景来设计合适的策略,并可能需要调整相关配置参数。如果希望获得最新的数据,可以考虑设置较短的TTL或者在接收到新的CDC事件时主动更新缓存。

    2023-12-01 14:45:09
    赞同 展开评论

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理