2017-01-16 11 views
1

私はKafkaプロデューサーを設定しようとしています。異なる値間の最良の相関関係を理解し​​ようとしています。Kafka max.request.sizeとbuffer.memoryとsend.buffer.bytesとの比較

私が理解するところでは、これらの値は次の規則に従わなければなりません: max.request.size> = buffer.memory> = send.buffer.bytes。これらの規則の外に値を設定することは意味をなさないでしょう。私は正しいですか?これらの値を設定するための最良のガイドラインルールは何ですか(max.request.size = Xと仮定します)?

また、ack = 1と仮定すると、max.in.flight.requests.per.connectionは意味を持ちますか?

ありがとうございます!

答えて

1

これら3つは互いに関連していません。実際には、それらのデフォルト値は次のとおりです。

max.request.size:1048576

buffer.memory:33554432

send.buffer.bytes:だから131072

」 max.request.size> = buffer.memory> = send.buffer.bytes "は保持されません。

max.in.flight.requests.per.connectionは、プロデューサがメッセージの送信順序を尊重すべきかどうかを制御します。これはackとは関係ありません。

+0

私は何かが不足しています: プロデューサーが各メッセージの後にackを待つ場合、どのように注文を失うことができますか? (私は最初に返信する前に別のメッセージを送信しません) サイズの問題については、send.bufferがなぜ小さいのか理解していますが、なぜ要求サイズより大きなバッファを保持するのでしょうか?さらに、max.request.sizeとbatch.sizeは冗長ではありませんか? (なぜ私は1回のリクエストでそれを送ることができない場合、より大きなバッチサイズを保持するのでしょうか?また、バッチサイズが小さい場合には大きなリクエストを構成するのはなぜですか?つまり、リクエストはbatch.sizeによって送信されます)? – sternr

+0

If 2つのバッチが同じパーティションに送信され、何らかの理由で最初に失敗し、再試行(再試行を有効にすると仮定します)が2番目のバッチが成功した場合、最初のバッチのメッセージは、 – amethystic

+1

プロデューサは、メッセージが蓄積されるバッファを使用します。後で別のIOスレッドがバッファからメッセージを取り出してPRODUCE要求にラップするので、このバッファをかなり大きくします。そうすることで、IOスレッドは常に待機するのではなく何かを行うことができます。 – amethystic

関連する問題