Flink 的函数体系
函数在 Flink 中叫作 Function,开发者编写的函数叫作 UDF(User Defined Function),当然 Flink 对于通用场景也内置了大量的预定义的通用 UDF 来简化开发,如 Join、GroupBy、Sum 等 SQL 语义等价的 UDF。UDF 在 Flink 的 DataStream 开发和 SQL 开发中被广泛使用。开发者使用 UDF 主要是实现非通用的计算逻辑,一般是业务逻辑。UDF、Function、用户自定义函数的含义是相同的。
按照输入和输入的不同特点分类,Flink 中的 UDF 大概分为 3 类:
1、SourceFunction
无上游 Function,SourceFunction 直接从外部数据存储读取数据,所以 SourceFunction 所在的算子是起始,没有上游算子。
2、SinkFunction
无下游 Function,SinkFunction 直接将数据写入外部存储,所以 Sink 函数所在的算子是作业的重点,没有下游算子。
SinkFunction 只是单纯地定义了数据写出到外部存储的行为,并没有 Function 的生命周期管理行为,函数的生命周期定义在 AbstractRichFunction 中。在 Connector 中实际实现 Sink 的时候,基本都是从 RickSinkFunction 和 TwoPhaseCommitSinkFunction 继承。
3、一般 Function
一般的 UDF 函数用在作业的中间处理步骤中,其接口定义与 SourceFunction 和 SinkFunction 不同。一般 UDF 所在的算子有上游算子,也有下游算子。
Flink 的一般 UDF 有单流输入和双流输入两种,从 UDF 输入、输出的模型来说,多流输入可以通过多个双流输入串联而成,这种设计比较简单实用。
SourceFunction 和 SinkFunction 主要在 Flink 中的连接器使用,也会在自定义读取、写出数据的时候使用。其余的大量实现逻辑的函数都属于一般 UDF。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/ce3c88a6d69385904174a9a34】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论