Apache beam中的便携式有状态大数据处理
目标:
- 什么是 apache beam?
- 状态
- 计时器
- 例子&小demo
一、什么是 apache beam?
上面两个图片一个是正面切图,一个是横向切图;
这里只是大数据对于批量处理和流处理的一些生态圈的各个工具的发展前后历程,我觉着不够具体,总之,flink是beam的一种体现:
Apache Beam本身不是一个流式处理平台,而是一个统一的编程框架,它提供了开源的、统一的编程模型,帮助你创建自己的数据处理流水线,实现可以运行在任意执行引擎之上批处理和流式处理任务。Beam对流式计算场景中的所有问题重新做了一次归纳,然后针对这些问题提出了几种不同的解决模型,然后再把这些模型通过一种统一的语言给实现出来,最终这些Beam程序可以运行在任何一个计算平台上(只要相应平台——即Runner实现了对Beam的支持)。它的特点有:
|
Flink可以和谷歌的cloud dataflow相比,dataflow数据流是一种原生的谷歌云数据处理服务,是一种构建、管理和优化复杂数据流水线的方法,用于构建移动应用、调试、追踪和监控产品级云应用。 |
在网上找了相关的资料,说的比较详细:
https://www.cnblogs.com/AlanWilliamWalker/p/10366823.html
Beam 模型
Beam模型处理的目标数据是无限的时间乱序数据流,不考虑时间顺序或是有限的数据集可看做是无限乱序数据流的一个特例。
接下来从问题中抽象出四个具体问题(也就是WWWH):
1, What are you computing,对数据的处理是哪种类型,数据转换、聚合或者是两者都有。(read,map,reduce)
2, Where in event time,数据在什么范围中计算?例如,基于Process-Time的时间窗口?基于Event-Time的时间窗口?滑动窗口等等(event time windowing)
3, When in processing time,何时将计算结果输出?在这里引入了一个Trigger机制,Trigger决定何时将计算结果发射出去,发射太早会丢失一部分数据,丧失精确性,发射太晚会导致延迟变长,而且会囤积大量数据,何时Trigger是由水位线来决定的,在Beam SDK中由Pipeline中的水位线和触发器指定。
4, How do refinements relate,迟到数据如何处理?例如,将迟到数据计算增量结果输出,或是将迟到数据计算结果和窗口内数据计算结果合并成全量结果输出。在Beam SDK中由Accumulation指定。
用例:
下面是“有状态的计算”的一个例子,易于理解:
关于State:
Timers计时器
对于有状态的计时器 下面是更多的例子被使用到:
●每键任意编号
●仅当结果变化时输出
●对缓慢变化的尺寸进行更严格的“侧输入”管理
●流式连接矩阵/连接biclize
●细粒度组合聚合和输出控制
●每个关键的“工作流程”,如用户注册流程和到期
●低延迟重复数据消除(让第一个通过,压扁其余部分)