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

大佬们,Flink中双流join,要全量join,状态无限增长,这种有什么好的解决方案么??cdc打

大佬们,Flink中双流join,要全量join,状态无限增长,这种有什么好的解决方案么??cdc打宽表a是啥意思呀这个方案没看懂,不能维表join,数据不能过期不能设置ttl

展开
收起
真的很搞笑 2023-07-18 21:45:30 238 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Flink 中进行双流 join 时,如果需要全量 join,会导致状态无限增长的问题。这是因为全量 join 需要将两个流中的所有数据都保存在状态中,随着数据的不断增加,状态也会不断增长,最终可能导致内存溢出或者其他性能问题。

    为了解决这个问题,可以考虑使用 CDC(Change Data Capture)技术,将数据从数据库中实时抓取到 Flink 中,避免将全部数据保存在状态中。具体来说,可以使用 Flink CDC 订阅数据库中的数据变化,将变化的数据流通过 Kafka 等消息队列发送到 Flink 中,然后进行 join 计算。

    使用 CDC 技术的好处是,可以避免将全部数据保存在状态中,从而避免状态无限增长的问题。另外,CDC 还可以实现实时数据同步,保证数据的准确性和一致性。

    需要注意的是,使用 CDC 技术也存在一些问题和挑战,例如 CDC 技术本身的性能和稳定性问题、数据一致性问题、数据格式转换问题等。因此,在使用 CDC 技术时,需要仔细评估其优缺点,选择合适的实现方案,并进行相应的调优和测试。

    2023-07-29 21:10:11
    赞同 展开评论 打赏
  • 对于Flink中双流的全量join,状态无限增长的情况,可以考虑以下解决方案:

    1. 增加资源:通过增加Flink集群的内存和CPU资源,提供更大的计算能力来处理状态的增长。这可能需要根据实际情况进行性能测试和调整。

    2. 设置TTL(Time To Live):如果您的数据在一定时间后不再有效,可以使用TTL机制来自动清理过期的状态。通过为状态设置合适的过期时间,使得不再需要的状态可以自动清理,从而控制状态的增长。

    3. 利用维表join:将频繁变化的流作为维表,并使用Flink的维表join功能将其与主流进行关联。维表可以存储在外部存储系统中,例如数据库或缓存系统,这样可以避免在Flink中维护大量的状态。

    4. 使用Change Data Capture(CDC)打宽表:将需要全量join的流数据进行CDC,即捕获流中的变化并以增量的方式进行更新。使用CDC技术可以将变化的数据进行补充更新,而不是每次全量join。这种方式可以减少状态的增长,并提高处理效率。

    2023-07-29 19:01:34
    赞同 展开评论 打赏
  • 加内存 加 cpu 干就完了,TTL,改成维表join,或者利用cdc打宽表a,在启动a表来cdc消费数据image.png
    ,此回答整理自钉群“【③群】Apache Flink China社区”

    2023-07-19 12:23:36
    赞同 展开评论 打赏

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

相关产品

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

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