Como soluciono problemas ao me conectar ao meu cluster do Amazon MSK?

Última atualização: 01/03/2022

Estou enfrentando problemas quando tento me conectar ao meu cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK).

Resolução

Quando tenta se conectar a um cluster do Amazon MSK, você pode ter os seguintes tipos de erros:

  • Erros que não são específicos do tipo de autenticação do cluster
  • Erros que são específicos da autenticação do cliente TLS

Quando tenta se conectar ao seu cluster do Amazon MSK, você pode ter um dos seguintes erros, independentemente do tipo de autenticação habilitado para o cluster:

Tempo limite de espera pela conexão no estado: CONECTANDO

Você pode receber esse erro quando o cliente está tentando se conectar ao cluster do Amazon MSK por meio da string do Apache ZooKeeper e a conexão não puder ser estabelecida. Esse erro também pode ocorrer quando a string do Apache ZooKeeper está errada.

Você recebe o seguinte erro ao usar a string incorreta do Apache ZooKeeper para se conectar ao 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)

Para resolver esse erro, faça o seguinte:

  • Verifique se a string do Apache ZooKeeper usada está correta.
  • Certifique-se de que o grupo de segurança do cluster do Amazon MSK permite o tráfego de entrada do grupo de segurança do cliente nas portas do Apache ZooKeeper.

O tópico 'TopicName' não está presente nos metadados após 60000 ms. ou não foi possível estabelecer a conexão com o nó - ( / : ). O agente pode não estar disponível. (org.apache.kafka.clients.NetworkClient)

Você pode receber esse erro em uma das seguintes condições:

  • O produtor ou consumidor não consegue se conectar ao host e porta do agente.
  • A string do agente não é válida.

Se você receber esse erro, mesmo que a conectividade do cliente ou agente estivesse funcionando inicialmente, o agente pode estar inativo.

Você recebe o seguinte erro ao tentar acessar o cluster de fora da nuvem privada virtual (VPC) usando a string do agente para produzir dados:

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

Você recebe o seguinte erro ao tentar acessar o cluster de fora da VPC para consumir dados usando a string do 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 esses erros, faça o seguinte:

  • Certifique-se de que sejam usadas a string e a porta corretas do agente.
  • Se o erro for causado devido ao agente estar inativo, verifique a métrica ActiveControllerCount do Amazon CloudWatch para verificar se o controlador esteve ativo durante todo o período. O valor dessa métrica deve ser 1. Qualquer outro valor pode indicar que um dos agentes no cluster está indisponível. Além disso, verifique a métrica ZooKeeperSessionState para confirmar se os agentes estavam se comunicando constantemente com os nós do Apache ZooKeeper. Para entender por que o agente falhou, visualize a métrica KafkaDataLogsDiskUsed e verifique se o agente ficou sem espaço de armazenamento. Para obter mais informações sobre as métricas do Amazon MSK e os valores esperados, consulte Métricas do Amazon MSK para monitoramento com o CloudWatch.
  • Certifique-se de que o erro não seja causado pela configuração da rede. Os recursos do Amazon MSK são provisionados dentro da VPC. Portanto, por padrão, espera-se que os clientes se conectem ao cluster do Amazon MSK ou produzam e consumam do cluster em uma rede privada na mesma VPC. Se você acessar o cluster de fora da VPC, poderá obter esses erros. Para obter informações sobre a solução de problemas de erros quando o cliente está na mesma VPC que o cluster, consulte Não é possível acessar o cluster de dentro da AWS: problemas de rede. Para obter informações sobre como acessar o cluster de fora da VPC, consulte Como me conecto ao meu cluster do Amazon MSK fora da VPC?

Erros que são específicos da autenticação do cliente TLS

Você pode receber os seguintes erros ao tentar se conectar a esse cluster com autenticação de cliente TLS habilitada. Esses erros podem ser causados devido a problemas com a configuração relacionada ao SSL.

Agente de bootstrap :9094 (id: - rack: null) desconectado

Você pode receber esse erro quando o produtor ou consumidor tentar se conectar a um cluster criptografado por TLS pela porta TLS 9094 sem passar a configuração SSL.

Você pode receber o seguinte erro quando o produtor tentar se conectar ao 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)

Você pode receber o seguinte erro quando o consumidor tentar se conectar ao 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)

Para resolver esse erro, defina a configuração SSL. Para obter mais informações, consulte Como começo a usar a criptografia?

Se a autenticação de cliente estiver habilitada para o seu cluster, você deverá adicionar parâmetros adicionais relacionados ao seu certificado ACM Private CA. Para obter mais informações, consulte Autenticação TLS mútua.

ERRO O tempo de modificação do keystore não pôde ser obtido:

-ou-

Falha ao carregar o keystore

Se houver um problema com a configuração do truststore, esse erro poderá ocorrer quando os arquivos de truststore forem carregados para o produtor e o consumidor. Você pode ver informações semelhantes às seguintes nos logs:

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

Nesse caso, os logs indicam um problema com o carregamento do arquivo de truststore. O caminho para o arquivo de truststore está configurado incorretamente na configuração SSL. Você pode resolver esse erro fornecendo o caminho correto para o arquivo de truststore na configuração SSL.

Esse erro também pode ocorrer devido às seguintes condições:

  • Seu arquivo de truststore ou keystore está corrompido.
  • A senha do arquivo de truststore está incorreta.

Erro ao enviar mensagem para o tópico de teste com chave: null, valor: 0 bytes com erro: (org.apache.kafka.clients.producer.internals.errorLoggingCallback)

org.apache.kafka.common.errors.SslAuthenticationException: falha no handshake do SSL

-ou-

Conexão ao nó - ( /:9094 ) falha na autenticação devido a: falha no handshake do SSL (org.apache.kafka.clients.NetworkClient)

Você pode receber o seguinte erro quando houver um problema com a configuração do armazenamento de chaves do produtor que leva à falha de autenticação:

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

Você pode receber o seguinte erro quando há um problema com a configuração do armazenamento de chaves do consumidor que leva à falha de autenticação:

./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 esse erro, verifique se você configurou corretamente a configuração relacionada ao keystore.

java.io.IOException: a senha do keystore estava incorreta

Você pode receber esse erro quando a senha do keystore ou do truststore estiver incorreta.

Para solucionar esse erro, siga estas etapas:

Verifique se a senha do keystore ou do truststore está correta executando o seguinte 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 a senha do armazenamento de chaves ou do truststore estiver incorreta, você poderá ver o seguinte erro:

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

Você pode ver a saída detalhada do comando acima adicionando o sinalizador -v:

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

Você também pode usar esses comandos para verificar se o keystore está corrompido.

Você também pode receber esse erro quando a chave secreta associada ao alias estiver configurada incorretamente na configuração SSL do produtor e do consumidor. Para verificar essa causa raiz, execute o seguinte 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 a sua senha para o segredo do alias (exemplo: schema-reg) estiver correta, o comando solicitará que você insira uma nova senha para a chave secreta else. Caso contrário, o comando falhará com a seguinte mensagem:

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.

Você também pode verificar se um alias específico faz parte do armazenamento de chaves executando o seguinte 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