stream system-stream 101

2019-03-03  本文已影响4人  MontyOak

术语:什么是流(stream)

流式系统:
面向无限数据集设计的一种数据处理引擎。
这里讨论到数据的两种本身属性:基数和组成。基数的最简单区分就是一个数据集是有限还是无限的:分为有限数据(bounded data)和无限数据(unbounded data)。组成也可以简单分成两类:表格式和流式。

一直以来,人们普遍认为,流式系统提供的是低延迟,近似准确的结果,所以常常需要配合一个批处理系统以提供周期处理出来的准确结果。也就是著名的Lambda架构
所谓Lambda架构(最早由storm的作者Nathan Marz提出),简单理解就是维护一个流式系统和一个批处理系统,同时处理同一个数据集,其中流式系统负责提供准实时的近似准确结果,批处理系统则提供周期性的准确结果。它所带来的额外代价就是同时维护两套系统,并定期根据批处理系统的结果去修正流式系统的结果。
对此,Kafka的作者Jay Kreps也写了一篇文章分析Lambda架构的问题。它提出了使用kafka做流式数据链接以解决数据重放的问题,这意味着一个设计良好的pipline系统就可以完成Lambda架构的功能。
严格意义上来说,良好设计的流式系统,其功能会是批处理系统的超集。人们最终只会关心两件事情:

事件时间与处理时间

事件时间就是数据产生的时间;处理时间则是数据被系统接受的时间。从定义不难理解,处理时间不会早于事件时间,而处理时间相对于事件时间的延迟度则不是非常确定:


事件时间与处理时间示例

从处理时间的角度看,沿着x轴做垂线,不难看出处理时间相对于事件时间的延迟(processing-time lag);从事件时间来看,沿着y轴做垂线,不难看出处理时间相对于理想处理时间的偏斜(event-time skew)。

数据处理模式

在这方面,经典的mapreduce架构已经做得足够优秀了。

上一篇下一篇

猜你喜欢

热点阅读