美文网首页
stream system-stream 101

stream system-stream 101

作者: MontyOak | 来源:发表于2019-03-03 21:17 被阅读4次

    术语:什么是流(stream)

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

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

    • 准确性
      归根结底,正确性需要一致性存储(参考链接)。一致性存储是准确一次语义的基础。(MillWheel,Spark Streaming,Flink snapshotting
    • 关于时间推算的工具
      这是批处理系统所不能达到的特点,也是处理乱序无限数据集中流式系统所需要面对的主要问题。

    事件时间与处理时间

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


    事件时间与处理时间示例

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

    数据处理模式

    • 有限数据
      处理有限数据没有什么诀窍。获取输入,通过良好设计的数据处理引擎处理数据并且获取输出:


      有限数据处理

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

    • 无限数据-批处理

      • 固定窗口
        最常见的用批处理系统处理无限数据的例子就是固定窗口的设计,将数据按时间间隔分成若干段,对每段数据依次进行批处理。这样会由于处理时间相对于事件时间的延迟而出现问题

        固定窗口
      • 会话
        会话的定义是一系列相关联的操作数据。在批处理系统处理无限数据的情况下,经常会出现会话跨批次的问题。

        会话
    • 无限数据-流式系统
      流失系统被设计用来处理无限、乱序、处理时间相对事件时间延迟不确定的数据集。可以分为四种模式。

      • 时间无关
        这种模式常常处理对于时间无感的数据。下面有几个例子:

        1. 过滤 只去筛选符合条件的数据,这时数据的事件时间和处理时间都没有任何影响


          filtering
        2. 内联 多个数据源的数据内联操作


          inner join
      • 近似算法
        例如近似top-n算法近似k-means算法。这些算法面向无限数据设计的,提供近似准确的准实时计算结果。

        approximation algorithms
        需要注意的是,近似算法常常内置基于处理时间的数据排序假设,也就是说对于一些算法而言,事件时间乱序的数据下情况可能会有问题。
      • 窗口
        窗口就是将数据源按照一定规则分成不同段用来处理。


        三种常见的窗口

        固定窗口:就是将数据按固定时间间隔分成若干段。
        滑动窗口:定义窗口长度和步长,上图中步长小于窗口长度,所以会出现数据重合的情况,如果步长等于窗口长度,则成为固定窗口的情况,如果步长小于窗口长度,则相邻窗口出现空档(类似采样)。
        会话窗口:会话窗口按相关动作划分窗口,通常做用户的行为分析。

      • 按处理时间划分窗口


        Windowing into fixed windows by processing time. Data are collected into windows based on the order they arrive in the pipeline.

      按时间窗口划分窗口,实际上就是将数据按接收时间缓存到不同的窗口,再依次处理。它具备以下优点:
      1. 简单 不用将数据再排序
      2. 可以很容易的判断窗口的完成度
      3. 可以通过数据推断源信息 比如计算服务器的状况
      问题在于,由于不确定的延迟和数据的乱序,它不能反映事件发生的真实顺序。

      • 按事件时间划分窗口
        只有在按事件时间划分窗口的情况下,会话窗口才有意义(因为处理了数据乱序的情况)。


        Windowing into session windows by event time. Data are collected into session windows capturing bursts of activity based on the times that the corresponding events occurred. The black arrows again call out the temporal shuffle necessary to put the data into their correct event-time locations.

        便利性从来不是没有代价的,按照事件时间划分窗口需要做额外的工作:
        1.缓存 因为延迟的存在,窗口的尺寸要变得更长,因此需要缓存更多的数据

        1. 数据完整 因为延迟的不确定性,无法确定给定窗口的数据完整度。

    相关文章

      网友评论

          本文标题:stream system-stream 101

          本文链接:https://www.haomeiwen.com/subject/qgqyuqtx.html