flink1.14.6跑一个简单的insert语句,taskmanager的JVM内存都占用了2.?[阿里云实时计算 Flink版]

flink1.14.6跑一个简单的insert语句,taskmanager的JVM内存都占用了2.5G到4G左右,这是不是有内存泄露啊,而且严重影响了cdc的速度,56分钟才抽取了840万条数据?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 在使用 Flink 1.14.6 运行一个简单的 insert 语句时,你观察到 TaskManager 的 JVM 内存占用了2.5GB到4GB左右,并且速度较慢。这可能是由于以下几个原因导致的:

    1. Flink 1.14.6 存在内存泄漏问题:特别是 ObjectHashMap 类可能会导致内存泄漏。你可以考虑升级到较新的 Flink 版本(如 1.14.7 或 1.15),其中部分内存问题已经修复。

    2. RocksDB StateBackend 默认占用较多内存:Flink 默认使用 RocksDB 作为 StateBackend,它可能占用较多的内存空间。你可以尝试使用其他的 StateBackend,如 FsStatebackend。

    3. TaskManager 分配的内存较多:如果你为 TaskManager 分配了较多的 JVM 内存,Flink 将会尽量利用这些内存资源。

    4. SQL 查询涉及较多的聚合、连接等操作:如果你的 SQL 查询涉及较多的聚合、连接等操作,会占用更多的内存空间。

    为了解决这个问题,你可以考虑以下优化措施:

    – 升级到较新的 Flink 版本:升级到 1.14.7 或 1.15 版本,其中部分内存问题已经修复。

    – 使用其他的 StateBackend:考虑使用 FsStatebackend 作为 StateBackend,它可能能够减少内存占用。

    – 减少 TaskManager 分配的 JVM 内存:通过修改 Flink 的配置文件(conf/flink-conf.yaml),降低 TaskManager 分配的 JVM 内存,例如调整 taskmanager.memory.fraction 参数。

    – 优化 SQL 查询:尽量避免过多的连接和中间结果,优化 SQL 查询的性能,从而减少内存消耗。

    – 降低 Table API 的并发度:如果使用 Table API 进行操作,降低并发度可以减少内存消耗。

    综上所述,要减少 Flink 1.14.6 的内存消耗,可以尝试使用上述优化措施,并确保合理配置和优化 SQL 查询和 Table API 的使用。希望这些建议对你有帮助。如果还有其他问题,请随时提问。

  2. link 1.14.6 的任务消耗较多内存是存在的问题。
    这可能是以下几个原因造成的:
    Flink 1.14.6 存在内存泄漏问题,特别是 ObjectHashMap 类。
    Flink 的 RocksDB State Backend 默认占用较多内存。
    你的 TaskManager 分配的内存较多,Flink 会尽量利用完。
    执行的 SQL 查询涉及较多的聚合、连接等操作,占用更多内存。
    使用的 Table API 或 SQL 功能比较复杂,会占用更多内存。
    为了解决这个问题,你可以从以下方面做优化:
    升级到较新的 Flink 版本,如 1.14.7或1.15,部分内存问题已修复
    考虑使用其他 StateBackend,比如 FsStatebackend
    减少 TaskManager 分配的 JVM 内存
    优化 SQL 查询,避免过多连接和中间结果
    使用 Table API 时,降低并发度,减少内存消耗
    具体操作是修改 conf/flink-conf.yaml配置:
    yaml
    Copy
    taskmanager.memory.fraction: 0.7 # 降低 JVM 内存使用
    state.backend: filesystem # 使用 FileSystem StateBackend
    总的来说,要减少 Flink 1.14.6 的内存消耗,不仅要合理配置,还要优化 SQL 查询和 Table API 使用。