有界流和无界流
无界流: 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我处理无界数据通常要求以特定顺序摄取事
件,例如事件发生的顺序,以便能够推断结果的完整性。
有界流: 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流处理通常被称为批处理
有状态的计算架构
所谓状态就是计算过程中产生的中间计算结果,每次计算新的数据进入到流式系统中
都是基于中间状态结果的基础上进行运算,最终产生正确的统计结果
事件时间(Event Time)概念
在流式计算领域中,框架窗口计算是系统时间(Process Time),也是事件传输到计算框架处理时,系统主机的当前时间。Flink 基于事件时间(Event Time)语义进行窗口计算,也就是使用事件产生的时间,这种基于事件驱动的机制使得事件即使乱序到达,流系统也能够计算出精确的结果,保持了事件原本产生时的时序性
支持有状态计算
状态就是在流式计算过程中将算子的中间结果数据保存在内存或者文件系统中,等下一个事件进入算子后可以从之前的状态中获取中间结果中计算当前的结果,
窗口(Window)操作
窗口对流数据进行一定范围的聚合计算,Flink 将窗口划分为基于 Time、Count、Session,以及 Data-driven 等类型的窗口操作,窗口可以用灵活的触发条件定制化来达到对复杂的流传输模式的支持,
轻量级分布式快照(CheckPoint)的容错
基于分布式快照技术的 Checkpoints,将执行过程中的状态信息进行持久化存储,一旦任务出现异常停止,Flink 就能够从 Checkpoints 中进行任务的自动恢复,以确保数据在处理过
程中的一致性(Exactly-Once)。
JVM 实现独立的内存管理
Flink 实现了自身管理内存的机制,尽可能减少 JVM GC 对系统的影响。另外,Flink 通过序列化/反序列化方法将所有的数据对象转换成二进制在内存中存储,降低数据存储的大小的同时,能够更加有效地对内存空间进行利用,降低 GC 带来的性能下降或任务异常的风险,因此
Save Points(保存点)
对于 7*24 小时运行的流式应用,数据源源不断地接入,在一段时间内应用的终止
有可能导致数据的丢失或者计算结果的不准确,例如进行集群版本的升级、停机运维操
作等操作。Flink 通过 Save Points 技术将任务执行的快照保存在存储介质上,当任务重启的时候可以直接从事先保存的 Save Points 恢复原有的计算状态,使得任务继续按照停机之前的状态运行