基于动态窗口的大数据流式处理技术研究
来源:用户上传
作者:
摘要:目前市场上的大数据流式处理系统普遍存在计算结果不能共享、实时处理性能不高、计算时间窗口固定和不能动态扩容等问题。针对这些问题,本文设计了一种基于新型时间切片原理,具备动态资源调度、系统容错、动态窗口计算能力的高性能大数据流式处理系统。
关键词:大数据流式处理;时间窗口;实时计算
中图分类号:TP319 文献标识码:A 文章编号:1007-9416(2020)03-0140-03
1 大数据流式处理面临的挑战
目前业内主流的大数据流式处理系统面临诸多挑战,最突出的包括计算资源和存储资源的动态调度分配、系统容错和动态时间窗口调整等。在资源调度方面,许多流式处理系统普遍采用多节点进行分布式数据计算和数据结果的存储,技术难点在于数据流对多个计算节点的均匀分配以及数据结果的均匀存储和各个节点资源的均衡使用。此外,在大数据流式处理过程中,数据分发节点、计算节点和存储节点间存在大量的数据交互,网络资源消耗极高,往往成为系统性能瓶颈。在系统容错方面需要在单个节点出现故障时,能保证整体系统的正常运行。当整个系统资源不足以满足数据的处理时,还要能在保证当前系统的稳定运行情况下动态添加资源,以实现系统处理能力的动态扩展[1]。在计算窗口方面,因为存在计算任务执行过程中只保存数据处理的结果数据、流入的原始数据被丢弃等原因,多数流式处理系统的计算窗口都是静态的,无法支持在计算任务启动后临时调整计算窗口。
2 大数据流式处理系统架构
为了满足业务发展对高性能实时指标计算能力的需要,同时解决目前行业内同类工具普遍存在的问题,采用新型的时间切片原理,在利用Kafka、Netty和Redis等开源组件的技术特性的基础上,设计了一套高性能的大数据流式处理系统。该系统主要功能包括接受外部系统流水数据、实时指标计算和向外部系统提供指标查询等功能。系统分为四层架构,分别为通讯层、服务层(Server层)、计算层(Agent层)和计算结果缓存层,每层均为多节点集群,缓存层由Redis集群组成,计算层与缓存层的节点按照1∶1配置,部署在同一物理节点上[2]。系统架构参见图1。
(1)通信层负责与外部系统的交互。通讯层采用kafka作为数据流入起点。Kafka是一种高吞吐量的分布式发布订阅消息系统,十分适合作为流式处理系统的数据“生产者”和“消费者”。通讯层通过订阅kafka中的topic,接受外部系统的流水数据并发送到后端服务层。同时通讯层还负责接受外部系统的指标查询服务请求,并将从服务层获取的查询结果反馈给外部系统。
(2)服务层主要功能包括计算指令分发、计算任务监控和指标结果二次加工等。在接收到通讯层发来的流水数据后,服务层先通过对流入数据关键值的判断,确定需要执行的计算任务(计算任务是最小的计算单位),再通过对计算任务参数的组合计算,确定具体的计算节点。服务层将流水数据和需要执行的计算任务列表进行封装,通过Netty分发到指定的计算节点。
服务层通过收集计算节点的执行状态实现对计算任务监控。当所有的计算任务都执行成功后,服务层认为当前流入数据已被系统正常处理。如果有计算任务执行失败,数据分发节点会分析失败原因并决定是否转派其他计算节点再次执行。
服务层在响应指标查询服务请求,获取缓存节點上的中间结果后,根据预置的处理公式进行二次或多次加工,最终完成服务。
(3)计算层主要功能包括计算任务执行、异常处理、数据序列化以及时间切片等。计算节点识别服务层分发的数据,并使用对应的算子和原有缓存节点中的计算结果合并计算,合并计算的结果再次保存到缓存节点中,并向服务层返回任务执行成功状态。若计算任务出现异常,则向服务层返回计算任务执行失败状态,结果数据不保存。
(4)缓存层主要功能为存储计算结果,由Redis集群构成。Redis集群内置的自动分区、复制、LRU逐出、事务等特性为系统缓存层的高可用和高性能提供了保证。
3 系统技术特色与实现原理
该系统具备动态资源调度、系统容错和动态调整指标计算时间窗口等能力,处理性能高效,运行稳定。该系统实现以上能力,主要实现了以下几项关键的技术。
3.1 动态资源调度
资源调度的核心技术是本地数据本地计算的MPP架构和均匀存储均匀计算。
(1)本地数据本地计算的MPP架构设计:通过将计算节点和存储节点1∶1的部署在同一物理节点的部署方式,实现数据的读取、计算和结果回写均能在同一物理节点上执行,形成MPP架构,大幅减少网络开销[3]。
(2)均匀存储均匀计算:系统采用Redis的hash算法以及Server、Agent与Redis的协同实现了均匀存储均匀计算。具体来讲,均匀存储的实现是利用Redis Cluster4.0的新技术特性,把所有数据划分为16384个不同的虚拟槽,根据机器的性能可以把不同的槽位分配给不同的Redis节点。通过对流水数据的关键值和计算任务的ID进行hash计算找到数据对应的槽位。Server端存储一张槽位与机器的对应关系表,在根据槽位找到对应的具体机器的同时,也确定了对应的Redis存储节点。在这种机制下某个Redis节点只会存储对应部分的数据,并且保证数据均匀分散在不同的Redis节点上。均匀计算也遵循了同样的原理。服务层通过同样的流水数据的关键值和计算任务的ID进行hash计算找到计算任务对应的槽位和对应的Agent节点。计算任务和数据存储的分布遵循同样的hash算法,也保证了计算节点上的计算任务和存储节点上的数据的一致性。
3.2 系统容错
在传统的Keepalived+Nginx的容错技术以外,该系统还通过健康状态监控机制实现系统容错。Server节点和Agent节点都有各自的健康状态监听模块来记录本节点的健康状态。此外Agent节点定期向Server层发送心跳汇报节点健康状态信息,Server层根据Agent节点的健康状态动态调整数据的分发和计算任务的分配,保证分发时避开不健康的计算节点。 在计算节点出现故障时,通过两段处理的方式保证计算任务的正常进行。第一段处理,服务层在分发计算内容前,先判断计算节点的健康状态,如果该计算节点状态为非健康,则随机选择一个健康的计算节点进行分发。由于新选择的计算节点对应的缓存节点中未存储对应的数据,该计算节点通过Redis Cluster的保障机制从其他缓存节点找到对应的中间数据,保证计算服务的持续进行。第二段处理,计算节点在出现故障时会尝试自动重启。如果重启失败,则继续维持第一段处理,如果重启成功,则Agent会向Server重新上报健康状态,恢复正常工作。
3.3 动态窗口
所谓动态时间窗口,即在不需要重新发布计算任务的前提下,可以实时调整指标查询窗口的大小,且能立即获得对应的结果。目前大多数基于窗口的流式计算解决方案都不能很好地支持动态窗口。其根本原因在于这些解决方案的计算任务都是基于源数据的,由于源数据的数据量大,导致无法在长时间保存源数据的同时又支持快速计算指标结果。在本处理系统中,动态窗口的实现基于系统独有的时间切片的设计原理。
时间切片设计原理:时间切片是将时序数据按照一定的时间间隔聚合后的新的时序数据。一个时间切片是数据信息保存的最小单位,也是保存数据的主要形式。在本系统中,时间切片中不存储源数据,而是存储该切片时间段内所有流水数据按照指标配置进行聚合计算后得到的结果数据,这种设计大幅压缩了数据存储量,可以存储较长时间的数据。本系统通过Redis技术实现流水数据的时间切片处理。当流水数据进入到某个具体的数据计算任务后,首先提取流水数据的发生时间,然后根据流水数据的关键值和计算任务ID拼装成Redis的key,根据key取出对应的value,并读取value中最新切片的时间。如果流水数据的发生时间比该切片时间早,则不需要创建新的切片,找到当前的流水数据对应的时间切片,并根据任务里配置的聚合函数计算结果并更新该时间切片的value,更新回Redis中。如果流水数据的发生时间晚于目前的处理时间,则需要创建新的切片,并根据任务里配置的聚合函数计算出当前流水数据的结果后存入Redis中。时间切片在Redis中的存储参见图2。
在指标查询任务中,时间切片的选取采用落入即包含的策略。切片选取策略参见图3。以5分钟切片为例,从起始切片开始,每隔5分钟开启一个新的切片,T为当前时刻,H为指标计算所需的持续时间,从T-H到T就是指标计算的时间长度。如果T-H正好处于时间切片首尾,就将X个时间切片纳入计算,如果T-H在某个时间切片的中间位置,则采用时间覆盖原则,将该时间切片全部纳入计算。在图3中,虚线段是指标计算的理论时间长度,实线段是指标计算的实际时间长度。采用这种策略,虽然在精度上有细微损失,但大幅提高了计算效率。当需要动态调整指标查询的时间窗口时,无需对源数据重新计算,只需要通过必要的二次计算即可实时获取新的结果,实现动态窗口设置的实时生效。
4 结论
本文提出的基于窗口计算的大数据流式处理系统已经实际投入应用。整个系统采用三台服务器搭建Kafka集群、兩台服务器搭建服务层、四台服务器搭建数据计算集群和存储集群。在压力测试中,在并发数为100且单条数据大小不超过5M的情况下,集群的指标查询性能达到7万TPS,成功率100%。以实际生产数据测试,在60秒内发起2.3亿次指标查询请求,系统的平均响应时间为16ms,TPS为24600左右,且此时的各节点硬件资源使用均未达到极限。通过横向动态扩展和网络优化,该流式处理系统的计算能力还能线性提高[4]。
参考文献
[1] 孙大为,张广艳,郑纬民.大数据流式计算:关键技术及系统实例[J].软件学报,2014,25(04):839-862.
[2] 王奇.基于发布订阅的分布式复杂事件处理系统的研究与实现[D].北京:北京邮电大学,2018.
[3] 苏锦.基于Netty的高性能RPC服务器的研究与实现[D].南京:南京邮电大学,2018.
[4] 崔晓旻.基于Netty的高可服务消息中间件的研究与实现[D].成都:电子科技大学,2014.
Abstract:At present, there are many problems in big data streaming processing systems in the market, such as the calculation results can not be shared, the real-time processing performance is not high, the calculation time window is fixed, and the calculation capacity cannot be expanded dynamically. To solve these problems, this paper designs a high-performance streaming data processing system based on the new time slicing principle, which has the ability of dynamic resource scheduling, system fault tolerance and dynamic window computing.
Key words:big data stream processing; time window; real time computing
转载注明来源:https://www.xzbu.com/8/view-15232762.htm