栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Flink的sink实战之一:初探,java面试常问题

Flink的sink实战之一:初探,java面试常问题

[](

)从一段实例代码开始

  1. 下面是个简单的flink应用代码,红框中的print方法就是sink操作:

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

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

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

  1. 追踪writeUsingOutputFormat发现也是调用了addSink,入参是OutputFormatSinkFunction:

  1. print和writeAsText背后都在调用addSink,那么另一个常用的writeAsCsv方法呢?莫非也是调用addSink?打开一看果然,和writeAsTe
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

xt一样调用了writeUsingOutputFormat,而该方法里面就是在调用addSink:

  1. 综上所述,data sink的关键就是addSink的入参,即SinkFunction接口的实现,通过类图直观看到常见的sink能力是如何实现的:

  1. 从上图可见抽象类RichSinkFunction与各种sink能力的关系十分紧密,我们应该重点关注它,在类图上展示方法签名,如下图:

  1. 如上图所示,RichSinkFunction本身没有内容,但是它实现SinkFunction,继承AbstractRichFunction,是RichFunction和SinkFunction这两种特性的结合;

  2. RichFunction的特性在前面的[《Flink的DataSource三部曲》](

)中已经了解,就是资源的open和close;

  1. SinkFunction的特性呢?显然是用来处理计算结果的,类图上显示的是两个invoke方法,来看看官方的PrintSinkFunction.java:

  1. writer.write(record)的源码在PrintSinkOutputWriter.java,如下所示:

[](

)小结

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号