Page 268 - 《软件学报》2025年第7期
P. 268

秦政 等: 面向  Apache Flink  流式分析应用的高吞吐优化技术                                          3189


                 型应用的选取标准包括: (1) 真实业务场景下的流式处理应用; (2) 具有普遍认可的流式数据处理行业基准; (3) 在
                 社会重要领域具有重大价值. 因此, 论文选择智能电网场景下的低电压检测、广告活动分析场景下的                                    Yahoo
                 Streaming Benchmark  和智能出租车调度场景下的疲劳驾驶提醒作为典型的流式分析应用.
                    (1) 智能电网场景下的低电压检测应用涉及海量物联网传感器设备, 要求系统能够处理海量、高速生成的数
                 据, 而且对实时性和准确性有极高的要求, 这一场景能够展示流式处理系统在处理大规模物联网数据方面的能力;
                    (2) 作为业界公认的流式处理分析测试基准, Yahoo Streaming Benchmark         提供了一个被广泛接受和验证的性
                 能评估标准;
                    (3) 智能出租车调度中的疲劳驾驶提醒           [38] 关注于实时的交通数据处理和应急响应机制, 体现流式系统处理复
                 杂事件和实时决策的能力, 是一个对数据分析实时性要求极高的应用, 充分体现了流式处理在社会重要领域的应
                 用价值.
                    下面将对上述      3  个应用分别进行介绍并构建数据流, 并总结出典型流式分析应用的通用数据流.
                    ● 低电压检测
                    低电压检测应用根据数以百万计的电压传感器的历史数据和实时数据, 检测电网中的电压状态, 从而实现智
                 能调控和告警. 如图      1  低电压检测数据流图所示, 数据从分散各地的电压传感器传输到分布式消息队列                         Kafka [39] ,
                 存储在   Kafka 的不同分区内. 每个分区被视为数据源的一个分片, 由连接器的读取单元读入. 由于低电压检测需要
                 分析每个传感器的电压状态, 通过          KeyBy  算子进行数据交换, 聚合具有同一传感器            ID  的数据到同一处理函数, 处
                 理函数根据规则更新状态, 输出结果. 低电压检测应用使用传感器数据产生时的事件时间作为时间语义, 使用水位
                 线和定时事件统计特定时间段的状态结果.


                     Kafka             连接器               数据交换                实时处理
                                                                   水位线
                              水位线               窗口化时                流动
                   DataSource          Reader             KeyBy             ProcessFunc
                               赋予                序保证
                              水位线               窗口化时
                   DataSource          Reader             KeyBy             ProcessFunc         实时输出
                               赋予                序保证
                              水位线               窗口化时
                   DataSource          Reader             KeyBy             ProcessFunc
                               赋予                序保证
                                                  图 1 低电压检测数据流图

                    ● Yahoo Streaming Benchmark
                    Yahoo Streaming Benchmark  根据广告活动事件流统计广告宣传活动的观看数量, 以实时反馈广告活动的效
                 果. 如图  2 所示, 数据存储在    Kafka 的不同分区内, 经连接器的读取单元读入后, 反序列化为广告事件对象, 过滤出
                 广告观看事件, 投影得到目标属性, 与           Redis [40] 中的数据进行连接获得活动     ID, 由于  Yahoo Streaming Benchmark
                 需要统计同一活动下的一定时间范围内的广告观看事件, 需要通过                      KeyBy  算子进行数据交换, 聚合具有相同活动
                 ID  的数据到同一处理函数, 处理函数根据规则更新状态, 输出结果. Yahoo Streaming Benchmark              使用广告事件的
                 实际发生时的事件时间作为时间语义, 但不依赖于定时事件, 而是自行存储和输出各个窗口内的状态.
                    ● 疲劳驾驶提醒
                    疲劳驾驶提醒应用根据出租车运营事件流检测过长时间运营的出租车, 以提醒司机和智能调度出租车. 数据
                 存储在   Kafka 的不同分区内, 经连接器的读取单元读入后, 过滤出行驶中车辆, 由于疲劳驾驶提醒需要根据同一出
                 租车运营事件     ID  统计运营时间信息, 需要通过       KeyBy  算子进行数据交换, 聚合具有相同事件           ID  的数据到同一处
                 理函数, 处理函数根据规则更新状态, 并输出结果. 疲劳驾驶提醒应用使用运营事件实际发生时的事件时间作为时
                 间语义, 使用水位线和定时事件在过长时间疲劳驾驶后触发疲劳驾驶提醒. 该应用的数据流图如图                                3 疲劳驾驶提
                 醒数据流图所示.
                    观察分析可发现, 虽然应用场景和领域不同, 但是上述                 3  个典型流式分析应用都在消息源处赋予数据水位线
   263   264   265   266   267   268   269   270   271   272   273