Page 267 - 《软件学报》2025年第7期
P. 267
3188 软件学报 2025 年第 36 卷第 7 期
He 等人 [29] 对异构集群上的 Flink 数据划分问题进行研究, 关注异构集群下不同机器的硬件资源差异和其他
评价指标, 通过指标进行评分以确定在数据划分网络图中边的权值, 从而调整异构集群上负载分布. 但该工作没有
关注 Flink KeyBy 算子上因基于哈希分配策略导致的负载均衡问题, 且没有关心算子节点上的状态, 需要最终在
单一节点上聚合结果, 可能存在单点故障和单点性能瓶颈问题.
2.2.3 面向系统算子实现的研究
Flink 在处理有顺序要求的滑动窗口聚合算子时, 如果存在数据乱序, 需要把数据聚合到如增强红黑树等数据
结构中, 以便后续查询和使用. Tangwongsan 等人 [30] 提出一种新的通用乱序滑动窗口聚合数据结构 FiBA. FiBA 相
比 Flink 内部实现的滑动窗口聚合数据结构, 拥有更低的时间复杂度和数量级上的吞吐率提升, 也因此提升了滑动
窗口上的聚合算子的性能.
流数据动态变化的特性使得传统的索引结构不再适用. Shahvarani 等人 [31] 通过对滑动窗口内的流数据建立索
引来提升窗口连接的性能, 他们提出树状结构的索引以及对应的并发控制的机制, 使得该索引可以在多线程共享
情况下高效更新. 在此基础上, 他们设计实现基于索引的并行流连接, 从而可以更好地利用多核处理器的计算能力.
FiBA 和滑动窗口索引只能提升滑动窗口场景下的性能, 无法解决其他场景下的性能问题, 例如 Yahoo Streaming
Benchmark 中使用有状态处理函数的流式分析场景.
2.2.4 面向多查询信息共享的研究
现代流式处理系统主要用来处理在流式数据上的长时间特定查询分析, 这些特定的查询可以手动优化以提高
性能. 然而, 即时查询场景不仅包括长时间的查询分析, 也有数千个短时间的临时查询分析. AStream [32] 针对即时查
询场景进行优化, 通过在多租户环境下共享资源加速短时间的临时查询分析, 并采用共享的算子来避免冗余计算.
AJoin [33] 在 AStream 的基础上进一步优化, 减小算子共享的代价, 重优化运行时查询计划, 支持运行时动态扩缩容.
现代流式处理系统的增量处理和视图维护在多个查询之间独立, 这会给相同输入流上的并发增量查询带来冗
余和不必要的开销, 使得每个查询必须在相同的输入流上独立地维护相同的索引状态, 而新的查询必须从头开始
构建这种状态, 然后才能产生第一个结果. McSherry 等人 [34] 引入共享的视图及索引, 从而在不影响数据并行和可
伸缩性的情况下, 允许并发查询重用相同的内存状态. 多查询优化适用于并发产生的 SQL 查询, 通过共享多个查
询间的信息减少冗余计算. 然而, 现代流式处理系统主要处理的长时间特定查询分析无法因此而受益.
2.2.5 面向水平可扩展性的研究
流式处理系统能够通过增加更多的处理节点来提高处理能力. 在基于 Flink 的水平可扩展性优化技术中, 研究
主要集中于动态资源分配和任务调度等关键领域.
Zhang 等人 [35] 提出了一种新的动态滑动时间机制来检测延迟到达的数据流. 该窗口机制主要包括: 自适应性
窗口标记位, 迟到数据检测和窗口内时序校正. 实验显示, 该方法在乱序数据流下能够有效检测并降低系统处理时延.
岳晓飞等人 [36] 提出了一种基于运行时间预测的动态资源分配策略 RABORP, 制定实施动态资源分配计划. 通
过预测各个迭代超步的运行时间, 在迭代作业提交时和超步同步屏障处分别进行资源的初始分配和动态调整, 以
保证可使用最小资源集合, 并保证迭代作业在用户规定的运行时限内完成. 实验结果表明, 其有效提升了 Flink 系
统性能.
Shaikh 等人 [37] 提出了基于网格的索引技术, 从而实现连续流式数据的高效处理, 并基于 Flink 实现了原型系
统 GeoFlink. GeoFlink 基于网格索引定义流式数据的相似性, 从而实现均匀数据分区. GeoFlink 为相近数据分配相
同的键, 并基于 Flink 的 KeyBy 算子实现数据分发. Salman 认为相似数据具有相近处理逻辑, 涉及相似的算子, 从
而降低计算图的复杂度. 实验表明, GeoFlink 相较于 Flink 表现出了显著的吞吐率与可扩展性提高.
3 典型流式分析应用的数据流特征与性能瓶颈分析
3.1 典型流式分析应用数据流特征
流式分析处理在物联网、交通等多种场景中得到广泛应用. 本文选取流式分析应用进行数据流特征分析, 典

