漫遊es-bulk processor批處理的經典策略

炸雞店老闆發表於2017-11-01

es 的程式碼也是相當的優雅!

bulk processor對於批處理的實現簡潔、並且功能豐富。這個套路常用,記錄一下。

1. 按照處理請求積壓數觸發server的請求(主動);

2. 按照處理請求積壓的位元組數觸發server請求(主動)

3. 定時觸發server請求(定時);


主動觸發實現:

// 對外的新增請求介面
public BulkProcessor add(ActionRequest request, @Nullable Object payload) {
    this.internalAdd(request, payload);
    return this;
}

// private 確保新增邏輯正常執行
// 加鎖-防止重複執行
private synchronized void internalAdd(ActionRequest request, @Nullable Object payload) {
    this.ensureOpen();
    this.bulkRequest.add(request, payload);
    // 主動觸發
    this.executeIfNeeded();
}

// 判斷是否執行
private void executeIfNeeded() {
    this.ensureOpen();
    // size, numbers任意符合即可執行
    if(this.isOverTheLimit()) {
        this.execute();
    }
}

定時實現:

Executors.newScheduleThreadPool() 搞定。


參考:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk-processor.html

相關文章