faster-bulk外掛程式是Elasticsearch團隊自研的外掛程式,目的是為了提高寫入吞吐和降低寫入拒絕。該外掛程式能夠實現將bulk寫入請求按照指定bulk請求大小和時間間隔進行批量彙總,防止過小的bulk請求阻塞寫入隊列,有效提升寫入吞吐。本文介紹faster-bulk外掛程式的適用情境和使用方法。
適用情境
faster-bulk外掛程式適用於寫入吞吐高、索引分區數多的情境,實測對這類情境寫入吞吐提升20%以上,能有效降低寫入拒絕,測試說明如下。
重要 faster-bulk實現的本質是對bulk寫入請求進行批量彙總後再寫入shard,因此建議不要在寫入延時要求較高的情境中使用。
- 測試環境
- 節點:3 * 16核64 GB資料節點 + 2 * 16核64 GB獨立協調節點。
- 資料集:esrally官方資料集nyc-taxis,單文檔大小為650位元組。
- 參數:apack.fasterbulk.combine.interval設定為200ms。
- translog狀態:分別對translog在同步及非同步狀態進行測試。
- 測試結果
translog狀態 寫入效能(原生叢集,未使用faster-bulk外掛程式) 寫入效能(阿里雲叢集,使用faster-bulk外掛程式) 效能提升 同步狀態 182314/s 226242/s 23% 非同步狀態 218732/s 241060/s 10% - 結論
由實驗資料對比可得,使用faster-bulk外掛程式後,translog同步或非同步狀態下寫入效能均有所提升,同步狀態(預設)下寫入效能提升了23%。
前提條件
您已完成以下操作:
- 建立Elasticsearch執行個體,版本為6.7.0或7.10.0。具體操作步驟請參見建立Elasticsearch執行個體。說明 faster-bulk外掛程式目前僅支援Elasticsearch 6.7.0和7.10.0版本(商業版和增強版)。
- 安裝faster-bulk外掛程式。
具體操作步驟請參見安裝或卸載系統預設外掛程式。外掛程式安裝後,bulk彙總功能預設關閉,使用前需要先開啟該功能。
開啟bulk彙總功能
- 登入Elasticsearch執行個體的Kibana控制台。具體操作步驟請參見登入Kibana控制台。
- 在左側導覽列,單擊Dev Tools。
- 在Console中,執行以下命令,開啟bulk彙總功能。
PUT _cluster/settings { "transient" : { "apack.fasterbulk.combine.enabled":"true" } }
說明 您也可以通過curl命令或第三方可視化外掛程式執行以上命令。
設定bulk彙總大小和時間間隔
執行以下命令,指定bulk請求的彙總大小和時間間隔。當單個資料節點上,bulk請求的累計大小或彙總時間間隔達到閾值,即會觸發資料寫入。
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.flush_threshold_size":"1mb",
"apack.fasterbulk.combine.interval":"50"
}
}
- apack.fasterbulk.combine.flush_threshold_size:彙總的bulk請求的最大值,預設值為1mb。
- apack.fasterbulk.combine.interval:彙總的bulk請求的最大時間間隔,單位為ms,預設值為50。
說明 對于海量資料高並發情境,在叢集可承受的壓力範圍內,可適當將最大彙總大小或最大時間間隔調大,減少bulk請求阻塞寫入隊列。
定向路由
當批量寫入文檔未指定routing和主鍵(_id)時,您可以為叢集或指定索引開啟定向路由,提高寫入速度。
說明 如果叢集或索引開啟了定向路由,同時寫入中也指定了routing和主鍵(_id),那麼定向路由不會生效,且不會影響正常的業務寫入。
- 為叢集開啟定向路由
PUT _cluster/settings { "persistent" : { "index.direct_routing.global.enable" : "true" } }
- 為指定索引開啟定向路由
PUT index/settings { "index.direct_routing.enable" : "true" }
關閉bulk彙總功能
執行以下命令,關閉bulk彙總功能。
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"false"
}
}