开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

请问一下Flink,我进行双流join之后,为什么右表的数据没有了啊?

请问一下Flink,我进行双流join之后,为什么右表的数据没有了啊? 正常应该是有数据能匹配上的,是我有什么配置没有配吗?在sql里这个配置能更改吗?

展开
收起
真的很搞笑 2023-11-21 08:11:49 191 0
3 条回答
写回答
取消 提交回答
  • 超过了这个时间没数据更新,右边就会匹配不到,state有默认存储时间的.这个是不好的,state时间越长,状态越大,推荐维表join,双流join推荐的是双方数据在默认的ttl内都有更新过来,如果你的维表数据不大,flink 1.18 SQL中可以对不同流的的ttl设置存储时间.你的flink如果不是1.18 ,推荐用维表join,维表join是根据a表的时间去实时去数据库拿取,当然你也可以设置缓存,此回答整理自钉群“【③群】Apache Flink China社区”

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

    如果你在 Apache Flink 中进行了双流 Join 之后,发现右表的数据不见了,请检查以下内容:

    1. 时间窗口:你可能设置的时间窗口太短,导致 Join 出来的数据不足以包含右表的所有数据。
    2. 数据类型:右表中的数据可能与左表不兼容,导致无法进行 Join。
    3. 水印设置:你可能没有正确设置水印,导致数据丢失。

    你可以尝试以下解决方案:

    1. 调整时间窗口:适当延长时间窗口的长度,以涵盖更多右表的数据。
    2. 检查数据类型:确保左右表中的数据类型相匹配。
    3. 检查水印设置:检查水印设置是否正确,并且不会导致数据丢失。

    另外,Flink SQL 提供了一些配置选项来处理这些问题,例如 timeCharacteristiceventTimeWatermark 等,你可以在 SQL 代码中设置这些参数来更改 Join 行为。但是,你还需要确保其他设置(例如 watermarkStrategyallowedLateness)是正确的。

    2023-11-21 14:13:48
    赞同 展开评论 打赏
  • 在Flink中进行双流join操作时,右表的数据没有了可能是由于以下原因:

    1. 左、右表的进入时机不一致,导致原本可以关联的数据无法匹配上。
    2. 窗口设置不合理,可能导致没有满足条件的数据触发window join。
    3. watermark的设置可能不够合理,导致某些数据被误判为迟到而被过滤掉。
    4. state数据的保存策略可能有问题,如state数据过多导致内存溢出或不会自动清理过期的state数据。

    为了解决上述问题,您可以尝试以下方法:

    1. 确保左、右表的进入时机尽可能一致,或者调整窗口大小以适应数据流入的节奏。
    2. 检查并优化watermark的设置,确保它能够准确地表示数据的真实时间。
    3. 对于state数据,考虑设置ttl过期策略,使其在一段时间后自动被清理,从而避免内存溢出的问题。
    4. 如果使用了状态算子,请确保key的选择是合适的,以便能够正确关联左、右两表的数据。
    2023-11-21 10:44:26
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载