Confluent Cloud に到達できない¶
producer
コンテナで、送信先 TCP ポートが 9092
のネットワークトラフィックをブロックするルールを追加します。これにより、プロデューサーが Confluent Cloud の Kafka クラスターに到達できなくなります。
このシナリオでは、Metrics API からの Confluent Cloud メトリクス、およびクライアントアプリケーションの MBean オブジェクト kafka.producer:type=producer-metrics,client-id=producer-1
からのクライアントメトリクスを確認します。
障害のシナリオの導入¶
producer
コンテナでブローカーとの通信に使用されるポート9092
のトラフィックをブロックするルールを追加します。docker-compose exec producer iptables -A OUTPUT -p tcp --dport 9092 -j DROP
問題の診断¶
Web ブラウザーで Grafana ダッシュボード(http://localhost:3000)に移動し、ユーザー名
admin
およびパスワードpassword
を使用してログインします。Producer Client Metrics
ダッシュボードに移動します。2 分待ってから、以下の点を観察します。Throughput
タブを展開すると表示される、送信バイト数の減少傾向。- 最上部のパネルの
Record error rate
(Kafka MBean 属性のrecord-error-rate
からの値)などが赤色になっています。これは、何か問題があることをわかりやすく示しています。 Free buffer space
パネルのスパークライン(Kafka MBean 属性buffer-available-bytes
からの値)には下降が見られ、Retry rate
(Kafka MBean 属性record-retry-rate
からの値)には上昇が見られます。
これは、プロデューサーがデータを生成していないことを意味します。それにはいくつかの理由が考えられます。
問題を切り分けて、プロデューサーの問題であることを確認するため、Confluent Cloud クラスターの状態、具体的には、リクエストを受け付けていることを確認します。
Confluent Cloud
ダッシュボードに移動します。上部のパネルを確認します。すべて緑色で表示されています。これは、クラスターがリソースの範囲内で問題なく動作していることを意味します。
クライアントの接続の問題については、
Requests (rate)
を確認します。この値が黄色または赤の場合、クライアントの接続の問題は、Confluent Cloud のリクエストレートの上限に達していることが原因の可能性があります。最大値を超えると、リクエストが拒否される可能性があります。詳細については、リクエストレートの上限の一般的なシナリオ を参照してください。どこに問題があるのかについて詳しくは、プロデューサーのログを確認します。プロデューサーのログを取得するには、次の Docker コマンドを使用します。
docker-compose logs producer
以下のようなログメッセージが表示されることを確認します。
producer | [2021-02-11 18:16:12,231] WARN [Producer clientId=producer-1] Got error produce response with correlation id 15603 on topic-partition demo-topic-1-3, retrying (2147483646 attempts left). Error: NETWORK_EXCEPTION (org.apache.kafka.clients.producer.internals.Sender) producer | [2021-02-11 18:16:12,232] WARN [Producer clientId=producer-1] Received invalid metadata error in produce request on partition demo-topic-1-3 due to org.apache.kafka.common.errors.NetworkException: The server disconnected before a response was received.. Going to request metadata update now (org.apache.kafka.clients.producer.internals.Sender)
ログにより、何が起きているかが明確にわかることを確認してください(
Error: NETWORK_EXCEPTION
およびserver disconnected
)。これは想定どおりです。ここで使用した障害のシナリオでは、ブローカーのポートへの送信トラフィックがブロックされたためです。メトリクスだけを見て、すぐに答えにたどり着けるとは限りませんが、想定どおりの動作になっているかどうかを簡単に確認する 1 つの方法です。
障害のシナリオの解決¶
次のコマンドを使用して、先ほど作成した、トラフィックをブロックするルールを削除します。
docker-compose exec producer iptables -D OUTPUT -p tcp --dport 9092 -j DROP
プロデューサーから再びリクエストの送信が開始されるまでに数分かかる場合があります。
トラブルシューティング¶
iptables
ルールの追加後、プロデューサーの出力速度が元に戻りません。docker-compose restart producer
を実行して、プロデューサーを再起動します。このアドバイスは、このチュートリアルについてのみ有効です。