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 的代碼實現如下所示(附帶詳細註釋):