欢送拜访我的 GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,波及 Java、Docker、Kubernetes、DevOPS 等;
对于 sink
下图来自 Flink 官网,红框中就是 sink,可见实时数据从 Source 处开始,在 Transformation 阶段实现业务逻辑后在 sink 完结,因而 sink 能够用来解决计算结果,例如控制台输入或者保留数据库:
对于《Flink 的 sink 实战》系列文章
本文是《Flink 的 sink 实战》的第一篇,旨在初步理解 sink,通过对根本 API 和 addSink 办法的剖析钻研,为后续的编码实战打好根底;
全系列链接
- 《Flink 的 sink 实战之一:初探》
- 《Flink 的 sink 实战之二:kafka》
- 《Flink 的 sink 实战之三:cassandra3》
- 《Flink 的 sink 实战之四:自定义》
从一段实例代码开始
- 上面是个简略的 flink 利用代码,红框中的 print 办法就是 sink 操作:
- 下图是官网给出的 sink 形式,都是 DataStream 类的 API,间接调用即可实现 sink,方才代码中的 print 就是其中一个:
- 接下来看看上图中 API 的源码,先看 print 办法,在 DataStream.java 中,如下,实际上是调用了 addSink 办法,入参是 PrintSinkFunction:
- 另一个罕用 API 是 writeAsText,源码如下,调用了 writeUsingOutputFormat 办法:
- 追踪 <font color=”blue”>writeUsingOutputFormat</font> 发现也是调用了 addSink,入参是 <font color=”blue”>OutputFormatSinkFunction</font>:
- print 和 writeAsText 背地都在调用 addSink,那么另一个罕用的 <font color=”blue”>writeAsCsv</font> 办法呢?莫非也是调用 addSink?关上一看果然,和 writeAsText 一样调用了 <font color=”blue”>writeUsingOutputFormat</font>,而该办法外面就是在调用 addSink:
- 综上所述,data sink 的要害就是 <font color=”blue”>addSink</font> 的入参,即 <font color=”blue”>SinkFunction</font> 接口的实现,通过类图直观看到常见的 sink 能力是如何实现的:
- 从上图可见抽象类 <font color=”blue”>RichSinkFunction</font> 与各种 sink 能力的关系非常严密,咱们应该重点关注它,在类图上展现办法签名,如下图:
- 如上图所示,<font color=”blue”>RichSinkFunction</font> 自身没有内容,然而它实现 <font color=”blue”>SinkFunction</font>,继承 <font color=”blue”>AbstractRichFunction</font>,是 <font color=”blue”>RichFunction</font> 和 <font color=”blue”>SinkFunction</font> 这两种个性的联合;
- <font color=”blue”>RichFunction</font> 的个性在后面的《Flink 的 DataSource 三部曲》中曾经理解,就是资源的 open 和 close;
- <font color=”blue”>SinkFunction</font> 的个性呢?显然是用来解决计算结果的,类图上显示的是两个 invoke 办法,来看看官网的 <font color=”blue”>PrintSinkFunction.java</font>:
- <font color=”blue”>writer.write(record)</font> 的源码在 PrintSinkOutputWriter.java,如下所示:
小结
至此,咱们曾经对 Flink 的 sink 有了根本理解:
- 负责实时计算结果的解决 (如输入或长久化);
- 次要实现形式是调用 DataStream.addSink 办法;
- 各种 sink 能力的实现,次要路径是实现 addSink 办法的入参定义的接口;
前面的章节,一起进行 sink 方面的编码实战吧,实战的方向:体验官网提供的 sink 能力,自定义 sink 能力实现;
欢送关注公众号:程序员欣宸
微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos