目录
一、Flink内存优化
1.1 Flink 内存配置
Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)和堆外内存(Off-Heap Memory)。 其中堆外内存包括直接内存(Direct Memory)和本地内存(Native Memory)。
TaskManager的内存划分
JobManager 的内存划分
二、配置进程参数
2.1 场景
Flink on Yarn 模式下,有 JobManager 和 TaskManager 两种进程。在任务调度和运行的过程中,JobManager 和 TaskManager 承担了很大的责任。
因此,JobManager 和 TaskManager 的参数配置对 Flink 应用的执行有着很大的影响意义。用户可以通过如下操作对 Flink 集群性能做优化。
2.2 操作步骤
1. 配置 JobManager 内存
JobManager 负责任务的调度,以及 TaskManager、RM之间的消息通信。当任务数变多,任务平行度增大时,JobManager 内存都需要相应增大。可以根据实际任务数,为 JobManager 设置一个合理的内存大小。
- 在使用 yarn-session 命令时,添加“-jm MEM”参数设置内存
- 在使用 yarn-cluster 命令时,添加“-yjm MEM”参数设置内存
2. 配置 TaskManager个数
每个 TaskManager 每个核同时能跑1个 task,所以增加了 TaskManager 的个数相当于增大课任务的并发度。在资源充足的情况下,可以相应的增加 TaskManager 的个数,以提高运行效率。
- 在使用 yarn-session 命令时,添加“-n NUM”参数设置 TaskManager 个数
- 在使用 yarn-cluster 命令时,添加“-yn NUM”参数设置 TaskManager 个数
3. 配置 TaskManager Slot 个数
每个 TaskManager 多个核同时能跑多个 task,相当于增大了任务的并发度。但是由于所有核共用 TaskManager 的内存,所以要在内存和核数之间做好平衡。
- 在使用 yarn-session 命令时,添加“-s NUM”参数设置 SLOT 数
- 在使用 yarn-cluster 命令时,添加“-ys NUM”参数