《Streaming Systems》第二章主要包含了四个问题和五个概念。
《Streaming Systems》第二章总结了构建一个正确、稳定、低时延的流处理系统将会面临的四个问题及其解决办法:
- 计算的结果是什么(What results are calculated)? --通过transformations操作
- 在事件时间中的哪个位置计算结果(Where in event time are results calculated)? --使用窗口(windowing)的概念
- 在处理时间中的哪个时刻触发计算结果(When in processing time are results materialized)? --使用triggers watermarks进行触发计算
- 如何修正结果(How do refinements of results relate)?--通过accumulation的类型修正结果数据
上述的核心概念再深入的了解一下:
- 事件时间(Event time)和处理时间(processing time) 流处理中最重要的问题就是事件发生的时间(事件时间)和处理系统观测到的时间(处理时间)中间会存在延迟。
- 窗口(Windowing) 为了合理地计算无界数据集的结果,所以需要根据时间轴切分数据集。
- 触发器(Triggers) 触发器是一种表示流处理过程中遇上某种特殊情况时,此刻流处理的输出结果可以认为是正确,有意义的机制。
- 水印(Watermarks) 水印是针对事件时间而设计的概念,它提供了一种在事件时间相对于处理时间是乱序的系统合理推测无界数据集中数据完整性的手段。
- 累计类型(Accumulation) 累计类型表示流处理系统在处理单个窗口时,窗口输出后的数据需要随着流处理的时间进展而如何发生改变的变化类型。
第二章相对于第一章难度有所增加,因为第一章的概念(例如事件时间、处理时间和窗口)是自然而然引入的,而第二章提出的四个问题和额外引申的三个概念(触发器、水印和累计类型)需要对业务很强的抽象能力,不易理解。不过这些概念在Flink和Spark 2.X中都有相应的实现,其中以Flink实现的最为完整,因此可以在code过程中加以练习,感触这些概念是如何影响流处理框架构建的。
PS:最后,单纯地阅读纸质书实际是不完备的,因为有很多动画在书中无法体现。建议有机会地话,可以在Safari上查看对应地动画。