Flink 应用开发
Flink 作为批流一体的计算引擎,其面对的是业务场景,面向的使用者是开发人员和运维管理人员。
Flink 应用,也叫作 Flink 作业、Flink Job。Flink 作业包含了两个基本的块:数据流(DataStream)和转换(Transformation)。DataStream 是逻辑概念,为开发者提供了 API 接口,Transformation 是处理行为的抽象,包含了数据的读取、计算、写出。所以 Flink 的作业中的 DataStream API 调用,实际上构建了多个由 Transformation 组成的数据处理流水线(Pipeline)。
执行时,Flink 应用被映射成 Dataflow,由数据流和转换操作组成。每个 Dataflow 从一个或多个数据源开始,并以一个或多个 Slink 输出结束。Dataflow 本质上是一个有向无环图(DAG),但是允许通过迭代构造允许特殊形式的有向有环图。为了简单起见,大部分任务都是有向无环图。
Flink 应用由相同的基本部分组成。
获取参数(可选)
如果有配置参数,则读取配置参数,可以是命令行输入的参数,也可以是配置文件(配置文件可能是命令行给的 1 个配置文件路径)。
初始化 Stream 执行环境
这是必须要做的,读取数据的 API 依赖于该执行环境。
配置参数
读取到的参数可以是执行环境参数或者业务参数。执行环境参数调用对应的 API 赋予即可,这些参数会覆盖 flink.conf 中默认的配置参数,如最大并行度 maxParallism 等。如果是业务级的参数,可以放入 GlobalJobParameters 中,在 Job 执行时从 GlobalJobParameters 读取参数。
一般在生产或者实际的应用场景中,多多少少需要提供一些配置信息,如果只是为了学习用途,则可以不用考虑。GlobalJobParameters 可以视作一个 Map,执行环境参数等具体细节可以参照官方文档的详细说明。
读取外部数据
Flink 作为分布式执行引擎,本身没有数据存储能力,所以定义了一系列接口、连接器与外部存储进行交互,读写数据。在 Flink 中,数据来源叫作 Source,Flink 支持从 Kafka、HDFS、HBase、数据库等外部存储读取数据。
数据处理流程
调用 DataStream 的 API 组成数据处理的流程,如调用 DataStream.map().filter()...组成一个数据处理流水线。
将处理结果写入外部
在 Flink 中将数据写入外部的过程叫作 Sink,Flink 支持写出数据到 Kafka、HDFS、HBase、数据库等外部存储。
触发执行
StreamExecutionEnvironment#execute 是 Flink 应用执行的触发入口,无论是一般的 DataStream API 开发还是 Table &SQL 开发都是如此。调用该 API 之后,才会触发后续的一系列生成 StreamGraph、JobGraph、ExecutionGraph 和任务分发执行的过程。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/c09927298821c37912c2a7409】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论