kafka 0.10.1.1を使用しており、次の3つのプロパティと混同しています。
heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms
heartbeat.interval.ms-これは0.10.1で追加され、ポーリング間でハートビートを送信します。 session.timeout.ms-これは、kafkaへの要求がなく、ポーリングごとにリセットされる場合にリバランスを開始します。max.poll.interval。 ms-これはアンケート全体です。
しかし、いつkafkaがリバランスを開始しますか?なぜこれら3つが必要なのですか?すべてのデフォルト値は何ですか?
ありがとう
Kafka 0.10.1.0以上で、各コンシューマインスタンスが機能するために2つのスレッドを使用している場合を想定しています。1つはpoll
が呼び出されるユーザースレッド、もう1つはハートビートスレッドですハートビートを特別に処理します。
session.timeout.ms
はハートビートスレッド用です。この時間間隔が経過する前にコーディネーターがコンシューマーからハートビートを取得できない場合、コーディネーターはコンシューマーを失敗としてマークし、新しいラウンドのリバランスをトリガーします。
max.poll.interval.ms
はユーザースレッド用です。メッセージ処理ロジックが重すぎてこの時間間隔よりも費用がかかる場合、コーディネーターは明示的にコンシューマーをグループから離脱させ、新しいラウンドのリバランスをトリガーします。
heartbeat.interval.ms
は、他の健康な消費者にリバランスをより速く認識させるために使用されます。コーディネーターがリバランスをトリガーした場合、他のコンシューマーは、REBALANCE_IN_PROGRESS
カプセル化された例外。ハートビートリクエストがより速く送信されると、消費者はグループに再参加する必要があることを早く認識します。
推奨値:session.timeout.ms
:比較的低い値、たとえば10秒。max.poll.interval.ms
:処理要件に基づいてheartbeat.interval.ms
:比較的低い値、session.timeout.ms
より明確にするだけで、ハートビートスレッド(同じプロセスでPoll
関数を呼び出すユーザースレッドと共に)は、「heartbeat.interval.ms」時間ごとにコーディネーターにハートビートを送信し、コーディネーターはコンシューマーをマークします。 「session.timeout.ms」または「max.poll.interval.ms」を超える場合、デッドとしてユーザースレッドで。