关于云计算:Flink的sink实战之一初探

37次阅读

共计 1931 个字符,预计需要花费 5 分钟才能阅读完成。

欢送拜访我的 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 办法的剖析钻研,为后续的编码实战打好根底;

全系列链接

  1. 《Flink 的 sink 实战之一:初探》
  2. 《Flink 的 sink 实战之二:kafka》
  3. 《Flink 的 sink 实战之三:cassandra3》
  4. 《Flink 的 sink 实战之四:自定义》

从一段实例代码开始

  1. 上面是个简略的 flink 利用代码,红框中的 print 办法就是 sink 操作:

  1. 下图是官网给出的 sink 形式,都是 DataStream 类的 API,间接调用即可实现 sink,方才代码中的 print 就是其中一个:

  1. 接下来看看上图中 API 的源码,先看 print 办法,在 DataStream.java 中,如下,实际上是调用了 addSink 办法,入参是 PrintSinkFunction:

  1. 另一个罕用 API 是 writeAsText,源码如下,调用了 writeUsingOutputFormat 办法:

  1. 追踪 <font color=”blue”>writeUsingOutputFormat</font> 发现也是调用了 addSink,入参是 <font color=”blue”>OutputFormatSinkFunction</font>:

  1. print 和 writeAsText 背地都在调用 addSink,那么另一个罕用的 <font color=”blue”>writeAsCsv</font> 办法呢?莫非也是调用 addSink?关上一看果然,和 writeAsText 一样调用了 <font color=”blue”>writeUsingOutputFormat</font>,而该办法外面就是在调用 addSink:

  1. 综上所述,data sink 的要害就是 <font color=”blue”>addSink</font> 的入参,即 <font color=”blue”>SinkFunction</font> 接口的实现,通过类图直观看到常见的 sink 能力是如何实现的:

  1. 从上图可见抽象类 <font color=”blue”>RichSinkFunction</font> 与各种 sink 能力的关系非常严密,咱们应该重点关注它,在类图上展现办法签名,如下图:

  1. 如上图所示,<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> 这两种个性的联合;
  2. <font color=”blue”>RichFunction</font> 的个性在后面的《Flink 的 DataSource 三部曲》中曾经理解,就是资源的 open 和 close;
  3. <font color=”blue”>SinkFunction</font> 的个性呢?显然是用来解决计算结果的,类图上显示的是两个 invoke 办法,来看看官网的 <font color=”blue”>PrintSinkFunction.java</font>:

  1. <font color=”blue”>writer.write(record)</font> 的源码在 PrintSinkOutputWriter.java,如下所示:

小结

至此,咱们曾经对 Flink 的 sink 有了根本理解:

  1. 负责实时计算结果的解决 (如输入或长久化);
  2. 次要实现形式是调用 DataStream.addSink 办法;
  3. 各种 sink 能力的实现,次要路径是实现 addSink 办法的入参定义的接口;

前面的章节,一起进行 sink 方面的编码实战吧,实战的方向:体验官网提供的 sink 能力,自定义 sink 能力实现;

欢送关注公众号:程序员欣宸

微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos

正文完
 0