Page 282 - 《软件学报》2025年第7期
P. 282
秦政 等: 面向 Apache Flink 流式分析应用的高吞吐优化技术 3203
个优化策略对于系统性能提升的效果. 相较于 Yahoo Benchmark, 低电压检测应用的数据流更通用基础, 且来源于
真实应用, 在所有流式处理应用中均能找到与其流程相符的部分, 因而, 用这一数据作为测试负载更具备通用性.
在 KeyBy 算子分发策略中, 本文关注不同策略在不同流式数据分布情况下的负载均衡度, 以及负载不均衡对应用
整体吞吐率的影响. 在键级水位线和基于键值的数据交换策略中, 本文关注应用的整体吞吐率.
6.4.1 KeyBy 负载分配策略测试与评估
基于在线监测功能, 本文对 4 个主要的 KeyBy 算子分配策略进行负载均衡度测试. 主要测试 4 种流式数据分
布场景, 包括 Key 均匀分布且每个 Key 的数据量也均匀分布 (下称数据均匀分布)、Key 非均匀分布但数据均匀
分布、Key 均匀分布但数据非均匀分布、Key 非均匀分布且数据非均匀分布.
本实验沿用第 3 节中提出的负载均衡度指标. 实验结果如图 15 所示, Flink 原有的基于 Hash 的方式在 4 种场
景下均表现不佳, 最低的负载均衡度仅有 0.26, 这导致 70% 的额外计算时间. Modulo 策略在 Key 均匀分布时负载
均衡度接近 1, 但在后 3 个场景降低至 0.66、0.41 和 0.24. LeastKey 策略在 Key 非均匀分布时仍具有接近 1 的负
载均衡度, 但不适用数据非均匀分布场景. LeastCount 策略在缺少历史分布信息的情况下, 与 LeastKey 没有显著
差异, 在有历史信息支撑的情况下, 在 3 种场景至少都有 0.97 的负载均衡度.
1.0
0.8
负载均衡度 0.6
0.4
0.2
0
Hash Modulo LeastKey LeastCount LeastCount-
withHistory
Key 和数据均匀分布 Key 非均匀分布 数据非均匀分布 Key 和数据非均匀分布
图 15 KeyBy 负载分发策略与负载均衡测试
虽然 Least 策略表现总比 Hash 或者 Modulo 策略优秀, 但存在需要跟中心分配服务通信的开销, 因此在冷启
动时会对性能有影响. 当 Hash 或者 Modulo 满足使用者要求时, 不需要使用 Least 策略. LeastCount 需要历史信息
的支持, 在系统冷启动时与 LeastKey 没有显著差异, 因此对于数据均匀分布场景选择 LeastKey 即可.
进一步地, 本文测试了 Hash 和 4 种算子分发策略下, 流式处理系统吞吐率. 结果如图 16 所示, 在 Key 和数据
非均匀分布场景下, 由于负载分配均衡, LeastCountwithHistory 吞吐率提升到基准性能的 3 倍以上. 在其余 3 个场
景下, 相较于 Hash 策略, 4 种策略均体现出了显著性能优势.
4.0
Hash Modulo LeastKey LeastCount LeastCountwithHistory
3.5
3.0
吞吐率提升 2.0
2.5
1.5
1.0
0.5
0
Key 和数据均匀分布 Key 非均匀分布 数据非均匀分布 Key 和数据非均匀分布
图 16 负载分发策略吞吐率提升示意图

