Page 278 - 《软件学报》2025年第7期
P. 278
秦政 等: 面向 Apache Flink 流式分析应用的高吞吐优化技术 3199
KeyBy 的全量数据传输, 以提高吞吐率和降低传输延迟.
(1) Local Merge
Flink 的编程模型在 MapReduce 编程模型上进行扩展, 也通过并行执行算子任务支持任务并行, 且支持更多
样化的算子. 其 KeyBy 算子类似于 MapReduce 中的 Shuffle 阶段, 但不支持 Combine 函数进行本地数据聚合.
Flink 仅在 Flink SQL 中支持 Local-Global Aggregation [47] , 其目标是解决数据倾斜问题, 不适用于事件驱动型流式
分析应用. 流式处理中, 由于数据具有时序信息, 不能简单地进行聚合. 本文提出 Local Merge 算子, 支持时序感知
的本地数据聚合, 从而减少 KeyBy 时的网络传输数据量.
Local Merge 算子将事件划分到不同的时间槽中分别聚合, 聚合后事件的时间戳被设置为所有事件的最大值,
以向后传递正确的水位线, 如图 11 基于键值的数据交换策略 (b) 所示. Local Merge 算子在向后发射数据时, 会按
时间槽向后顺序依次发送, 保持数据有序. Local Merge 算子支持定期、定量和定点的数据发射模式, 定期模式在
最早被聚合数据到达指定延迟时发射, 适合要求低处理延迟场景; 定量模式在聚合指定数量的数据后发射, 适合要
求高吞吐率场景; 定点模式识别到特定事件时发射, 可以在定期和定量模式基础上, 用于检测到窗口边界后发射数
据, 降低结果的产生延迟; 如表 7 Local Merge 模式触发条件及适用场景所示.
(a) KeyBy KeyBy
(b) Local Merge
Global
(c) Global Merge
state
(d) Ahead KeyBy
图 11 基于键值的数据交换策略
表 7 Local Merge 模式触发条件及适用场景
模式 触发条件 适用场景
定期 到达指定延迟 低延迟
定量 聚合指定数量数据 高吞吐
定点 数据满足定点条件 检测窗口边界等
(2) Global Merge
在低电压检测应用场景中, 大部分实时电压数据属于正常电压, 不会修改当前全局电压状态, 仅需要进行本地
聚合. 这类计算任务在异常监管等场景中较为普遍, 大量局部计算并不会修改全局状态. 因此在各节点单独计算,
将部分结果存储在本地状态中, 并将状态变更聚合到全局状态中能有效节约通信成本. 全局状态可以使用如键值
存储 Redis、关系型存储 MySQL [48] 等实现.

