faster-bulk 是系統內建的寫入最佳化外掛程式,支援按指定大小與時間間隔彙總 Bulk 請求,防止小批量寫入阻塞隊列,適用於高吞吐、多分區情境。該外掛程式預設關閉,需手動開啟後生效。因彙總會引入等待延遲,不適用於低延遲寫入情境。
使用須知
使用前需先安裝外掛程式,請參見安裝或卸載系統預設外掛程式。
寫入效能參考
以下為faster-bulk外掛程式在特定測試環境下的效能資料,供評估參考。
測試環境:3 * 16核64 GB資料節點 + 2 * 16核64 GB獨立協調節點,esrally官方資料集nyc-taxis(單文檔650位元組),apack.fasterbulk.combine.interval設定為200ms。
translog狀態 | 未使用外掛程式 | 使用外掛程式 | 效能提升 |
同步狀態(預設) | 182314/s | 226242/s | 23% |
非同步狀態 | 218732/s | 241060/s | 10% |
開啟bulk彙總功能
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"true"
}
}設定彙總參數
指定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_name>/_settings
{
"index.direct_routing.enable" : "true"
}關閉bulk彙總功能
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"false"
}
}