¿Cómo soluciono los problemas al conectarme a mi clúster de Amazon MSK?

Última actualización: 01/03/2022

Tengo problemas cuando intento conectarme a mi clúster de Amazon Managed Streaming for Apache Kafka (Amazon MSK).

Resolución

Cuando intente conectarse a un clúster de Amazon MSK, pueden aparecer los siguientes tipos de errores:

  • Errores que no son específicos del tipo de autenticación del clúster
  • Errores específicos de la autenticación de clientes TLS

Cuando intente conectarse a su clúster de Amazon MSK, puede aparecer uno de los siguientes errores, independientemente del tipo de autenticación habilitado para su clúster:

Se agotó el tiempo de espera de la conexión mientras estaba en estado: CONECTANDO

Este error puede aparecer cuando el cliente intenta conectarse al clúster de Amazon MSK a través de la cadena de Apache ZooKeeper, y la conexión no puede establecerse. Este error también puede producirse cuando la cadena de Apache ZooKeeper es incorrecta.

El siguiente error aparece cuando utiliza la cadena de Apache ZooKeeper incorrecta para conectarse al clúster:

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

Para resolver este error, haga lo siguiente:

  • Compruebe que la cadena de Apache ZooKeeper utilizada sea correcta.
  • Asegúrese de que el grupo de seguridad de su clúster de Amazon MSK permita el tráfico entrante del grupo de seguridad del cliente en los puertos de Apache ZooKeeper.

El tema 'topicName' no está presente en los metadatos después de 60 000 ms. o No se pudo establecer la conexión al nodo ( / : ). Es posible que el agente no esté disponible. (org.apache.kafka.clients.NetworkClient)

Este error puede aparecer en cualquiera de las siguientes condiciones:

  • El productor o el consumidor no pueden conectarse al host y al puerto del agente.
  • La cadena del agente no es válida.

Si obtiene este error a pesar de que la conectividad del cliente o del agente funcionaba inicialmente, es posible que el agente no funcione.

Se obtiene el siguiente error cuando se intenta acceder al clúster desde fuera de la nube virtual privada (VPC) mediante la cadena de agentes para producir datos:

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

Se obtiene el siguiente error cuando se intenta acceder al clúster desde fuera de la VPC para consumir datos mediante la cadena de agente:

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

Para solucionar estos errores, haga lo siguiente:

  • Asegúrese de que se utilice la cadena de agentes y el puerto correctos.
  • Si el error se debe a que el agente no funciona, compruebe la métrica ActiveControllerCount de Amazon CloudWatch para verificar que el controlador estuvo activo durante todo el periodo. El valor de esta métrica debe ser 1. Cualquier otro valor puede indicar que uno de los agentes del clúster no está disponible. Además, compruebe la métrica ZooKeeperSessionState para confirmar que los agentes se comuniquen constantemente con los nodos de Apache ZooKeeper. Para entender por qué falló el agente, consulte la métrica KafkaDataLogsDiskUsed y compruebe si el agente se quedó sin espacio de almacenamiento. Para obtener más información sobre las métricas de Amazon MSK y los valores esperados, consulte Métricas de Amazon MSK para la supervisión con CloudWatch.
  • Asegúrese de que el error no se deba a la configuración de la red. Los recursos de Amazon MSK se aprovisionan en la VPC. Por lo tanto, de forma predeterminada, se espera que los clientes se conecten al clúster de Amazon MSK o que produzcan y consuman desde el clúster a través de una red privada en la misma VPC. Si accede al clúster desde fuera de la VPC, pueden aparecer estos errores. Para obtener información sobre la solución de errores cuando el cliente está en la misma VPC que el clúster, consulte No se puede acceder al clúster desde AWS: problemas de red. Para obtener información sobre el acceso al clúster desde fuera de la VPC, consulte ¿Cómo me conecto a mi clúster de Amazon MSK fuera de la VPC?

Errores específicos de la autenticación de clientes TLS

Los siguientes errores pueden aparecer cuando intente conectarse a ese clúster que tiene habilitada la autenticación de cliente TLS. Estos errores pueden deberse a problemas con la configuración relacionada con SSL.

Agente Bootstrap :9094 (id: - bastidor: nulo) desconectado

Este error puede aparecer cuando el productor o el consumidor intentan conectarse a un clúster cifrado con TLS a través del puerto 9094 de TLS sin pasar la configuración de SSL.

El siguiente error puede aparecer cuando el productor intente conectarse al clúster:

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

El siguiente error puede aparecer cuando el consumidor intente conectarse al clúster:

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

Para resolver este error, establezca la configuración SSL. Para obtener más información, consulte ¿Cómo empiezo a utilizar el cifrado?

Si la autenticación de cliente está habilitada para su clúster, debe agregar parámetros adicionales relacionados con su certificado de ACM Private CA. Para obtener más información, consulte Autenticación mediante TLS mutuo.

ERROR No se pudo obtener la hora de modificación del almacén de claves:

-o bien-

No se pudo cargar el almacén de claves

Si hay algún problema con la configuración del almacén de confianza, este error puede producirse cuando se cargan los archivos del almacén de confianza para el productor y el consumidor. Puede ver información similar a la siguiente en los registros:

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

En este caso, los registros indican un problema con la carga del archivo del almacén de confianza. La ruta al archivo del almacén de confianza está mal configurada en la configuración SSL. Puede resolver este error al indicar la ruta correcta para el archivo del almacén de confianza en la configuración de SSL.

Este error también puede producirse debido a las siguientes condiciones:

  • El archivo del almacén de confianza o almacén de claves está dañado.
  • La contraseña del archivo del almacén de confianza es incorrecta.

Error al enviar un mensaje a la prueba de tema con clave: nulo, valor: 0 bytes con el error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

org.apache.kafka.common.errors.SslAuthenticationException: error de enlace de SSL

-o bien-

La conexión al nodo - ( / :9094) tuvo un error de autenticación debido a: error de enlace de SSL (org.apache.kafka.clients.NetworkClient)

El siguiente error puede aparecer cuando hay un problema con la configuración del almacén de claves del productor que provoca un error de autenticación:

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

El siguiente error puede aparecer cuando hay un problema con la configuración del almacén de claves del consumidor que provoca un error de autenticación:

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

Para resolver este error, asegúrese de haber configurado correctamente la configuración relacionada con el almacén de claves.

java.io.IOException: la contraseña del almacén de claves era incorrecta

Este error puede aparecer cuando la contraseña del almacén de claves o del almacén de confianza es incorrecta.

Para solucionar este error, haga lo siguiente:

Compruebe si la contraseña del almacén de claves o del almacén de confianza es correcta mediante la ejecución del siguiente comando:

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 la contraseña del almacén de claves o del almacén de confianza es incorrecta, puede aparecer el siguiente error:

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

Puede ver el resultado detallado del comando anterior al agregar la marca -v:

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

También puede utilizar estos comandos para comprobar si el almacén de claves está dañado.

También puede aparecer este error cuando la clave secreta asociada al alias está configurada incorrectamente en la configuración SSL del productor y el consumidor. Para verificar esta causa raíz, ejecute el siguiente comando:

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 su contraseña para el secreto del alias (ejemplo: schema-reg) es correcta, entonces el comando le pide que introduzca una nueva contraseña para la clave secreta más. De lo contrario, el comando falla y muestra el siguiente mensaje:

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.

También puede verificar si un alias en particular forma parte del almacén de claves si ejecuta el siguiente comando:

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