2017-09-25 18 views
1

私はKafkaバインダーを使用しているSpring Cloud Streamアプリを持っています。 AckMode=BATCHに基づいて自動的にオフセットをコミットしているように見えます(デバッグモードでは文書化されていないので、これを見つけなければなりません)。これは、コミット頻度でブローカに重大なオーバーヘッドを引き起こしています。ここに記載されているようSpring Cloud Streamカフカコンシューマー(時間ベースの自動コミットあり)

enable.auto.commit: true 
auto.commit.interval.ms: 5000 

をまたは5000ミリ秒ackTimeとTIMEの設定を使用するように切り替える::

私は例えば、コミットネイティブカフカの自動車の使用に切り替えるためにどちらかの希望

https://docs.spring.io/spring-kafka/reference/htmlsingle/#committing-offsets

これはspring-cloud-stream-binder-kafkaを使用して可能ですか?あなたはサンプル設定を提供できますか?上記のネイティブ構成は無視されます(構成ブロック内)。

答えて

1

enable.auto.committrueの場合、AckModeは無視されます。しかし、0.10.1.0以上のクライアントを使用しない限り、このモードをサポートするために消費者スレッドでリスナーを呼び出さなければならないので、消費者が遅い場合にブローカはリバランスを実行します。 KIP-62を参照してください。

バージョン1.3以降では、リスナンスの脅威が排除されるため、リスナは常にコンシューマスレッドで呼び出されます(1.3以降は0.11クライアントを使用します)。

また、コミット間隔よりも柔軟性を高めるために、AckMode.TIME,AckMode.COUNTまたはAckMode.COUNT_TIMEを使用することもできます。 COUNT_TIMEは、両方の世界で最高のものを提供しているかもしれません。

時間ベース(またはカウントが多い)のアック戦略では、障害発生後の再配信のリスクが高くなることに注意してください。

+0

これは0.10.2.1クライアントにあります。 Spring Cloud DataflowアプリケーションでAckMode.COUNT_TIMEを設定するにはどうすればよいですか? –

+1

ああ、申し訳ありませんが、私は完全に質問を読んでいませんでした。コンテナのAckmodeは、現在カフカバインダーで設定できません。彼らは2.0になります。たとえば、を使用します。 ... consumer.configuration.enable.auto.offset任意の消費者カフカ小道具を設定する。 –

+0

また、configを取得するためにspring-cloud-stream-kafka-binder 1.1.2 - > 1.2.1をアップグレードする必要がありました。 1.1.2は、enable.auto.commit = falseでハードコードされていました。ありがとう! –

関連する問題