flink源码分析_Flink的sink实战之一:初探

关于sink

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

0f418e876a1f8df43ad58a7ccf76b00a.png

关于《Flink的sink实战》系列文章

本文是《Flink的sink实战》的第一篇,旨在初步了解sink,通过对基本API和addSink方法的分析研究,为后续的编码实战打好基础;

从一段实例代码开始

  • 下面是个简单的flink应用代码,红框中的print方法就是sink操作:
9421b102dd042a66cf72df68800523a8.png
  • 下图是官方给出的sink方式,都是DataStream类的API,直接调用即可实现sink,刚才代码中的print就是其中一个:
1f930aeb9db5c7e1c58a4332afa4a64e.png
  • 接下来看看上图中API的源码,先看print方法,在DataStream.java中,如下,实际上是调用了addSink方法,入参是PrintSinkFunction
793fbf05f90133429f7bbc13a442f03b.png
  • 另一个常用API是writeAsText,源码如下,调用了writeUsingOutputFormat方法:
a2fe512de30d21be71e42d674a7c0091.png
  • 追踪writeUsingOutputFormat发现也是调用了addSink,入参是OutputFormatSinkFunction
0ce9d2adcab5974158f633bf906593af.png
  • print和writeAsText背后都在调用addSink,那么另一个常用的writeAsCsv方法呢?莫非也是调用addSink?打开一看果然,和writeAsText一样调用了writeUsingOutputFormat,而该方法里面就是在调用addSink:
3f4373ae0af1601543edac4c0802e0a6.png
  • 综上所述,data sink的关键就是addSink的入参,即SinkFunction接口的实现,通过类图直观看到常见的sink能力是如何实现的:
469da2cc7b505399fed8ccb95d9343a7.png
  • 从上图可见抽象类RichSinkFunction与各种sink能力的关系十分紧密,我们应该重点关注它,在类图上展示方法签名,如下图:
4743d696b492988c7cb322956a85edf1.png
  • 如上图所示,RichSinkFunction本身没有内容,但是它实现SinkFunction,继承AbstractRichFunction,是RichFunctionSinkFunction这两种特性的结合;
  • RichFunction的特性在前面的《Flink的DataSource三部曲》中已经了解,就是资源的open和close;
  • SinkFunction的特性呢?显然是用来处理计算结果的,类图上显示的是两个invoke方法,来看看官方的PrintSinkFunction.java
dc0c95640365d4fbcdda0c3ca6da493a.png
  • writer.write(record)的源码在PrintSinkOutputWriter.java,如下所示:
2832b363473e11caf0f0d60c5a281ed4.png

小结

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

  1. 负责实时计算结果的处理(如输出或持久化);
  2. 主要实现方式是调用DataStream.addSink方法;
  3. 各种sink能力的实现,主要途径是实现addSink方法的入参定义的接口;

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

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

3da01aeb1c26fbd6c599832ff8deb189.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值