温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行Flink中的sink实战

发布时间:2021-12-27 15:02:03 来源:亿速云 阅读:411 作者:柒染 栏目:大数据

如何进行Flink中的sink实战,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

关于sink

下图来自Flink官方,红框中就是sink,可见实时数据从Source处开始,在Transformation阶段完成业务逻辑后在sink结束,因此sink可以用来处理计算结果,例如控制台输出或者保存数据库: 如何进行Flink中的sink实战

从一段实例代码开始

  1. 下面是个简单的flink应用代码,红框中的print方法就是sink操作: 如何进行Flink中的sink实战

  2. 下图是官方给出的sink方式,都是DataStream类的API,直接调用即可实现sink,刚才代码中的print就是其中一个: 如何进行Flink中的sink实战

  3. 接下来看看上图中API的源码,先看print方法,在DataStream.java中,如下,实际上是调用了addSink方法,入参是PrintSinkFunction: 如何进行Flink中的sink实战

  4. 另一个常用API是writeAsText,源码如下,调用了writeUsingOutputFormat方法: 如何进行Flink中的sink实战

  5. 追踪<font color="blue">writeUsingOutputFormat</font>发现也是调用了addSink,入参是<font color="blue">OutputFormatSinkFunction</font>: 如何进行Flink中的sink实战

  6. print和writeAsText背后都在调用addSink,那么另一个常用的<font color="blue">writeAsCsv</font>方法呢?莫非也是调用addSink?打开一看果然,和writeAsText一样调用了<font color="blue">writeUsingOutputFormat</font>,而该方法里面就是在调用addSink: 如何进行Flink中的sink实战

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

如何进行Flink中的sink实战 8. 从上图可见抽象类<font color="blue">RichSinkFunction</font>与各种sink能力的关系十分紧密,我们应该重点关注它,在类图上展示方法签名,如下图: 如何进行Flink中的sink实战 9. 如上图所示,<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>这两种特性的结合; 10. <font color="blue">RichFunction</font>的特性在前面的《Flink的DataSource三部曲》中已经了解,就是资源的open和close; 11. <font color="blue">SinkFunction</font>的特性呢?显然是用来处理计算结果的,类图上显示的是两个invoke方法,来看看官方的<font color="blue">PrintSinkFunction.java</font>: 如何进行Flink中的sink实战 12. <font color="blue">writer.write(record)</font>的源码在PrintSinkOutputWriter.java,如下所示: 如何进行Flink中的sink实战

至此,我们已经对Flink的sink有了基本了解:

  1. 负责实时计算结果的处理(如输出或持久化);

  2. 主要实现方式是调用DataStream.addSink方法;

  3. 各种sink能力的实现,主要途径是实现addSink方法的入参定义的接口;

关于如何进行Flink中的sink实战问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI