Confluent Cloud に到達できない

producer コンテナで、送信先 TCP ポートが 9092 のネットワークトラフィックをブロックするルールを追加します。これにより、プロデューサーが Confluent Cloud の Kafka クラスターに到達できなくなります。

このシナリオでは、Metrics API からの Confluent Cloud メトリクス、およびクライアントアプリケーションの MBean オブジェクト kafka.producer:type=producer-metrics,client-id=producer-1 からのクライアントメトリクスを確認します。

障害のシナリオの導入

  1. producer コンテナでブローカーとの通信に使用されるポート 9092 のトラフィックをブロックするルールを追加します。

    docker-compose exec producer iptables -A OUTPUT -p tcp --dport 9092 -j DROP
    

問題の診断

  1. Web ブラウザーで Grafana ダッシュボード(http://localhost:3000)に移動し、ユーザー名 admin およびパスワード password を使用してログインします。

  2. 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 からの値)には上昇が見られます。

    これは、プロデューサーがデータを生成していないことを意味します。それにはいくつかの理由が考えられます。

    プロデューサーの接続の喪失

  3. 問題を切り分けて、プロデューサーの問題であることを確認するため、Confluent Cloud クラスターの状態、具体的には、リクエストを受け付けていることを確認します。Confluent Cloud ダッシュボードに移動します。

  4. 上部のパネルを確認します。すべて緑色で表示されています。これは、クラスターがリソースの範囲内で問題なく動作していることを意味します。

    Confluent Cloud パネル

    クライアントの接続の問題については、Requests (rate) を確認します。この値が黄色または赤の場合、クライアントの接続の問題は、Confluent Cloud のリクエストレートの上限に達していることが原因の可能性があります。最大値を超えると、リクエストが拒否される可能性があります。詳細については、リクエストレートの上限の一般的なシナリオ を参照してください。

  5. どこに問題があるのかについて詳しくは、プロデューサーのログを確認します。プロデューサーのログを取得するには、次の Docker コマンドを使用します。

    docker-compose logs producer
    
  6. 以下のようなログメッセージが表示されることを確認します。

    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 つの方法です。

障害のシナリオの解決

  1. 次のコマンドを使用して、先ほど作成した、トラフィックをブロックするルールを削除します。

    docker-compose exec producer iptables -D OUTPUT -p tcp --dport 9092 -j DROP
    
  2. プロデューサーから再びリクエストの送信が開始されるまでに数分かかる場合があります。

トラブルシューティング

  1. iptables ルールの追加後、プロデューサーの出力速度が元に戻りません。

    docker-compose restart producer を実行して、プロデューサーを再起動します。このアドバイスは、このチュートリアルについてのみ有効です。