这是 Java 极客技术的第 262 篇原创文章
1 前言
先来回顾一下 Flink
基础的三兄弟:
数据来源
DataSource
数据转换
Transaformation
数据存储
DataSink
前面两篇笔记已经写了数据来源和转换如何使用,那么这篇当然就到了数据存储,接下来将会从以下角度介绍一下(喜闻乐见的 What
/ Why
/ How
)~:
1 为什么要用
Sink
2
DataSink
是什么3 如何使用(进阶使用,滑动时间窗口例子)
2 为什么要用 DataSink
在处理数据的最后一步,一般要进行验证和之后统计,如果没有将计算结果存储下来,后面的操作也很难展开,所以结果的存储或者更新就显得很必要。
3 DataSink 是什么
Flink
基础操作与一个处理数据 Http
接口的生命周期很像,接受数据 -> 处理数据 -> 存储数据,而 Sink
在翻译有表示【下沉】的意思,也就是我们经常对处理数据后做的一件事:存储。
下面来看下 RickSinkFunction
类的继承体系图:
个人觉得跟数据源 RichSourceFunction
很像,都继承了 AbstractRichFunction
抽象类,实现了 RichFunction
中的 open
和 close
等基础方法。两者的区别在于,数据源 DataSource
另外实现的是 SourceFunction
接口,而我们本篇文章的主角 DataSink
实现的就是 SinkFunction
接口。
4 官方支持的连接器 Connector
在流式计算框架 Flink
中,可以通过 Sink
进行存储操作。官方给出更推荐的说法是连接器 Connector
, 第三方中间件作为连接器,既可以当成数据源,也能当成目的地,取决于上面提到实现的接口(SourceFunction
/SinkFunction
)
以下是官方支持的连接器,感兴趣的可以点击参考资料三去详细了解~
Apache Kafka (source/sink)
Apache Cassandra (sink)
Amazon Kinesis Streams (source/sink)
Elasticsearch (sink)
Hadoop FileSystem (sink)
RabbitMQ (source/sink)
Apache NiFi (sour