Elasticsearch 使用 BulkProcessor 将 Bulk API 进一步封装,大大简化了对文档的 增加/更新/删除 操作。接下来,我们一起来学习一下 BulkProcessor 的具体实现。 版本:6.5.0
一、添加 pom 依赖
本文示例使用的是 Spring Boot 框架,由于该框架有默认的 Elasticsearch 版本,为了避免版本混乱或冲突,我在 pom.xml 文件内添加了如下依赖:(如果用的5.5.0的ELK,可以使用5.6.8的包,兼容性好)
<!-- elasticsearch 6.5.0 -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.5.0</version>
</dependency>
二、创建 BulkProcessor 实例
1、BulkProcessor 类提供了简单接口去自动刷新 bulk 操作,可设置条件来自动触发 bulk 操作。比如:
- 设置 request 的数量:setBulkActions()
- 设置 request 的大小:setBulkSize()
- 设置 bulk 执行的周期:setFlushInterval()
还可指定一些优化的参数,比如:
- 设置并发请求数:setConcurrentRequests()
- 设置最大重试次数和重试周期:setBackoffPolicy()
2、如果创建 BulkProcessor 实例,需要指定 Elasticsearch 初始化的 client ,这里是用 TransportAddress 来初始化的 client 。client 用于执行 BulkRequest 和 BulkResponse 。
3、BulkProcessor 有一个 Listener ,在每次 BulkRequest 执行之前或之后或 BulkRequest 失败时调用该 Listener 。
具体的 BulkProcessor 的代码实现如下所示(附带详细注释):