Flink内核原理与实现
上QQ阅读APP看书,第一时间看更新

3.2 数据流元素

数据流元素在Flink中叫作StreamElement,有数据记录StreamRecord、延迟标记Latency Marker、Watermark、流状态标记StreamStatus这4种,分别有各自不同的用途。

在执行层面上,4种数据流元素都被序列化成二进制数据,形成混合的数据流,在算子中将混合数据流中的数据流元素反序列化出来,根据其类型分别进行处理。

StreamElement类体系如图3-6所示。

图3-6 StreamElement类体系

1. StreamRecord

StreamRecord表示数据流中的一条记录(或者叫作一个事件),也叫作数据记录。

StreamRecord包含如下内容。

1)数据的值本身。

2)事件戳(可选)。

2. LatencyMarker

LatencyMarker用来近似评估延迟,LatencyMarker在Source中创建,并向下游发送,绕过业务处理逻辑,在Sink节点中使用LatencyMarker估计数据在整个DAG图中流转花费的时间,用来近似地评估总体上的处理延迟。

LatencyMarker包含如下信息。

1)周期性地在数据源算子中创造出来的时间戳。

2)算子编号。

3)数据源算子所在的Task编号。

3. Watermark

Watermark是一个时间戳,用来告诉算子所有时间早于等于Watermark的事件或记录都已经到达,不会再有比Watermark更早的记录,算子可以根据Watermark触发窗口的计算、清理资源等。后边有详细介绍。

4. StreamStatus

用来通知Task是否会继续接收到上游的记录或者Watermark。StreamStatus在数据源算子中生成,向下游沿着Dataflow传播。

StreamStatus可以表示两种状态:

1)空闲状态(IDLE)。

2)活动状态(ACTIVE)。