web-dev-qa-db-ja.com

Kafkaプロデューサーのタイムアウト例外を処理するためのガイドライン?

私は私のKafkaプロデューサーのさまざまな理由でタイムアウトの例外を得ます。現在プロデューサ構成のデフォルト値をすべて使用しています。

次のタイムアウト例外を参照しています。

org.apache.kafka.common.errors.timeoutException:60000ミリ秒後にメタデータを更新できませんでした。

org.apache.kafka.common.errors.TimeoutException:期限切れ1トピック1-0のレコード - 1-0:30001 MSが最後の追加から過ぎました

私は次の質問があります:

  1. これらのタイムアウト例外の一般的な原因は何ですか?

    1. 一時的なネットワークの問題
    2. サーバーの問題?もしそうなら、どのようなサーバーの問題を発行しますか?
  2. タイムアウト例外を処理するための一般的なガイドラインは何ですか?

    1. Kafka AP​​Iが再試行を行うように 'Retries' Configを設定しますか?
    2. 'request.timeout.ms'または 'max.block.ms'を増やす?
    3. 例外をキャッチして、アプリケーションレイヤの再試行がメッセージを送信するが、これはメッセージが順序から送信されるようにASYNC SENDで難しいようです。
  3. タイムアウト例外は、リトリブルの例外を再試行しても安全ですか?

Kafka v2.1.0とJava 11を使用しています。

前もって感謝します。

7
xabhi

デフォルトKafka Config Value)は、一般的な状況下では、タイムアウトには実行されるべきではありません。これらの問題は通常の間のフレーク/非損失のあるネットワークを指しています。プロデューサーとブローカー。

あなたが得る例外、Failed to update metadata、通常、ブローカーがプロデューサによって到達できないことを意味し、その効果はそれがメタデータを取得できないということです。

あなたの2番目の質問のために、Kafkaが自動的に再試行して、ブローカーによって完全に肯定的ではなかったメッセージを送信します。アプリケーションサイドですが、1以上のタイムアウトを押すと、再試行はおそらく違いの多くを作ることはできません。とにかくブローカーとの根本的なネットワーク/到達可能性の問題を解決する必要があります。

私の経験では、通常、ネットワークの問題は次のとおりです。

  • ポート9092は、プロデューサ側またはブローカー側のどちらか、または中央のどこかにあるファイアウォールによってブロックされています(プロデューサを実行しているサーバーからnc -z broker-ip 9092を試してください)。
  • DNSの解像度が壊れているので、ポートが開いている場合でも、プロデューサはIPアドレスに解決できません。
2
mjuarez

「これらのタイムアウト例外の一般的な原因は何ですか?」

  1. 私が以前に見た最も一般的な原因は、停止したメタデータ情報のためでした。ブローカーがダウンしました、そしてそのブローカーのトピックパーティションは他のブローカーに失敗しました。ただし、トピックのメタデータ情報は正しく更新されておらず、クライアントはまだ失敗したブローカーと通信してメタデータ情報を取得するか、メッセージを公開しようとします。それはタイムアウト例外を引き起こします。

  2. NetWowRKの接続の問題。これはtelnet broker_Host borker_portと診断できます。

  3. ブローカーが過負荷になります。これは、ブローカーがハイワークロードで飽和している場合、またはトピックパーティションが多すぎる場合に発生する可能性があります。

タイムアウト例外を処理するために、一般的な慣行は次のとおりです。

  1. ブローカー側の問題を除外します。トピックパーティションが完全に複製されていることを確認し、ブローカーはオーバーロードされていません

  2. ホスト名の解決やネットワーク接続の問題がある場合

  3. request.timeout.msdelivery.timeout.msなどのチューンパラメータは、デフォルト値がほとんどの場合にうまく機能するということでした。

2
yuyang