Flink 数据流元素
数据流元素在 Flink 中叫作 StreamElement,有数据记录 StreamRecord、延迟标记 Latency Marker、Watermark、流状态标记 StreamStatus 这 4 种,分别有各自不同的用途。
在执行层面上,4 种数据流元素都被序列化成二进制数据,形成混合的数据流,在算子中将混合数据流中的数据流元素反序列化出来,根据其类型分别进行处理。
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)。
数据转换在 Flink 中叫作 Transformation,是衔接 DataStream API 和 Flink 内核的逻辑结构。DataStream 面向开发者,Transformation 面向 Flink 内核,调用 DataStream API 的数据处理流水线,最终会转换为 Transformation 流水线,Flink 从 Transformation 流水线开始执行。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/e99259413e95173c4d782af3c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论