高速一括プラグインは、Alibaba Cloud Elasticsearchチームによって開発されました。このプラグインは、指定された最大リクエストサイズと集約間隔に基づいて、一括書き込みリクエストをバッチで集約します。これにより、小さな一括リクエストが書き込みキューをブロックするのを防ぎ、書き込みスループットを向上させ、書き込みリクエストの拒否を減らします。このトピックでは、プラグインのユースケースを紹介し、プラグインの使用方法について説明します。
シナリオ
高速一括プラグインは、書き込みスループットが高く、多数のインデックスシャードが存在するシナリオに最適です。このプラグインは、これらのシナリオで書き込みスループットを 20% 以上向上させることができます。
重要 高速一括プラグインは、シャードにデータを書き込む前に、一括書き込みリクエストをバッチで集約します。そのため、レイテンシの影響を受けやすいシナリオでは、このプラグインを使用しないことをお勧めします。
- テスト環境
- ノード構成:3 つのデータノードと 2 つの独立したクライアントノード。各ノードは、16 個の vCPU と 64 GiB のメモリを提供します。
- データセット:オープンソースの Elasticsearch で Rally によって提供される nyc_taixs。単一のドキュメントのサイズは 650 バイトです。
- パラメータ設定:apack.fasterbulk.combine.interval パラメータは、200ms に設定されています。
- トランザクションログの状態:同期状態と非同期状態のそれぞれでテストが実行されます。 index.translog.durability パラメータが request に設定されている場合、トランザクションログは同期状態になります。 index.translog.durability パラメータが async に設定されている場合、トランザクションログは非同期状態になります。
- テスト結果
トランザクションログの状態 高速一括を使用しないオープンソースの Elasticsearch クラスタの書き込みパフォーマンス(ドキュメント/秒) 高速一括を使用する Alibaba Cloud Elasticsearch クラスタの書き込みパフォーマンス(ドキュメント/秒) パフォーマンスの向上(パーセンテージ) 同期 182,314 226,242 23% 非同期 218,732 241,060 10% - テストの結論
高速一括プラグインを使用すると、同期状態(デフォルト状態)と非同期状態の両方で書き込みパフォーマンスが向上します。同期状態では、書き込みパフォーマンスが 23% 向上します。
前提条件
- Alibaba Cloud Elasticsearch V6.7.0 または V7.10.0 クラスタが作成されていること。詳細については、「Alibaba Cloud Elasticsearch クラスタを作成する」をご参照ください。説明 高速一括プラグインは、Standard Edition または Advanced Edition の Alibaba Cloud Elasticsearch V6.7.0 および V7.10.0 クラスタでのみサポートされています。
- 高速一括プラグインがインストールされていること。
詳細については、「組み込みプラグインをインストールおよび削除する」をご参照ください。プラグインがインストールされると、一括リクエスト集約機能はデフォルトで無効になります。このプラグインを使用する前に、この機能を有効にする必要があります。
一括リクエスト集約機能を有効にする
- Elasticsearch クラスタの Kibana コンソールにログオンします。詳細については、「Kibana コンソールにログオンする」をご参照ください。
- 左側のナビゲーションペインで、[dev Tools] をクリックします。
- 表示されるページの [console] タブで、次のコマンドを実行して一括リクエスト集約機能を有効にします。
PUT _cluster/settings { "transient" : { "apack.fasterbulk.combine.enabled":"true" } }説明 cURL ツールまたはサードパーティのビジュアライザーを使用して、上記のコマンドを実行することもできます。
最大リクエストサイズと集約間隔を設定する
次のコマンドを実行して、最大リクエストサイズと集約間隔を設定します。単一データノード上の一括リクエストの合計サイズまたは集約間隔が設定されたしきい値に達すると、システムはシャードにデータを書き込みます。
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.flush_threshold_size":"1mb",
"apack.fasterbulk.combine.interval":"50"
}
}- apack.fasterbulk.combine.flush_threshold_size:一括リクエストの最大サイズ。デフォルト値:1mb。
- apack.fasterbulk.combine.interval:一括リクエストが集約される最大間隔。デフォルト値:50。単位:ミリ秒。
説明 高並行性の一括リクエストを処理し、リクエストが書き込みキューをブロックするのを防ぐために、ビジネス要件に基づいて最大リクエストサイズまたは集約間隔を増やすことができます。
ダイレクトルーティングを有効にする
一括書き込みリクエストで書き込む必要のあるドキュメントにルーティング設定とプライマリキーが設定されていない場合は、Elasticsearch クラスタまたは指定されたインデックスのダイレクトルーティングを有効にして、データ書き込み速度を向上させることができます。プライマリキーは _id パラメータで指定されます。
説明 Elasticsearch クラスタまたは指定されたインデックスに対してダイレクトルーティングが有効になっていて、書き込む必要のあるドキュメントにルーティング設定とプライマリキーが設定されている場合、ダイレクトルーティングは有効にならず、データ書き込み操作は影響を受けません。
- Elasticsearch クラスタのダイレクトルーティングを有効にする
PUT _cluster/settings { "persistent" : { "index.direct_routing.global.enable" : "true" } } - 指定されたインデックスのダイレクトルーティングを有効にする
PUT index/settings { "index.direct_routing.enable" : "true" }
一括リクエスト集約機能を無効にする
次のコマンドを実行して、一括リクエスト集約機能を無効にします。
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"false"
}
}