Comment résoudre les problèmes de connexion à mon cluster Amazon MSK ?

Dernière mise à jour : 01/03/2022

Je rencontre des problèmes lorsque j'essaie de me connecter à mon cluster Amazon Managed Streaming for Apache Kafka (Amazon MSK)

Résolution

Lorsque vous essayez de vous connecter à un cluster Amazon MSK, les types d'erreurs suivants peuvent s'afficher :

  • Les erreurs qui ne sont pas spécifiques au type d'authentification du cluster
  • Les erreurs spécifiques à l'authentification du client TLS

Lorsque vous essayez de vous connecter à votre cluster Amazon MSK, vous pouvez rencontrer 'une des erreurs suivantes, quel que soit le type d'authentification activé pour votre cluster :

L'attente de la connexion a été interrompue pendant l'état : CONNEXION EN COURS

Vous pouvez rencontrer cette erreur lorsque le client essaie de se connecter au cluster Amazon MSK à travers la chaîne Apache ZooKeeper et que la connexion ne peut pas être établie. Cette erreur peut également se produire lorsque la chaîne Apache ZooKeeper est incorrecte.

Vous rencontrez l'erreur suivante lorsque vous utilisez la chaîne Apache ZooKeeper incorrecte pour vous connecter au cluster :

./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)

Pour résoudre cette erreur, procédez comme suit :

  • Vérifiez que la chaîne Apache ZooKeeper utilisée est correcte.
  • Assurez-vous que le groupe de sécurité de votre cluster Amazon MSK autorise le trafic entrant provenant du groupe de sécurité du client sur les ports Apache ZooKeeper.

La rubrique « TopicName » n'est pas présente dans les métadonnées après 60 000 ms ou la connexion au nœud - ( / : ) n’a pas pu être établie. L'agent peut ne pas être disponible. (org.apache.kafka.clients.NetworkClient)

Vous pouvez rencontrer cette erreur dans l'une des conditions suivantes :

  • Le producteur ou le consommateur ne peut pas se connecter à l'hôte et au port de l'agent.
  • La chaîne de l’agent n'est pas valide.

Si vous rencontrez cette erreur alors que la connectivité du client ou de l'agent fonctionnait initialement, il se peut que l'agent soit en panne.

Vous rencontrez l'erreur suivante lorsque vous essayez d’accéder au cluster depuis l'extérieur du cloud privé virtuel (VPC) à l'aide de la chaîne d'agent pour produire des données :

./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.

Vous rencontrez l'erreur suivante lorsque vous essayez d'accéder au cluster depuis l'extérieur du VPC pour consommer des données à l'aide de la chaîne d’agent :

./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)

Pour résoudre ces erreurs, procédez comme suit :

  • Assurez-vous que la chaîne et le port d'agent sont utilisés.
  • Si l'erreur est due à une panne de l’agent, consultez la métrique Amazon CloudWatch ActiveControllerCount pour vérifier que le contrôleur était actif pendant toute la période. La valeur de cette métrique doit être 1. Toute autre valeur peut indiquer que l'un des agents du cluster n'est pas disponible. Vérifiez également la métrique ZooKeeperSessionState pour confirmer que les agents communiquaient en permanence avec les nœuds Apache ZooKeeper. Pour comprendre pourquoi l’agent a échoué, affichez la métrique KafkaDataLogsDiskUsed et vérifiez si l'agent a manqué d'espace de stockage. Pour plus d'informations sur les métriques Amazon MSK et les valeurs attendues, consultez les métriques Amazon MSK pour la surveillance avec CloudWatch.
  • Assurez-vous que l'erreur n'est pas due à la configuration du réseau. Les ressources Amazon MSK sont allouées dans le VPC. Par conséquent, par défaut, les clients sont censés se connecter au cluster Amazon MSK ou produire et consommer à partir du cluster sur un réseau privé dans le même VPC. Si vous accédez au cluster depuis l'extérieur du VPC, vous pouvez rencontrer ces erreurs. Pour plus d'informations sur la résolution des erreurs lorsque le client se trouve dans le même VPC que le cluster, consultez Impossible d'accéder au cluster depuis AWS : problèmes de réseau. Pour plus d'informations sur l'accès au cluster depuis l'extérieur du VPC, consultez Comment me connecter à mon cluster Amazon MSK en dehors du VPC ?

Les erreurs spécifiques à l'authentification du client TLS

Vous pouvez rencontrer les erreurs suivante lorsque vous essayez de vous connecter à ce cluster pour lequel l'authentification du client TLS est activée. Ces erreurs peuvent être dues à des problèmes de configuration liés à SSL.

Agent d'amorçage : 9094 (id : - rack : nul) déconnecté

Vous pouvez rencontrer cette erreur lorsque le producteur ou le consommateur essaie de se connecter à un cluster chiffré TLS à travers le port TLS 9094 sans passer la configuration SSL.

Vous pouvez rencontrer l’erreur suivante lorsque le producteur essaie de se connecter au cluster :

/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)

Vous pouvez rencontrer l’erreur suivante lorsque le consommateur essaie de se connecter au cluster :

./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)

Pour résoudre cette erreur, configurez la configuration SSL. Pour plus d'informations, consultez Comment démarrer avec le chiffrement ?

Si l'authentification client est activée pour votre cluster, vous devez ajouter des paramètres supplémentaires liés à votre certificat ACM Private CA. Pour plus d'informations, consultez Authentification TLS mutuelle.

ERREUR L'heure de modification du keystore (magasin de clés) n'a pas pu être obtenue :

-ou-

Échec du chargement de keystore

En cas de problèmes avec la configuration du truststore (magasin de clés de confiance), cette erreur peut se produire lorsque les fichiers du truststore sont chargés pour le producteur et le consommateur. Vous pouvez afficher des informations similaires aux suivantes dans les journaux :

./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

Dans ce cas, les journaux indiquent un problème lors du chargement du fichier du truststore. Le chemin d'accès au fichier du truststore est mal configuré dans la configuration SSL. Vous pouvez résoudre cette erreur en fournissant le chemin d'accès correct pour le fichier du truststore dans la configuration SSL.

Cette erreur peut également se produire en raison des conditions suivantes :

  • Votre fichier truststore ou keystore est corrompu.
  • Le mot de passe du fichier truststore est incorrect.

Erreur lors de l'envoi d'un message au test de rubrique avec la clé : nulle, valeur : 0 octets avec erreur : (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

org.apache.kafka.common.errors.SslAuthenticationException : échec du handshake SSL

-ou-

Connexion au nœud - ( / :9094) échec de l'authentification en raison de : échec du handshake SSL (org.apache.kafka.clients.NetworkClient)

Vous pouvez rencontrer l'erreur suivante lorsqu'il y a un problème lié à la configuration du keystore du producteur qui mène à un échec de l'authentification :

./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)

Vous pouvez rencontrer l'erreur suivante lorsqu'il y a un problème lié à la configuration du keystore du consommateur qui mène à un échec de l'authentification :

./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

Pour résoudre cette erreur, assurez-vous d'avoir correctement configuré la configuration associée au keystore.

java.io.IOException : le mot de passe du keystore était incorrect

Vous pouvez rencontrer cette erreur lorsque le mot de passe du keystore ou du truststore est incorrect.

Pour résoudre cette erreur, procédez comme suit :

Vérifiez si le mot de passe du keystore ou du truststore est correct en exécutant la commande suivante :

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

Si le mot de passe du keystore ou du truststore est incorrect, vous pouvez rencontrer l'erreur suivante :

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

Vous pouvez afficher la sortie verbeuse de la commande ci-dessus en ajoutant l'indicateur -v :

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

Vous pouvez également utiliser ces commandes pour vérifier si le keystore est corrompu.

Vous pouvez également rencontrer cette erreur lorsque la clé secrète associée à l'alias est mal configurée dans la configuration SSL du producteur et du consommateur. Pour en vérifier l'origine, exécutez la commande suivante :

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>:

Si votre mot de passe pour le secret de l'alias (exemple : schema-reg) est correct, la commande vous demande de saisir un nouveau mot de passe pour la clé secrète autre. Dans le cas contraire, la commande échoue avec le message suivant :

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.

Vous pouvez également vérifier si un alias particulier fait partie du keystore en exécutant la commande suivante :

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