Kafkaの再試行メカニズムと確認メカニズム
Kafkaの再試行機能とは、メッセージの送信中に送信に失敗したり異常が発生した場合、Kafkaが自動的にメッセージの再送信を試みることです。再試行機能の目的は、メッセージをターゲットのトピックに確実に送信できるようにすることです。
Kafkaのリトライメカニズムは2つの側面を備えています。
- プロデューサー端での再試行: プロデューサーがメッセージを送信中にネットワーク障害またはブローカーの利用不可などの異常が発生すると、プロデューサーは自動的にメッセージの再送信を試み、正常に送信されるか最大試行回数に達するまで再送信を行います。
- コンシューマ側の再試行: コンシューマがメッセージを消費する際、メッセージ処理中に異常が発生した場合、コンシューマはメッセージを再消費するかどうかを選択できます。コンシューマの設定パラメータを調整することで、最大再試行回数と再試行間隔を設定できます。
Producerはメッセージを送信後、Brokerからの確認応答を待ってから次のメッセージを送信します。これは、メッセージの信頼性と一貫性を確保することを目的としています。
KafkaのAck機制には3つのモードがあります。
- acks=0: 送信後即次のメッセージの送信に移るため、ブローカーへ送信完了の確認を待たないモード。このモードでは、メッセージがブローカーに正しく書き込まれたかProducer側では把握できないため、メッセージが失われる可能性が生じる。
- Producerがメッセージを送信したら、リーダーレプリカがメッセージを正常に書き込み、確認フィードバックを送信するまで待機する必要があります。このモードでは、リーダーレプリカがメッセージの受信を確認しただけで、Producerはメッセージが正常に送信されたと見なします。
- プロデューサーは、メッセージを送信した後にすべての ISR (In-Sync Replica) レプリカがメッセージの書き込みに成功し承認フィードバックを送信するまで待つ必要があります。このモードでは、メッセージの信頼性は最高ですが、遅延時間が長くなります。
ackパラメータを調整することで、信頼性とパフォーマンスのトレードオフを図ることができます。