赞
踩
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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。