Passer au contenu

Comment résoudre les erreurs de connexion pour mon cluster Amazon MSK ?

Lecture de 8 minute(s)
0

Des problèmes surviennent lorsque j’essaie de me connecter à mon cluster Amazon Managed Streaming pour Apache Kafka (Amazon MSK).

Résolution

Suivez ces étapes de résolution de problèmes pour l'erreur que vous avez reçue.

« java.lang.OutOfMemoryError: Java heap space »

L'erreur précédente peut s'afficher lorsque vous exécutez une commande pour des opérations de cluster sans le fichier de propriétés du client. Pour résoudre cette erreur, veillez à inclure les propriétés en fonction du type d’authentification dans le fichier client.properties.

Exemple de commande avec uniquement un port d'authentification Gestion des identités et des accès AWS (AWS IAM) :

./kafka-topics.sh --create --bootstrap-server $BOOTSTRAP:9098 --replication-factor 3 --partitions 1 --topic TestTopic

Exemple de commande avec un port d'authentification IAM et le fichier de propriétés du client :

./kafka-topics.sh --create --bootstrap-server $BOOTSTRAP:9098  --command-config client.properties --replication-factor 3 --partitions 1 --topic TestTopic

« org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: createTopics »

L'erreur précédente peut s'afficher en cas de mauvaise configuration du réseau entre l'application cliente et le cluster Amazon MSK.

Pour résoudre ce problème, exécutez la commande telnet suivante pour tester la connectivité depuis l’ordinateur client :

telnet bootstrap-broker port-number

Remarque : Remplacez bootstrap-broker par l’une des adresses d’agent de votre cluster Amazon MSK. Remplacez port-number par la valeur de port en fonction de l’authentification activée pour votre cluster.

Si l’ordinateur client peut accéder aux agents, il n’y a aucun problème de connexion. Si l’ordinateur client ne peut pas accéder aux agents, vérifiez les paramètres de configuration de la connectivité réseau. Vérifiez les règles entrantes et sortantes du groupe de sécurité.

« org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test_topic] »

L'erreur précédente peut s'afficher lorsque vous utilisez l'authentification IAM et que votre stratégie d'accès bloque les opérations de rubrique, telles que WriteData et ReadData.

Remarque : Les limites d’autorisation et les politiques de contrôle des services (SCP) bloquent également la tentative d’un utilisateur de se connecter au cluster sans l’autorisation requise.

Si vous utilisez une authentification qui n'est pas IAM, vérifiez si vous avez ajouté des listes de contrôle d'accès (ACL) au niveau des rubriques qui bloquent les opérations.

Pour répertorier les ACL appliquées à une rubrique, exécutez la commande suivante :

bin/kafka-acls.sh --bootstrap-server $BOOTSTRAP:PORT --command-config adminclient-configs.conf --list --topic testtopic

« ZooKeeperClientTimeoutException »

L’erreur précédente peut s’afficher lorsque le client essaie de se connecter au cluster via la chaîne Apache ZooKeeper et que la connexion ne s’est pas établie. Vous pouvez également recevoir cette erreur lorsque la chaîne Apache ZooKeeper est incorrecte.

Exemple de chaîne Apache Zookeeper incorrecte :

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

Exemple de sortie :

[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 ce problème, procédez comme suit :

  • Vérifiez que vous avez utilisé la chaîne Apache ZooKeeper appropriée.
  • Assurez-vous que le groupe de sécurité de votre cluster Amazon MSK autorise le trafic entrant issu du groupe de sécurité du client sur les ports Apache ZooKeeper.
  • Si vos nœuds Apache ZooKeeper sont associés à un groupe de sécurité différent de celui des agents MSK ou du client, vérifiez vos exigences de configuration. Le groupe de sécurité du client doit autoriser la connectivité au groupe de sécurité associé aux nœuds ZooKeeper sur les ports ZooKeeper requis. Les règles entrantes du groupe de sécurité de l'interface réseau ZooKeeper doivent autoriser la connectivité depuis le client.

« Broker may not be unavailable »

<topicName><node-id><broker-host><broker-ip><port>« Topic not present in metadata after 60000 ms. or Connection to node - (/:) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) »

L'erreur précédente peut s'afficher lorsque l'une des conditions suivantes est vraie :

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

Si vous recevez cette erreur alors que la connectivité du client ou de l’agent fonctionnait initialement, il est possible que l’agent ne soit pas disponible.

Cette erreur peut également se produire lorsque vous utilisez la chaîne de l’agent pour accéder au cluster depuis l'extérieur du cloud privé virtuel (VPC).

Exemple de chaîne d’agent de producteur :

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

Exemple de sortie :

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

Exemple de chaîne d’agent de consommateur :

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

Exemple de sortie :

[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 ce problème, procédez comme suit :

  • Assurez-vous d'utiliser la chaîne et le port d’agent appropriés.
  • Si l’agent n'est pas disponible pour les clusters gérés par ZooKeeper, vérifiez la métrique ActiveControllerCount Amazon CloudWatch. Puis, vérifiez que le contrôleur était actif pendant cette période. Si la valeur de la métrique n'est pas 1, il est possible que l'un des agents du cluster ne soit pas disponible. Utilisez la statistique de somme sur une période d'une minute pour afficher la métrique.
  • Vérifiez la métrique ZooKeeperSessionState pour confirmer que les agents sont en communication continue avec les nœuds Apache ZooKeeper.
  • Pour connaître la raison de l’échec de l’agent, vérifiez la métrique KafkaDataLogsDiskUsed pour déterminer si l’agent a manqué d'espace de stockage. Pour plus d'informations, consultez la section Métriques Amazon MSK pour la surveillance des agents standard avec CloudWatch.
  • Vérifiez si la configuration réseau est à l'origine du problème. Les ressources Amazon MSK sont provisionnées au sein du VPC. Vous devez vous connecter au cluster Amazon MSK ou la production doit se produire à partir du cluster via un réseau privé dans le même VPC. Pour plus d'informations, consultez la section Impossible d'accéder au cluster depuis AWS : problèmes de réseau. Consultez également la page **Comment me connecter à mon cluster Amazon MSK depuis le réseau AWS mais depuis l'extérieur de l'Amazon VPC du cluster ?**dans la FAQ relative à Amazon MSK.

« Rubrique non présente dans les métadonnées »

« org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms »

L'erreur précédente peut s'afficher lorsque la rubrique sur laquelle vous avez essayé d'écrire n'existe pas dans Amazon MSK. Vérifiez si la rubrique existe dans votre cluster Amazon MSK. Vérifiez que vous avez utilisé la chaîne et le port d’agent appropriés dans la configuration de votre client. Si la rubrique n'existe pas, créez-la dans Amazon MSK ou définissez auto.create.enable sur vrai dans la configuration de votre cluster.

Remarque : Lorsque auto.create.enable est défini sur vrai, les rubriques sont automatiquement créées.

Cette erreur peut également s'afficher lorsque la rubrique existe mais pas la partition. Par exemple, vous disposez d’une partition [0] unique et votre producteur tente un envoi vers la partition [1].

Assurez-vous que le groupe de sécurité de votre cluster Amazon MSK autorise le trafic entrant depuis le groupe de sécurité de l'application client sur les ports requis.

Si l'erreur survient soudainement alors que le système fonctionnait auparavant, effectuez les actions suivantes pour vérifier le statut de vos agents Amazon MSK :

  • Pour les clusters gérés par ZooKeeper, vérifiez la métrique ActiveControllerCount. La valeur doit être 1. Si la métrique présente une autre valeur, l'un des agents du cluster n'est pas disponible. Utilisez la statistique de somme sur une période d'une minute pour afficher la métrique.
  • Vérifiez la métrique ZooKeeprSessionState pour confirmer que les agents sont en communication continue avec les nœuds ZooKeeper.
  • Surveillez la métrique KafkaDataLogsDiskUsed pour vous assurer que l’agent n’a pas manqué d'espace de stockage.

Vérifiez que vous n'avez pas tenté d'accéder au cluster depuis l'extérieur du VPC sans la configuration appropriée. Par défaut, les ressources Amazon MSK sont provisionnées au sein du VPC. Vous devez vous connecter via un réseau privé dans le même VPC.

Si vous essayez d'accéder au cluster depuis l'extérieur du VPC, assurez-vous de définir les configurations réseau nécessaires pour le service AWS. Par exemple, AWS Client VPN ou AWS Direct Connect.

Informations connexes

Se connecter à un cluster provisionné Amazon MSK

Comment résoudre les problèmes d'authentification et d'autorisation lorsque j'utilise mon cluster Amazon MSK avec l'authentification SASL/SCRAM activée ?

Résoudre des problèmes liés à votre cluster Amazon MSK

AWS OFFICIELA mis à jour il y a 7 mois