Come posso risolvere i problemi che si verificano durante la connessione al mio cluster Amazon MSK?

Ultimo aggiornamento: 01/03/2022

Sto riscontrando dei problemi quando provo a connettermi al mio cluster Amazon Managed Streaming for Apache Kafka (Amazon MSK).

Risoluzione

Quando provi a connetterti a un cluster Amazon MSK, è possibile che si verifichino i seguenti tipi di errori:

  • Errori che non sono specifici del tipo di autenticazione del cluster
  • Errori specifici dell'autenticazione client TLS

Quando provi a connetterti al tuo cluster Amazon MSK, potresti ricevere uno dei seguenti errori indipendentemente dal tipo di autenticazione abilitato per il tuo cluster:

Timeout in attesa della connessione mentre è in stato: CONNECTING (CONNESSIONE IN CORSO)

Potresti ricevere questo errore quando il client prova a connettersi al cluster Amazon MSK tramite la stringa Apache ZooKeeper e la connessione non può essere stabilita. Questo errore potrebbe verificarsi anche quando la stringa Apache ZooKeeper è errata.

Il seguente errore viene visualizzato quando si utilizza la stringa Apache ZooKeeper errata per connettersi al 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)

Per risolvere l'errore, procedi come segue:

  • Verifica che la stringa Apache ZooKeeper utilizzata sia corretta.
  • Assicurati che il gruppo di sicurezza per il tuo cluster Amazon MSK consenta il traffico in entrata dal gruppo di sicurezza del client sulle porte Apache ZooKeeper.

Verifica che l'argomento 'topicName' non sia presente nei metadati dopo 60000 ms. O che non sia possibile stabilire la connessione al nodo - ( / : ). Il broker potrebbe non essere disponibile. (org.apache.kafka.clients.NetworkClient)

È possibile che questo errore venga visualizzato in una delle seguenti condizioni:

  • Il producer o il consumer non è in grado di connettersi all'host e alla porta del broker.
  • La stringa del broker non è valida.

Se ricevi questo errore anche se la connettività del client o del broker inizialmente funzionava, allora è possibile che il broker non funzioni.

Il seguente errore viene visualizzato quando si prova ad accedere al cluster dall'esterno del cloud privato virtuale (VPC) utilizzando la stringa del broker per la produzione di dati:

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

Il seguente errore viene visualizzato quando si prova ad accedere al cluster dall'esterno del VPC per il consumo di dati utilizzando la stringa del broker:

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

Per risolvere questi errori, completa le seguenti operazioni:

  • Assicurati che vengano utilizzate la stringa e la porta del broker corrette.
  • Se l'errore è causato dal mancato funzionamento del broker, controlla il parametro di Amazon CloudWatch ActiveControllerCount per verificare che il controller sia stato attivo per tutto il periodo. Il valore di questo parametro deve essere 1. Qualsiasi altro valore potrebbe indicare che uno dei broker del cluster non è disponibile. Inoltre, controlla il parametro ZooKeeperSessionState per confermare che i broker comunicavano costantemente con i nodi Apache ZooKeeper. Per capire perché il broker ha riportato l’errore, visualizza il parametro KafkaDatalogsDiskUsed metrica e controlla se il broker ha esaurito lo spazio di archiviazione. Per ulteriori informazioni sui parametri di Amazon MSK e sui valori previsti, consulta Parametri di Amazon MSK per il monitoraggio con CloudWatch.
  • Assicurati che l'errore non sia causato dalla configurazione di rete. Le risorse di Amazon MSK sono fornite all'interno del VPC. Pertanto, per impostazione predefinita, i client devono connettersi al cluster Amazon MSK o produrre e consumare dal cluster su una rete privata nello stesso VPC. Se si accede al cluster dall'esterno del VPC, è possibile che si verifichino questi errori. Per informazioni sulla risoluzione degli errori quando il client si trova nello stesso VPC del cluster, consulta Impossibile accedere al cluster dall'interno di AWS: problemi di rete. Per informazioni sull'accesso al cluster dall'esterno del VPC, consulta Come posso connettermi al mio cluster Amazon MSK al di fuori del VPC?

Errori specifici dell'autenticazione client TLS

I seguenti errori possono verificarsi quando si prova a connettersi a quel cluster con l'autenticazione client TLS abilitata. Questi errori potrebbero essere causati da problemi con la configurazione relativa a SSL.

Broker bootstrap :9094 (id: - rack: null) disconnesso

Potresti ricevere questo errore quando il producer o il consumer prova a connettersi a un cluster crittografato TLS sulla porta TLS 9094 senza passare la configurazione SSL.

Potresti ricevere il seguente errore quando il producer prova a connettersi al 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)

È possibile che venga visualizzato il seguente errore quando il consumer prova a connettersi al 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)

Per risolvere questo errore, imposta la configurazione SSL. Per ulteriori informazioni, consulta Come si inizia a usare la crittografia?

Se l'autenticazione client è abilitata per il cluster, è necessario aggiungere ulteriori parametri relativi al certificato ACM Private CA. Per ulteriori informazioni, consulta Autenticazione TLS reciproca.

ERRORE Impossibile ottenere l'ora di modifica del keystore:

-oppure-

Impossibile caricare il keystore

Se c'è un problema con la configurazione del truststore, questo errore può verificarsi quando i file del truststore vengono caricati per il producer e il consumer. È possibile visualizzare informazioni simili alle seguenti nei registri:

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

In questo caso, i registri indicano un problema con il caricamento del file truststore. Il percorso del file truststore è configurato in modo errato nella configurazione SSL. Puoi risolvere questo errore fornendo il percorso corretto per il file truststore nella configurazione SSL.

Questo errore può verificarsi anche a causa delle seguenti condizioni:

  • Il tuo file truststore o keystore è danneggiato.
  • La password del file truststore non è corretta.

Errore durante l'invio del messaggio al test argomento con chiave: null, valore: 0 byte con errore: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

org.apache.kafka.common.errors.SslAuthenticationException: handshake SSL non riuscito

-oppure-

Autenticazione della connessione al nodo - ( /:9094 ) non riuscita a causa di: handshake SSL non riuscito (org.apache.kafka.clients.NetworkClient)

Potresti ricevere il seguente errore quando si verifica un problema con la configurazione del keystore del producer che causa l'errore di autenticazione:

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

È possibile che il seguente errore venga visualizzato quando si verifica un problema con la configurazione del keystore del consumer che causa l'errore di autenticazione:

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

Per risolvere questo errore, assicurati di aver impostato correttamente la configurazione relativa al keystore.

java.io.IOException: la password del keystore non era corretta

Potresti ricevere questo errore quando la password per il keystore o il truststore non è corretta.

Per risolvere l’errore, procedi come segue:

Controlla se la password del keystore o del truststore è corretta emettendo il seguente 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

Se la password per il keystore o il truststore non è corretta, è possibile che venga visualizzato il seguente errore:

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

È possibile visualizzare l'output dettagliato del comando precedente aggiungendo il flag -v:

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

È inoltre possibile utilizzare i seguenti comandi per verificare se il keystore è danneggiato.

Potresti ricevere questo errore anche quando la chiave segreta associata all'alias non è configurata correttamente nella configurazione SSL del producer e del consumer. Per verificarlo, emetti il seguente 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>:

Se la password per il segreto dell'alias (esempio: schema-reg) è corretta, il comando chiede di inserire una nuova password per la chiave segreta. In caso contrario, il comando non riesce con il seguente messaggio:

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.

È inoltre possibile verificare se un determinato alias fa parte del keystore emettendo il seguente 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