包含部分:
- streams
- state
- time,包括Event time、Ingestion time、Processing time
- api
极致的流式处理性能。Flink 相对于 Storm 最大的特点是将状态语义完全抽象到框架中,支持本地状态读取,避免了大量网络 IO,可以极大提升状态存取的性能。
stateful stream processing
有状态的分布式流式处理
- 如何确保状态拥有精确一次(Exactly-once guarantee)的容错保证?
- 如何在分散式场景下替多个拥有本地状态的运算子产生一个全域一致的快照(Global consistent snapshot)?
- 更重要的是,如何在不中断运算的前提下产生快照?
关于 Flink 如何在不中断运算的状况下持续产生 Global consistent snapshot,其方式是基于用 simple lamport 演算法机制下延伸的。已知的一个点 Checkpoint barrier, Flink 在某个 Datastream 中会一直安插Checkpoint barrier,Checkpoint barrier 也会 N — 1 等等,Checkpoint barrier N 代表着所有在这个范围里面的数据都是 Checkpoint barrier N。
Flink 目前支持以上两种状态后端,一种是纯 memory 的状态后端(java object read/write),另一种是有资源磁盘的状态后端(rocks db)
Watermarks
其精髓在于当某个运算值收到带有时间戳“ T ”的 watermarks 时就意味着它不会接收到新的数据了。使用 watermarks 的好处在于可以准确预估收到数据的截止时间。谁来赋予这个watermarks?