4.7. データ損失を回避するための障害からの復旧
コンシューマーグループ内で障害が発生した場合、Kafka は効果的な検出と回復のために設計されたリバランスプロトコルを提供します。こうした障害による潜在的な影響を最小限に抑えるための重要なストラテジーの 1 つは、max.poll.records
プロパティーを調整して、効率的な処理とシステムの安定性のバランスを取ることです。このプロパティーは、コンシューマーが 1 回のポーリングでフェッチできるレコードの最大数を決定します。max.poll.records
を微調整すると、制御された消費率を維持し、コンシューマーによるコンシューマー自体や Kafka ブローカーへの過負荷を防ぐことができます。
さらに、Kafka は、session.timeout.ms
や heartbeat.interval.ms
などの高度な設定プロパティーを提供します。これらの設定は通常、より特殊なユースケースのために予約されており、標準的なシナリオでは調整が必要ない場合があります。
session.timeout.ms
プロパティーは、コンシューマーがコンシューマーグループ内でアクティブであることを示すために Kafka ブローカーにハートビートを送信しなくてよい最大時間を指定します。コンシューマーがセッションタイムアウト内にハートビートを送信できなかった場合、コンシューマーは非アクティブとみなされます。非アクティブとしてマークされたコンシューマーは、トピックのパーティションのリバランスをトリガーします。session.timeout.ms
プロパティーの設定値が低すぎると誤検出が発生する可能性があり、設定値が高すぎると障害からの回復が遅れる可能性があります。
heartbeat.interval.ms
プロパティーは、コンシューマーが Kafka ブローカーにハートビートを送信する頻度を決定します。連続するハートビート間の間隔が短いため、コンシューマーの障害をより迅速に検出できます。ハートビートの間隔は、セッションタイムアウトより短くする必要があります (通常はセッションタイムアウトの 3 分の 2 にする必要があります)。ハートビートの間隔が短くなると、誤ってリバランスを行う可能性が低くなりますが、ハートビートを頻繁に行うとブローカーリソースのオーバーヘッドが増えます。