Page 273 - 《软件学报》2025年第7期
P. 273
3194 软件学报 2025 年第 36 卷第 7 期
的数据通信与传输, 这将影响系统的处理性能; 尤其当计算节点间网络带宽有限且数据流速快时, 系统吞吐率和扩
展性会产生严重下降.
表 4 KeyBy 节点间数据交换量
数据量 10 000 10 000 10 000 1 000 000 1 000 000 1 000 000
节点数 1 2 4 1 2 4
通信比例 (%) 0 51 75 0 48 74
4 高性能流式处理性能优化设计
本节针对第 3 节分析发现的影响流式处理系统性能的 3 个瓶颈问题分别提出了优化技术.
4.1 键级水位线设计
本工作经实验发现, 现有子任务级水位线机制会造成流数据时序耦合, 严重影响系统的吞吐率. 在典型的流式
分析应用, 例如低电压检测应用中, 传感器的数据间跨片区或跨城市聚合操作较少, 但由于水位线是子任务级的,
在存在网络延迟差异或本地时钟偏差的场景下, 即使各传感器数据相对有序, 整体的数据流在 Flink 中也被视为具
有严重的数据乱序. 在要求保证结果正确的情况下, 需要基于迟到数据更新结果, 这些额外的更新操作会导致系统
吞吐率的下降.
当前 Flink 中水位线的粒度是以子任务为单位的. 这种设计在处理单一数据源时效果良好, 但在面对多数据源
时可能存在问题. 这是因为, 不同的数据源可能有不同的数据产生频率和时间特性. 当所有这些数据源被同一个粗
粒度的子任务处理时, 可能会发生数据耦合, 其中低频率数据源可能拖延整个数据流的处理速度. 随着数据源增多
以及计算节点增加, 耦合程度进一步加深, 显著影响到系统的可扩展性. 粗粒度的水位线可能导致高频率数据源的
数据被不必要地延迟, 影响系统的实时性和吞吐率. 例如, 图 8 水位线时序图中, 对于每一条流数据 (k, v, t), k 代表
键值, v 代表数据, t 为该数据流入系统时间戳, 假设处理时间窗口为 2. 图 8 中, 当 Flink 接入 t = 3 数据 (k 1 , v,
3) 时, 对所有 t 不大于 2 的数据进一步计算处理. 当迟到数据 (k 1 , v, 1) 出现时, 为保证计算结果正确性, 需要对已
计算的 3 条数据进行重计算. 此外, 由于数据处理不够及时, 系统的缓冲区可能会被迅速填满, 进而影响到系统的
稳定性. 实时流处理场景中数据量大且多样化, 这一问题将变得尤为显著. 因此, 当前 Flink 中水位线机制粒度过
大, 不适用于大量典型流式处理场景.
(k 2 ,v,3) (k 1 ,v,1) (k 1 ,v,3) (k 2 ,v,2) (k 1 ,v,1) (k 2 ,v,1) 子任务级水位线
t=1<2, 乱序数据 T>2, 开始计算
全体重计算
重计算数据条数为 3
(k 1 ,v,1) (k 1 ,v,3) (k 1 ,v,1) k 1 键级水位线
t=1<2, 乱序数据 T>2, 开始计算
全体重计算
重计算数据条数为 1
(k 2 ,v,3) (k 2 ,v,2) (k 2 ,v,1) k 2 键级水位线
T>2, 开始计算
图 8 水位线时序图
本文基于分治思想提出键级水位线设计, 即对每一主键分别赋予独立管理的水位线机制. 具体来说, 对于每一
个不同的主键, 系统均维护与之相匹配的水位线, 可以最大程度降低因数据传输和并行化处理带来的额外时序耦

