浅析流处理

最近大数据在学术界和互联网公司刮起了一股风,重新燃起了对数据快速处理的热情。流处理可以满足实时和近实时处理的需求,满足大数据给用户提供新鲜,低延迟的结果。因此,流处理大数据时代又有了用武之地。商业界和学术界在流处理方面大致分为三类需求:商务智能,主要是一些metrics的简单统计如各种监控(或传感器)的数据,点击量,购买量,热词,系统cpu负载,网络负载等的统计;连接,将多个流jion,找出数据之前的关联性及关联性带来的附加值;机器学习实时化,主要推荐系统,基于用户行为学习的实时推荐系统。技术上要求流处理系统能够满足Scale out, 数据流产生变化率突变,分布式容错,低延迟,运行时调整部署等。

流处理架构如下:

图1:流处理构架模型

src部分负责持续性收集数据,然后持续性分发给operators graph, operators graph处理收到的tuplessnk汇总结果。Stream持久化在流处理的各个阶段,根据不同的需要保存数据源,中间结果,或最终结果。

数据模型:数据流是无限的tuples集,tuples t,是单调递增的逻辑时间戳,用来标记tuple产生的时间,k是关键字域,唯一标记、划分tuple属于那个流。Pplayload,可用于hash

Operator 模型:operators是用于处理tuples的。一个operator可以是stateless(如filermap),也可以是stateful(joinaggregate)。一个operator可以处理n个输入流,可以标记为={,,…,},处理之后产生一个或多个输出流。一个操作者状态分为处理状态,缓冲状态,路由状态。处理状态标记为={(,),…},tuplek相关,存储operator处理k标记的tuple时需要状态信息。缓冲状态记录的缓冲区中的tuplestuples将要发给下面的operator。路由状态记录tuplesoperators之间的路由关系。Operator函数如下定义,:()(), 此函数表示将从时间开始到最近的元组集

查询模型:一个查询可用图1中中间查询图q=(O,S)表示。Ooperator集合,Sstream集合。一个stream sS是两个(o,o’)之间直接由元组形成的边,其中(o,o’)O。通常流处理系统假设作为数据源的src,和收集结果的snk不失效,操作者operators若无状态,失效后可立即恢复,若有状态,失效后可根据保存的状态恢复。若一个操作者o存在upstream操作者u,可标记为uup(o)。若一个操作者o存在downstream操作者d,可标记为ddown(o)

查询执行:查询图在多个nodes上的部署。一个节点可以部署多个operators,一个逻辑操作者operator o,可以在部署时部署成并行的操作者集。能这样划分的基础必须是有准备的操作者状态划分语义。每一个实现o操作者语义。它的输入是划分流, operator o的输入流也会被划分相应n个子流。查询执行维护由逻辑中央查询管理器。

当前流处理关注以下几个方面:快速scale out,运行时调整,容错,负载均衡,声明式语言、操作者状态管理与离线处理框架的结合的编程模型等。当流源的输入率变化时,查询执行快速重新部署,以适应throughput的提高。当查询计划变化或查询条件变化时,需要运行时动态调整operators的部署以满足延迟的需要。当查询执行节点失效时,快速重启新的节点,并根据保存的操作者状态和未处理的tuples重放,使节点快速恢复,容错对时间的要求特别高,所以对容错的方式提出了挑战,保存operators状态,恢复的方式,保存的量要尽可能小,恢复尽可能并行,并且不能占用太多的处理资源,以免因开销过大使其他流处理的响应时间变长。查询管理器实时监控操者的节点,当某个或某子树的负载变大时,就可能成为整个查询的瓶颈所在,所以需要将其节点scale out并重新调整负载。声明式语言负责组织查询operators构成查询图以满足某种应用,现在的趋势是增加声明式语言的能力,以能够满足查询优化。操作者状态管理可以满足容错和scale out。将离线处理框架如map-reduce及其变种应用于实时处理,并实时处理和离线处理结合起来,以满足更广泛的需要。


你可能感兴趣的:(关键字,的,是,持续性,附加值)