Amazon MSK クラスターに接続する際の問題のトラブルシューティング方法を教えてください。

最終更新日: 2022 年 3 月 1 日

Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターに接続しようとすると、問題が発生します。

解決方法

Amazon MSK クラスターに接続しようとすると、次の種類のエラーが発生することがあります。

  • クラスターの認証タイプに固有ではないエラー
  • TLS クライアント認証に固有のエラー

Amazon MSK クラスターに接続しようとすると、クラスターで有効になっている認証タイプに関係なく、次のいずれかのエラーが表示されることがあります。

状態: CONNECTING 中に接続待ちでタイムアウトしました

このエラーは、クライアントが Apache ZooKeeper 文字列を介して Amazon MSK クラスターに接続しようとして接続が確立できない場合に発生することがあります。このエラーは、Apache ZooKeeper 文字列が間違っている場合にも発生することがあります。

正しくない Apache ZooKeeper 文字列を使用してクラスターに接続すると、次のエラーが表示されます。

./kafka-topics.sh --zookeeper z-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181,z-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181,z-3.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181 --list
[2020-04-10 23:58:47,963] WARN Client session timed out, have not heard from server in 10756ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn)
[2020-04-10 23:58:58,581] WARN Client session timed out, have not heard from server in 10508ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn)
[2020-04-10 23:59:08,689] WARN Client session timed out, have not heard from server in 10004ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn)
Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255)
at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113)
at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858)
at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:321)
at kafka.admin.TopicCommand$.main(TopicCommand.scala:54)
at kafka.admin.TopicCommand.main(TopicCommand.scala)

エラーを解決するには、次の操作を行います。

  • 使用されている Apache ZooKeeper 文字列が正しいことを確認します。
  • Amazon MSK クラスターのセキュリティグループが、Apache ZooKeeper ポート上のクライアントのセキュリティグループからのインバウンドトラフィックを許可していることを確認してください。

60000 ミリ秒後にメタデータにトピック「topicName」が存在しないか、ノード - ( / : ) への接続を確立できませんでした。ブローカーが利用できない可能性があります。(org.apache.kafka.clients.NetworkClient)

このエラーは、次のいずれかの条件で発生することがあります。

  • プロデューサーまたはコンシューマーがブローカーのホストとポートに接続できない。
  • ブローカー文字列が無効。

クライアントまたはブローカーの接続が最初は機能していたのにこのエラーが発生した場合は、ブローカーがダウンしている可能性があります。

データ生成にブローカー文字列を使用して仮想プライベートクラウド (VPC) の外部からクラスターにアクセスしようとすると、次のエラーが表示されます。

./kafka-console-producer.sh --broker-list b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092 --topic test
>a[2020-04-10 23:51:57,668] ERROR Error when sending message to topic test with key: null, value: 1 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms.

ブローカー文字列を使用してデータを消費するために VPC の外部からクラスターにアクセスしようとすると、次のエラーが表示されます。

./kafka-console-consumer.sh --bootstrap-server b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092 --topic test
[2020-04-11 00:03:21,157] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -1 (b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.6.19:9092) could not be established. Broker may not
be available. (org.apache.kafka.clients.NetworkClient)
[2020-04-11 00:04:36,818] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -2 (b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.44.252:9092) could not be established. Broker may
not be available. (org.apache.kafka.clients.NetworkClient)
[2020-04-11 00:05:53,228] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -1 (b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.6.19:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

これらのエラーをトラブルシューティングするには、次の操作を行います。

  • 正しいブローカー文字列とポートが使用されていることを確認してください。
  • ブローカーのダウンが原因でエラーが発生した場合は、Amazon CloudWatch メトリクス ActiveControllerCount をチェックして、その期間中コントローラーがアクティブであったことを確認します。このメトリクスの値は 1 である必要があります。それ以外の値は、クラスター内のブローカーのいずれかが使用できないことを示している可能性があります。また、メトリクス ZooKeeperSessionState をチェックして、ブローカーが Apache ZooKeeper ノードと常に通信していることを確認します。ブローカーが失敗した理由を理解するには、メトリクス KafkaDataLogsDiskUsed を表示し、ブローカーのストレージ容量が不足していないかどうかを確認します。Amazon MSK メトリクスと期待値の詳細については、「CloudWatch でモニタリングするための Amazon MSK メトリクス」を参照してください。
  • エラーの原因がネットワーク構成ではないことを確認してください。Amazon MSK リソースは VPC 内でプロビジョニングされます。したがって、デフォルトでは、クライアントは Amazon MSK クラスターに接続するか、同じ VPC 内のプライベートネットワーク経由でクラスターから生成して消費することが想定されます。VPC の外部からクラスターにアクセスすると、これらのエラーが発生することがあります。クライアントがクラスターと同じ VPC 内にある場合のエラーのトラブルシューティングについては、「AWS 内からクラスターにアクセスできない: ネットワークの問題」を参照してください。VPC 外部からクラスターへのアクセスについては、「VPC 外の Amazon MSK クラスターに接続するにはどうすればよいですか?」を参照してください。

TLS クライアント認証に固有のエラー

TLS クライアント認証が有効になっているクラスターに接続しようとすると、次のエラーが表示されることがあります。これらのエラーは、SSL 関連の設定に関する問題が原因で発生している可能性があります。

ブートストラップブローカー :9094 (id: - ラック: null) 切断

このエラーは、プロデューサーまたはコンシューマーが SSL 設定を渡さずに TLS ポート 9094 経由で TLS 暗号化クラスターに接続しようとした場合に発生することがあります。

プロデューサーがクラスターに接続しようとすると、次のエラーが表示されることがあります。

/kafka-console-producer.sh --broker-list b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 --topic test
>[2020-04-10 18:57:58,019] WARN [Producer clientId=console-producer] Bootstrap broker b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -2 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2020-04-10 18:57:58,342] WARN [Producer clientId=console-producer] Bootstrap broker b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -2 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2020-04-10 18:57:58,666] WARN [Producer clientId=console-producer] Bootstrap broker b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

コンシューマーがクラスターに接続しようとすると、次のエラーが表示されることがあります。

./kafka-console-consumer.sh --bootstrap-server b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 --topic test
[2020-04-10 19:09:03,277] WARN [Consumer clientId=consumer-console-consumer-79102-1, groupId=console-consumer-79102] Bootstrap broker b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2020-04-10 19:09:03,596] WARN [Consumer clientId=consumer-console-consumer-79102-1, groupId=console-consumer-79102] Bootstrap broker b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
[2020-04-10 19:09:03,918] WARN [Consumer clientId=consumer-console-consumer-79102-1, groupId=console-consumer-79102] Bootstrap broker b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 (id: -2 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

このエラーを解決するには、SSL 設定をセットアップします。詳細については、「暗号化を始めるにはどうすればいいですか?」を参照してください。

クラスターでクライアント認証が有効になっている場合は、ACM Private CA 証明書に関連するパラメーターをさらに追加する必要があります。詳しくは、「相互 TLS 認証」を参照してください。

エラー: キーストアの修正時刻を取得できませんでした:

- または -

キーストアをロードできませんでした

トラストストアの設定に問題がある場合、このエラーは、プロデューサーとコンシューマーのトラストストアファイルがロードされるときに発生することがあります。ログには、次のような情報が表示される場合があります。

./kafka-console-consumer --bootstrap-server b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9094 --topic test --consumer.config /home/ec2-user/ssl.config
[2020-04-11 10:39:12,194] ERROR Modification time of key store could not be obtained: /home/ec2-ser/certs/kafka.client.truststore.jks (org.apache.kafka.common.security.ssl.SslEngineBuilder)
java.nio.file.NoSuchFileException: /home/ec2-ser/certs/kafka.client.truststore.jks
[2020-04-11 10:39:12,253] ERROR Unknown error when running consumer: (kafka.tools.ConsoleConsumer$)
Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.KafkaException: org.apache.kafka.common.KafkaException: Failed to load SSL keystore /home/ec2-ser/certs/kafka.client.truststore.jks of type JKS

この場合、ログはトラストストアファイルのロードに関する問題を示しています。SSL 設定で、トラストストアファイルへのパスが正しく設定されていません。このエラーは、SSL 設定でトラストストアファイルの正しいパスを指定することで解決できます。

このエラーは、次の条件によっても発生することがあります。

  • トラストストアファイルまたはキーストアファイルが破損しています。
  • トラストストアファイルのパスワードが正しくありません。

キー: null、値: 0 バイトでトピックテストにメッセージを送信するときにエラーが発生しました。エラー: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

org.apache.kafka.common.errors.SslAuthenticationException: SSL ハンドシェイクに失敗しました

- または -

ノード - ( / : 9094) への接続が原因で認証に失敗しました: SSL ハンドシェイクに失敗しました (org.apache.kafka.clients.NetworkClient)

プロデューサーのキーストア設定に問題があり、認証に失敗すると、次のエラーが発生することがあります。

./kafka-console-producer -broker-list b-2.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094,b-1.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094,b-4.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094 --topic example --producer.config/home/ec2-user/ssl.config
>[2020-04-11 11:13:19,286] ERROR [Producer clientId=console-producer] Connection to node -3 (b-4.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com/172.31.6.195:9094) failed authentication due to: SSL handshake failed (org.apache.kafka.clients.NetworkClient)

コンシューマーのキーストア設定に問題があり、認証に失敗すると、次のエラーが発生することがあります。

./kafka-console-consumer --bootstrap-server b-2.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094,b-1.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094,b-4.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com:9094 --topic example --consumer.config/home/ec2-user/ssl.config
[2020-04-11 11:14:46,958] ERROR [Consumer clientId=consumer-1, groupId=console-consumer-46876] Connection to node -1 (b-2.tlscluster.5818ll.c7.kafka.us-east-1.amazonaws.com/172.31.15.140:9094) failed authentication due to: SSL handshake failed (org.apache.kafka.clients.NetworkClient)
[2020-04-11 11:14:46,961] ERROR Error processing message, terminating consumer process: (kafka.tools.ConsoleConsumer$)
org.apache.kafka.common.errors.SslAuthenticationException: SSL handshake failed

このエラーを解決するには、キーストア関連の設定が正しく設定されていることを確認してください。

java.io.IOException: キーストアのパスワードが正しくありませんでした

このエラーは、キーストアまたはトラストストアのパスワードが正しくない場合に発生することがあります。

このエラーのトラブルシューティングを行うには、次の手順を実行します。

次のコマンドを実行して、キーストアまたはトラストストアのパスワードが正しいかどうかを確認します。

keytool -list -keystore kafka.client.keystore.jks
Enter keystore password:
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 1 entry
schema-reg, Jan 15, 2020, PrivateKeyEntry,
Certificate fingerprint (SHA1): 4A:F3:2C:6A:5D:50:87:3A:37:6C:94:5E:05:22:5A:1A:D5:8B:95:ED

キーストアまたはトラストストアのパスワードが正しくない場合、次のエラーが表示されることがあります。

keytool -list -keystore kafka.client.keystore.jks
Enter keystore password:
keytool error: java.io.IOException: keystore password was incorrect

-v フラグを追加すると、上記のコマンドの詳細出力を表示できます。

keytool -list -v -keystore kafka.client.keystore.jks

また、これらのコマンドを使用して、キーストアが破損していないかどうかを確認することもできます。

このエラーは、エイリアスに関連付けられた秘密キーがプロデューサーとコンシューマーの SSL 設定で正しく設定されていない場合にも発生することがあります。この根本原因を検証するには、次のコマンドを実行します。

keytool -keypasswd -alias schema-reg -keystore kafka.client.keystore.jks
Enter keystore password:
Enter key password for <schema-reg>
New key password for <schema-reg>:
Re-enter new key password for <schema-reg>:

エイリアスのシークレットのパスワード (schema-reg など) が正しい場合、コマンドは秘密キー他の新しいパスワードの入力を求めます。そうしないと、コマンドは失敗し、次のメッセージが表示されます。

keytool -keypasswd -alias schema-reg -keystore kafka.client.keystore.jks
Enter keystore password:
Enter key password for <schema-reg>
keytool error: java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.

また、次のコマンドを実行して、特定のエイリアスがキーストアの一部であるかどうかを確認することもできます。

keytool -list -keystore kafka.client.keystore.jks -alias schema-reg
Enter keystore password:
schema-reg, Jan 15, 2020, PrivateKeyEntry,
Certificate fingerprint (SHA1): 4A:F3:2C:6A:5D:50:87:3A:37:6C:94:5E:05:22:5A:1A:D5:8B:95:ED