私はバージョン1.0.0-cp1のKafkaクラスターのベンチで作業しています。
順序保証とデータ損失なしで可能な最大スループットに焦点を当てている私のベンチの一部(1つのパーティションのみのトピック)では、max.in.flight.requests.per.connection
プロパティを1
に設定する必要がありますか?
私は読んだ この記事
私は、retries
プロパティを使用してプロデューサーで再試行機能を有効にする場合にのみ、max.in.flightを1に設定する必要があることを理解しています。
私の質問をする別の方法:Kafkaでの順序を保証するには、1つのパーティション+ retries = 0(プロデューサープロップ)で十分ですか?
Max.in.flightを増やすとスループットが大幅に増えるため、知っておく必要があります。
ユースケースは少し不明確です。順序付けとデータ損失はないが、重複メッセージを許容するかどうかは指定しない。 少なくとも1回(QoS 1)または正確に1回 -)
どちらの方法でも、1.0.0を使用していて、単一のパーティションのみを使用しているため、Producer構成を微調整する代わりに、Idempotent Producerを確認する必要があります。これにより、順序を適切かつ効率的に保証し、データの損失を防ぐことができます。
ドキュメントから:
べき等配信は、単一のプロデューサの存続期間中にメッセージが特定のトピックパーティションに1回だけ配信されることを保証します。
初期のべき等プロデューサーはmax.in.flight.requests.per.connection
を1に強制していました(同じ理由で)が、最新のリリースではmax.in.flight.requests.per.connection
を最大5に設定して使用できるようになり、保証を維持しています。
べき等プロデューサーを使用すると、より強力な配信セマンティクス(少なくとも1回ではなく正確に1回)が得られるだけでなく、パフォーマンスも向上する可能性があります。
あなたの質問に戻る
はい、べき等(またはトランザクション)プロデューサーがなくても、データ損失(QoS 1)を回避して順序を保持したい場合は、max.in.flight.requests.per.connection
を1に設定し、retries
を許可してacks=all
を使用する必要があります。ご覧のとおり、これにはかなりのパフォーマンスコストが伴います。
はい、max.in.flight.requests.per.connection
プロパティを1
に設定する必要があります。あなたが読んだ記事で、それは著者が書いた最初の間違い(現在は修正済み)でした:
max.in.flights.requests.per.session
Kafkaのドキュメントにはありません。
このエラッタは、おそらく本"Kafka The Definitive Guide"(1st edition)に由来します。52ページで読むことができます。
<...したがって、順序の保証が重要な場合は、
in.flight.requests.per.session=1
を設定して、メッセージのバッチの再試行中に追加のメッセージが送信されないようにすることをお勧めします...>