[Flink]Flink章2 Flink应用开发一
Flink的应用开发
1、首先创建Flink执行环境
2、构建数据源,添加数据源
数据源是Flink的数据流入口,目前flink已经包含了一些常用的数据源组件,可以直接从文件,文件目录,hdfs文件系统、socket、Kafka(需要单独引入flink-connector-kafka包)消息等源头中读取数据。
不过所有的数据源组件都要实现SourceFunction接口(SourceFunction是Flink stream source的根接口)
它继承自一个标记接口(空接口) Function 。
SourceFunction 定义了两个接口方法:
1、run :启动一个source,即对接一个外部数据源然后emit元素形成stream(大部分情况下会通过在该方法里运行一个while循环的形式来产生stream)。
2、cancel :取消一个source,也即将run中的循环emit元素的行为终止。
正常情况下,一个 SourceFunction 实现这两个接口方法就可以了。其实这两个接口方法也固化了一种实现模板。
对于一些需要打开和关闭的数据源可以继承RichSourceFunction抽象类,具体需要重写RichSourceFunction中open和close方法。
3、清洗转换数据
为了后续方便后续计算数据,拿到数据源的数据流后使用FlatMapFunction将数据流中的数据格式转成map。
4、构建窗口数据流并聚合计算
Flink的窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。一种经典的窗口分类可以分成:翻滚窗口(Tumbling Window,无重叠),滚动窗口(Sliding Window,有重叠),和会话窗口(Session Window,活动间隙)。
5、构建自定义SinkFunction实现自己的数据存储功能
继承RichSinkFunction 编写自己的SinkFunction,重写invoke(T),open()和close() 方法。
open()是在任务的线程启动的时候会调用,用于初始一些资源信息,比如打开连接。
close()对应的就可以实现关系连接资源的动作。
invoke(T)对流中的对象进行存储处理。