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

Flink中FLINK-SQL,两个千万级的表join,并行度12,tm=4096m,慢得扣卡,?

Flink中FLINK-SQL,两个千万级的表join,并行度12,tm=4096m,慢得扣卡,有没大佬知道哪个环节出了问题?

展开
收起
真的很搞笑 2023-07-25 20:29:53 375 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Flink SQL 中进行大表 join 操作时,如果没有进行优化,会导致性能下降,从而导致任务运行变慢。您可以尝试以下几种优化方式:
    增加 TaskManager 的内存:
    在 join 操作中,会涉及到大量的数据交换和计算,因此需要充分利用机器的资源来进行计算。可以考虑增加 TaskManager 的内存,从而提高任务的运行效率。通常建议将 TaskManager 的内存设置为 4GB 至 8GB 左右。
    调整并行度:
    根据您的数据规模和机器的资源情况,可以尝试调整任务的并行度。可以通过逐步增加或减少并行度的方式,找到最优的并行度设置,从而提高任务的运行效率。
    使用 RocksDB 状态后端:
    在 join 操作中,需要对数据进行排序和聚合操作,需要大量的状态存储。如果使用默认的内存状态后端,可能会导致内存不足,从而导致性能下降。可以考虑使用 RocksDB 状态后端,将状态存储到磁盘中,从而避免内存不足的问题。
    使用布隆过滤器:

    2023-07-29 18:27:47
    赞同 展开评论 打赏
  • 当在 Flink 中使用 FLINK-SQL 进行两个千万级表的 Join 时,可能会遇到性能问题。以下是可能导致慢速执行和卡顿的一些常见原因:

    1. 数据倾斜:如果两个待 Join 的表中存在数据倾斜(即某些键的数据量远大于其他键),这会导致 Join 操作不均衡,部分任务运行时间较长,从而影响整体性能。可以通过对数据进行预处理、拆分或使用更高级别的 Join 算法(如 Sort-Merge-Join)来解决数据倾斜问题。

    2. 内存不足:您提到的 TaskManager 内存设置为 4096m,但如果两个千万级表的数据无法完全加载到内存中,就会频繁发生磁盘交换,严重影响性能。建议增加 TaskManager 的内存限制,以确保足够的内存用于数据加载和计算。

    3. 并行度设置:并行度设置过低可能导致资源利用率不高,无法充分利用集群的计算能力。同样地,并行度设置过高也可能导致资源竞争和调度开销增加。需要根据集群的规模和资源情况合理设置并行度,以达到最佳性能。

    4. Join 条件和谓词选择:优化 Join 条件和谓词的选择可以提高性能。尽可能选择在数据量较小的表上进行过滤操作,减少 Join 的数据量。同时,可以考虑将 Join 操作拆分为多个阶段,使用中间结果进行连续的 Join 操作。

    5. 硬件资源限制:如果集群的硬件资源(如 CPU、内存、磁盘)存在瓶颈或不足,都会影响 Flink 作业的执行速度。请确保集群的硬件资源满足作业的需求,并根据需要进行扩容或优化。

    针对以上问题,您可以先根据日志和监控信息,确定具体的性能瓶颈所在。然后,根据问题的原因采取相应的优化措施,例如数据预处理、调整并行度和内存配置、优化 Join 条件和谓词等。此外,还可以使用 Flink 的性能调优工具和技术,如异步 I/O、状态后端优化等,来提升作业的性能和稳定性。

    2023-07-29 17:38:20
    赞同 展开评论 打赏
  • 我们这边近亿级的表join测试,内存消耗高的离谱,join慢也是,先离线同步一把,再实时读取吧,flink跑离线也挺好用的。然后实时再指定个读取时间,此回答整理自钉群“【③群】Apache Flink China社区”

    2023-07-25 20:40:43
    赞同 展开评论 打赏

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

相关产品

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

    更多
    SQL Server在电子商务中的应用与实践 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载