The 8 Requirements of Real-Time Stream Processing

Posted by CodingCat on June 17, 2015

这篇文章是根据Michael Stonebraker 在2008年发表的同名文章汇编而成。我没有去考证在那个时期stream processing 系统是什么样的,不过我相信M. Stonebraker先生的学术敏锐感和对数据库的理解,不应该让这篇文章成为一个hindsight。

贩卖一点个人对流处理的理解的私货,这篇文章里谈到的是stream processing。Stream 的处理从狭义上讲streaming data processing还是有一些区别的,我个人的感觉是这个区别主要在于是否和历史数据相关联,这个我会找时间单独写一篇博客,但是在下面说到的第5点又把stream processing和streaming data processing之间的区别模糊化了。

  1. 数据流动性

    在数据处理的一系列阶段,不应该有格外长的延时,比如对文件系统的读写过程。同时整个的系统设计应该遵循数据触发处理逻辑执行的过程,而不应该有处理程序不断查询是否要进行处理的操作

  2. 提供基于SQL的查询

    这个要求说的是必须提供一个基于SQL的扩展性查询语言,使得用户不但能使用SQL的一般功能,同时能够针对stream的特点进行例如设置时间窗口,在多个数据流之间进行merge之类的操作

  3. 对数据流的不确定性的容忍

    相对于存储在文件系统或者和数据库中的数据,流数据的特点是充满了不确定性,这种不确定性可能是值在时间轴上的分布的偏移,甚至是数据正确性有序性的偏差。所以流处理系统在设计时必须有针对这类数据特点专门设计的功能

  4. 结果的确定性和可重复性

    同一段流输入同一段逻辑,必须产生同一个结果。这包含了对数据时间有序性的严格要求以及逻辑算法本身的设计。

  5. 与历史数据的集成

    这个其实和后来讲的Lambda Architecture,甚至包括Summingbird. 他讲了两方面,一个是能够查询,修改历史数据并和流数据一起产生预期结果;另一方面必须对历史数据和流数据提供统一的查询接口(语言)

  6. 数据安全与系统高可用

    这个很好理解了,数据不能丢,某个处理节点挂了也不能丢;系统不能死

  7. 自动扩容

    他包含了两方面的意思,一是能够提供在多机和多核上的可扩展性;二是系统在扩展的过程中必须是透明的,自动的

  8. 实时处理

    这个更好理解了,处理逻辑不能有太高的延时