Page 283 - 《软件学报》2025年第7期
P. 283
3204 软件学报 2025 年第 36 卷第 7 期
在第 4.2 节中, 本文提出了基于在线监测的负载均衡动态配置方法, 该方法支持定量、定期、阈值这 3 种模
式, 这 3 种模式适用于不同的场景. 我们定义数据流速变化常数 a, 数据流速相对上一时刻变化率大于 a 即代表此
时发生数据分布变化. 数据流速变化速度 v, v 代表单位时间 (min) 内数据流速变化次数. 下面我们定义 a = 0.5, 初
始策略为 Modulo, 观察不同数据分布变化速度下, 3 种参数对系统性能产生的影响, 如表 9 所示. 实验结果发现,
定量模式适合数据源流速相对稳定的场景; 定期模式适合数据源流速变化相对频繁的场景; 阈值模式适用于尽可
能减少策略切换的场景. 最优参数选择需要考虑数据流速和数据流速变化频繁程度.
表 9 不同流速变化下在线监测参数对系统吞吐率的影响 (万条/s)
流速变化速度 (次/min) 0.1 1 5 10 30
定量 (1亿条) 130.1 128.4 76.2 61.8 47.8
定量 (1 000万条) 101.2 97.2 72.7 70.5 68.1
定期 (20 s) 96.1 95.7 74.9 70.1 67.2
定期 (5 s) 82.2 83.1 81.9 80.3 75.4
阈值 (0.6) 131.1 129.2 90.1 82.1 64.2
阈值 (0.4) 130.2 128.7 85.4 89.2 78.8
6.4.2 键级水位线测试与评估
本文选用低电压检测应用, 对子任务级水位线和主键级水位线的乱序数据比例和性能差异进行测试. 由于各
电压传感器数据分别有序, 该场景在主键级水位线下没有乱序数据, 但在子任务级水位线下, 由于网络时延和物理
时钟的影响, 往往会存在时序耦合的现象. 为了保证结果的正确性, 需要基于迟到数据更新结果, 这些额外的更新
操作会导致系统吞吐率的下降. 实验分别在数据乱序程度为 25%, 50%, 75% 的情况下进行测试, 主键级水位线下
的应用吞吐率, 是子任务级水位线下的 5 倍以上, 如表 10 子任务级与键级水位线数据乱序性能测试所示.
表 10 子任务级与键级水位线数据乱序性能测试
数据乱序比例 25% 50% 75%
Flink子任务级 (万条/s) 42.5 28.2 13.6
Trilink键级 (万条/s) 244.3 241.8 228.5
在现实低电压检测真实业务中, 往往要求秒级结果输出, 由于地理位置和网络通信的影响, 实时数据由于子任
务级水位线导致的时序耦合非常严重, 平均在 50% 以上. 使用 Flink 原生子任务级水位线会导致系统实时性能的
大幅度下降. 而本文提出的键级水位线优化机制能够有效避免这一问题.
6.4.3 基于键值的数据交换策略测试与评估
实验测试不同的基于键值的数据交换策略下的吞吐率和网络传输的数据量. 测试结果表明, Local Merge 策略
仅在网络中传输 Flink 原有策略传输数据量的 1.49%, 而 Global Merge 策略和 Ahead KeyBy 策略不需要在网络中
传输数据. 通过减少或避免在网络中进行基于键值的数据交换, 可以在网络带宽受限环境中, 将吞吐率提高到
3.92 倍以上, 如后文图 17 数据交换策略性能测试所示.
6.5 实验讨论
通过实验评估, 本研究提出的 3 种优化策略显著提高了流式处理系统的性能. 相较于 Flink, Trilink 单机吞吐
率提升了 5 倍以上, 8 节点集群下水平扩展加速比提升了 1.6 倍以上, 呈现出亚线性增长趋势.
本研究针对数据流额外引入了细粒度的水位线, 同时也带来额外的系统开销. 相较于 Flink 中的子任务级水位
线机制, 主要带来的额外开销包括: 水位线存储空间开销, 状态定时器空间开销以及水位线计算更新开销. 在空间
开销上, 当键数量为 n 时, 对于每个键, 系统需要维护一个水位线的状态, 通常是一个时间戳. 每个水位线占用 8 字
节 (64 位时间戳). 如果系统为每个键维护一个独立的定时器, 具体的内存占用取决于定时器对象的大小, 定时器
空间占用约为几十字节. 此外, 在流计算的场景中, 数据经过使用后会被丢弃, 因此当该键不再产生数据后, 这一水

