私は私のKafkaプロデューサーのさまざまな理由でタイムアウトの例外を得ます。現在プロデューサ構成のデフォルト値をすべて使用しています。
次のタイムアウト例外を参照しています。
org.apache.kafka.common.errors.timeoutException:60000ミリ秒後にメタデータを更新できませんでした。
org.apache.kafka.common.errors.TimeoutException:期限切れ1トピック1-0のレコード - 1-0:30001 MSが最後の追加から過ぎました
私は次の質問があります:
これらのタイムアウト例外の一般的な原因は何ですか?
タイムアウト例外を処理するための一般的なガイドラインは何ですか?
タイムアウト例外は、リトリブルの例外を再試行しても安全ですか?
Kafka v2.1.0とJava 11を使用しています。
前もって感謝します。
デフォルトKafka Config Value)は、一般的な状況下では、タイムアウトには実行されるべきではありません。これらの問題は通常の間のフレーク/非損失のあるネットワークを指しています。プロデューサーとブローカー。
あなたが得る例外、Failed to update metadata
、通常、ブローカーがプロデューサによって到達できないことを意味し、その効果はそれがメタデータを取得できないということです。
あなたの2番目の質問のために、Kafkaが自動的に再試行して、ブローカーによって完全に肯定的ではなかったメッセージを送信します。アプリケーションサイドですが、1以上のタイムアウトを押すと、再試行はおそらく違いの多くを作ることはできません。とにかくブローカーとの根本的なネットワーク/到達可能性の問題を解決する必要があります。
私の経験では、通常、ネットワークの問題は次のとおりです。
nc -z broker-ip 9092
を試してください)。「これらのタイムアウト例外の一般的な原因は何ですか?」
私が以前に見た最も一般的な原因は、停止したメタデータ情報のためでした。ブローカーがダウンしました、そしてそのブローカーのトピックパーティションは他のブローカーに失敗しました。ただし、トピックのメタデータ情報は正しく更新されておらず、クライアントはまだ失敗したブローカーと通信してメタデータ情報を取得するか、メッセージを公開しようとします。それはタイムアウト例外を引き起こします。
NetWowRKの接続の問題。これはtelnet broker_Host borker_port
と診断できます。
ブローカーが過負荷になります。これは、ブローカーがハイワークロードで飽和している場合、またはトピックパーティションが多すぎる場合に発生する可能性があります。
タイムアウト例外を処理するために、一般的な慣行は次のとおりです。
ブローカー側の問題を除外します。トピックパーティションが完全に複製されていることを確認し、ブローカーはオーバーロードされていません
ホスト名の解決やネットワーク接続の問題がある場合
request.timeout.ms
、delivery.timeout.ms
などのチューンパラメータは、デフォルト値がほとんどの場合にうまく機能するということでした。