[flink-014]Sink和ES6的ElasticsearchSink

Sink,水池。Flink的计算结果,最终传给Sink落地存储。

Sink支持多种存储系统,包括数据库和消息队列,比如JDBC、Kaffka、Elasticsearch、Hbase....

从源头说起。

接口Function,位于Function.java,空接口,是所有用户自定义函数的根接口。

接口SinkFunction,继承Function,是所有用户自定义Sink函数的顶层接口。它定义invoke函数,把传入的数据写入到存储系统。它定义了子接口Context,Context返回处理时间和水印。

接口RichFunction,继承Function,是所有用户自定义Rich函数的顶层接口。它定义open, close, 获取运行上下文环境,迭代器等。

抽象类AbstractRichFunction,实现RichFunction,提供RichFunction的具体实现。

抽象类RichSinkFunction继承AbstarcRichFunction,什么都没做。

抽象类ElasticsearchSinkBase继承RichSinkFunction。Elasticsearch有多个版本,ElasticsearchSinkBase是所有Elasticsearch的Sink的基类。

ElasticsearchSinkBase的关键功能是,连接到Elasticsearch服务,以bulk方式存储数据。open函数创建clinet,创建bulk处理器,创建indexer。invoke函数,触发存储。

涉及到如下问题:

1.用Elasticsearch6ApiCallBridge连接Elasticsearch

2.BulkProcessor存储数据

3.设置存储数据的bulk操作失败的处理策略,也就是BulkFlushBackoffPolicy

4.Bulk存储监听,处理before bulk, after bulk。

5.savepoint处理,保存快照,从快照恢复,继续提交数据给Elasticsearch。

 

你可能感兴趣的:(flink,flink,elasticsearch)