web-dev-qa-db-ja.com

kafkaプロデューサーのmax.inflightプロパティを理解する

私はバージョン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を増やすとスループットが大幅に増えるため、知っておく必要があります。

9
Quentin Geff

ユースケースは少し不明確です。順序付けとデータ損失はないが、重複メッセージを許容するかどうかは指定しない。 少なくとも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を使用する必要があります。ご覧のとおり、これにはかなりのパフォーマンスコストが伴います。

12
Mickael Maison

はい、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を設定して、メッセージのバッチの再試行中に追加のメッセージが送信されないようにすることをお勧めします...>

2
zamora14