计算引擎性能优化:资源、并行度、Shuffle 与状态

计算引擎性能优化要围绕资源配置、并行度、Shuffle、状态大小、GC、反压和 Checkpoint 成本展开。

计算引擎性能优化:资源、并行度、Shuffle 与状态

计算任务慢,不能只说“加机器”。很多性能问题来自并行度不合适、Shuffle 太重、状态过大、数据倾斜或外部系统变慢。

Rendering diagram...

资源配置

Spark 关注 Driver 内存、Executor 内存、Executor Core、Shuffle 磁盘。

Flink 关注 TaskManager 内存、Task Slot、State Backend、Checkpoint 存储。

资源太少会慢,资源太多也可能造成调度和 GC 成本。

并行度

并行度太低,资源用不起来。并行度太高,Task 太碎,调度和网络开销变高。

Flink 里并行度还会影响状态分布和恢复时间。

Shuffle 优化

减少 Shuffle 通常比盲目加资源更有效。

常见方式:

  • 提前过滤。
  • 列裁剪。
  • Broadcast Join。
  • 减少 distinct。
  • 合理分区。
  • 处理数据倾斜。

状态优化

Flink 作业状态过大,会导致 Checkpoint 变慢、恢复变慢、RocksDB 压力变大。

可以考虑:

  • 设置状态 TTL。
  • 减少无用状态。
  • 拆分热 key。
  • 优化序列化。
  • 调整 Checkpoint 间隔。

反压

反压说明下游处理不过来,上游被迫降速。

常见原因是 Sink 慢、外部接口慢、状态访问慢、数据倾斜或资源不足。

小结

性能优化要先定位瓶颈,再动参数。Spark 多看 Shuffle、Join、倾斜和分区;Flink 多看状态、反压、Checkpoint 和 Sink。

参考链接