Routine Load
ロードパフォーマンスを向上させるにはどうすればよいですか?
方法 1: 実際のロードタスクの並行性を増やす ために、ロードジョブを可能な限り多くの並行ロードタスクに分割します。
注意
この方法は、より多くの CPU リソースを消費し、過剰な tablet バージョンを引き起こす可能性があります。
実際のロードタスクの並行性は、いくつかのパラメータで構成された以下の式によって決定され、上限は生存している BE ノードの数または消費されるパーティションの数です。
min(alive_be_number, partition_number, desired_concurrent_number, max_routine_load_task_concurrent_num)
パラメータの説明:
alive_be_number: 生存している BE ノードの数。partition_number: 消費されるパーティションの数。desired_concurrent_number: Routine Load ジョブのための希望するロードタスクの並行性。デフォルト値は3です。このパラメータの値を高く設定することで、実際のロードタスクの並行性を増やすことができます。- Routine Load ジョブを作成していない場合は、CREATE ROUTINE LOAD を使用して Routine Load ジョブを作成する際にこのパラメータを設定する必要があります。
- すでに Routine Load ジョブを作成している場合は、ALTER ROUTINE LOAD を使用してこのパラメータを変更する必要があります。
max_routine_load_task_concurrent_num: Routine Load ジョブのためのデフォルトの最大タスク並行性。デフォルト値は5です。このパラメータは FE の動的パラメータです。詳細情報と設定方法については、パラメ ータ設定 を参照してください。
したがって、消費されるパーティションの数と生存している BE ノードの数が他の 2 つのパラメータよりも大きい場合、desired_concurrent_number と max_routine_load_task_concurrent_num のパラメータの値を増やすことで、実際のロードタスクの並行性を増やすことができます。
例えば、消費されるパーティションの数が 7、生存している BE ノードの数が 5、max_routine_load_task_concurrent_num がデフォルト値 5 の場合、ロードタスクの並行性を上限まで増やす必要がある場合は、desired_concurrent_number を 5 に設定する必要があります(デフォルト値は 3)。その後、実際のタスク並行性 min(5,7,5,5) は 5 と計算されます。
パラメータの詳細については、CREATE ROUTINE LOAD を参照してください。
方法 2: Routine Load タスクが 1 つ以上のパーティションから消費するデータ量を増やす。
注意
この方法は、データロードの遅延を引き起こす可能性があります。
Routine Load タスクが消費できるメッセージの数の上限は、ロードタスクが消費できる最大メッセージ数を意味するパラメータ max_routine_load_batch_size またはメッセージ消費の最大期間を意味するパラメータ routine_load_task_consume_second によって決定されます。ロードタスクがいずれかの要件を満たす十分なデータを消費すると、消費は完了します。これらの 2 つのパラメータは FE の動的パラメータです。詳細情報と設定方法については、パラメータ設定 を参照してください。
be/log/be.INFO のログを確認することで、どのパラメータがロードタスクが消費するデータ量の上限を決定しているかを分析できます。そのパラメータを増やすことで、ロードタスクが消費するデータ量を増やすことができます。
I0325 20:27:50.410579 15259 data_consumer_group.cpp:131] consumer group done: 41448fb1a0ca59ad-30e34dabfa7e47a0. consume time(ms)=3261, received rows=179190, received bytes=9855450, eos: 1, left_time: -261, left_bytes: 514432550, blocking get time(us): 3065086, blocking put time(us): 24855
通常、ログのフィールド left_bytes が 0 以上である場合、ロードタスクが消費するデータ量が routine_load_task_consume_second 内で max_routine_load_batch_size を超えていないことを示しています。これは、スケジュールされたロードタスクのバッチが Kafka からのすべてのデータを遅延なく消費できることを意味します。このシナリオでは、routine_load_task_consume_second の値を大きく設定することで、ロードタスクが 1 つ以上のパーティションから消費するデータ量を増やすことができます。