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)。