web-dev-qa-db-ja.com

linger.msを0に保つことの影響

kafka 0.10.2.1。を使用している

デフォルトでは、バッファーに未使用のスペースがさらにある場合でも、バッファーをすぐに送信できます。ただし、リクエストの数を減らしたい場合は、linger.msを0より大きい値に設定できます。

ただし、残存時間を0ミリ秒に設定した場合でも、プロデューサーがリクエストをバッチ処理しようとすることも示されています。

時間内に接近して到着するレコードは、一般にlinger.ms = 0でもバッチ処理されるため、負荷が高い場合、lingerの構成に関係なくバッチ処理が発生します。ただし、これを0より大きい値に設定すると、少量のレイテンシを犠牲にして最大の負荷がかかっていない場合に、リクエストが少なく効率的になります。

直感的には、どのような種類のバッチ処理でもリンガー時間が必要であり、リンガー時間を0にする唯一の方法は、ブローカーの呼び出しを同期させることです。明らかに、残存時間を0に維持しても、送信呼び出しをブロックするほどパフォーマンスに悪影響を与えるようには見えませんが、パフォーマンスにいくらかの影響があるようです。誰かがドキュメントが上で言っていることを明確にすることができますか?

9
Aditya Vivek

ドキュメントは、リンガータイムを0に設定した場合でも、送信スレッドがディスパッチするよりも速く送信されるレコードが追加されるため、負荷がかかるとバッチ処理が少し発生する可能性があると述べています。この設定は、待ち時間を最小限にするために最適化されています。本当に重要なパフォーマンスの測定がスループットである場合、より多くのバッチ処理を行うには、リンガー時間を少し増やします。それが、ドキュメントで達成されていることです。この場合、同期送信とはそれほど関係ありません。 詳細情報

7
dawsaw

linger.ms=0を使用すると、レコードはできるだけ早く送信され、多くのリクエストがあると、パフォーマンスに影響する可能性があります。中/高負荷でlinger.msを増やして少し待機させると、バッチの使用が最適化され、スループットが向上します。これは、レコードサイズにも依存します。大きいほど、バッチに収まりません(batch.sizeデフォルトは16Kb)。

基本的にそれは要求の数とスループットの間のトレードオフであり、実際にはシナリオに依存しますが、すぐに送信してもバッチ処理を十分に活用できませんと圧縮(有効になっている場合)および0/5/10/50/200などのlinger.msの異なる値でいくつかのメトリックを実行することをお勧めします

一般的に、linger.ms > 0を設定することをお勧めします

参照:

8
Paizo