Ir para o conteúdo

Como soluciono erros de conexão do meu cluster do Amazon MSK?

8 minuto de leitura
0

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

Resolução

Siga estas etapas de solução de problemas para o erro que você recebeu.

"java.lang.OutOfMemoryError: Java heap space"

Você pode receber o erro anterior ao executar um comando para operações de cluster sem o arquivo de propriedades do cliente. Para resolver esse erro, inclua as propriedades com base no tipo de autenticação no arquivo client.properties.

Exemplo de comando com apenas uma porta de autenticação do AWS Identity and Access Management (IAM):

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

Exemplo de comando com uma porta de autenticação do IAM e o arquivo de propriedades do cliente:

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

Você pode receber o erro anterior quando há uma configuração incorreta de rede entre a aplicação cliente e o cluster do Amazon MSK.

Para solucionar esse problema, execute o seguinte comando telnet para testar a conectividade da máquina cliente:

telnet bootstrap-broker port-number

Observação: substitua bootstrap-broker por um dos endereços do agente do seu cluster do Amazon MSK. Substitua port-number pelo valor de porta com base na autenticação ativada para seu cluster.

Se a máquina cliente conseguir acessar os agentes, não haverá problemas de conectividade. Se a máquina cliente não conseguir acessar os agentes, revise as configurações de conectividade de rede. Verifique as regras de entrada e saída do grupo de segurança.

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

Você pode receber o erro anterior ao usar a autenticação do IAM e sua política de acesso bloquear operações de tópicos, como WriteData e ReadData.

Observação: os limites de permissão e as políticas de controle de serviços (SCPs) também bloqueiam a tentativa do usuário de se conectar ao cluster sem a autorização necessária.

Se você usa uma autenticação que não seja do IAM, verifique se adicionou listas de controle de acesso (ACLs) em nível de tópico que bloqueiam as operações.

Para listar as ACLs aplicadas em um tópico, execute o comando a seguir:

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

"ZooKeeperClientTimeoutException"

Você pode receber o erro anterior quando o cliente tenta se conectar ao cluster por meio da string do Apache ZooKeeper e a conexão não é estabelecida. Você também pode receber esse erro quando a string do Apache ZooKeeper estiver incorreta.

Exemplo de uma string incorreta do Apache ZooKeeper:

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

Exemplo de saída:

[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 problema, realize as seguintes ações:

  • Verifique se você usou a string correta do Apache ZooKeeper.
  • Certifique-se de que o grupo de segurança do seu cluster do Amazon MSK permite tráfego de entrada do grupo de segurança do cliente nas portas do Apache ZooKeeper.
  • Se seus nós do Apache ZooKeeper estiverem associados a um grupo de segurança diferente dos agentes do MSK ou do cliente, verifique seus requisitos de configuração. O grupo de segurança do cliente deve permitir a conectividade com o grupo de segurança associado aos nós do ZooKeeper nas portas necessárias do ZooKeeper. As regras de entrada do grupo de segurança da interface de rede do ZooKeeper devem permitir a conectividade do cliente.

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

Você pode receber o erro anterior quando uma das seguintes afirmações for verdadeira:

  • O produtor ou consumidor não consegue se conectar ao host e à porta do agente.
  • A string do agente está incorreta.

Se você receber essa mensagem de erro mesmo que a conectividade do cliente ou do agente tenha funcionado inicialmente, o agente pode não estar disponível.

Esse erro também pode ocorrer quando você usa a string do agente para acessar o cluster de fora da nuvem privada virtual (VPC).

Exemplo de string do agente do produtor:

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

Exemplo de saída:

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

Exemplo de string do agente do consumidor:

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

Exemplo de saída:

[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 esse problema, realize as seguintes ações:

  • Certifique-se de usar a string e a porta corretas do agente.
  • Se o agente não estiver disponível para clusters gerenciados pelo ZooKeeper, verifique a métrica ActiveControllerCount do Amazon CloudWatch. Em seguida, verifique se o controlador estava ativo durante o período. Se o valor da métrica não for 1, um dos agentes do cluster pode não estar disponível. Use a estatística de soma por um período de 1 minuto para visualizar a métrica.
  • Verifique a métrica ZooKeeperSessionState para confirmar se os agentes estão em comunicação contínua com os nós do Apache ZooKeeper.
  • Para entender por que o agente falhou, verifique a métrica KafkaDataLogsDiskUsed para saber se o agente ficou sem espaço de armazenamento. Para obter mais informações, consulte Métricas do Amazon MSK para monitorar agentes Standard com o CloudWatch.
  • Verifique se a configuração da rede causou o problema. Os recursos do Amazon MSK são provisionados dentro da VPC. Você deve se conectar ao cluster do Amazon MSK ou produzir por meio de uma rede privada na mesma VPC. Para obter mais informações, consulte Não é possível acessar o cluster de dentro da AWS: problemas de rede. Além disso, consulte How do I connect to my Amazon MSK cluster from inside AWS network but outside the cluster's Amazon VPC? (Como faço para me conectar ao meu cluster do Amazon MSK de dentro da rede da AWS, mas fora da Amazon VPC do cluster?) nas perguntas frequentes do Amazon MSK.

"Topic not present in metadata"

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

Você pode receber o erro anterior quando o tópico para o qual você tentou gravar não existe no Amazon MSK. Verifique se o tópico existe em seu cluster do Amazon MSK. Verifique se você usou a string e a porta corretas do agente na configuração do seu cliente. Se o tópico não existir, crie o tópico no Amazon MSK ou defina auto.create.enable como true na configuração do seu cluster.

Observação: quando auto.create.enable é definido como true, os tópicos são criados automaticamente.

Você também pode receber essa mensagem de erro quando o tópico existe, mas a partição não. Por exemplo, você tem uma única partição [0] e seu produtor tenta enviar para a partição [1].

Certifique-se de que o grupo de segurança do seu cluster do Amazon MSK permita o tráfego de entrada do grupo de segurança da aplicação cliente nas portas necessárias.

Se o erro ocorrer repentinamente após o sistema estar funcionando anteriormente, realize as seguintes ações para verificar o status de seus agentes do Amazon MSK:

  • Para clusters gerenciados pelo ZooKeeper, verifique a métrica ActiveControllerCount. O valor deve ser 1. Se a métrica tiver qualquer outro valor, um dos agentes do cluster não estará disponível. Use a estatística de soma por um período de 1 minuto para visualizar a métrica.
  • Verifique a métrica ZooKeeprSessionState para confirmar se os agentes estão em comunicação contínua com os nós do ZooKeeper.
  • Monitore a métrica KafkaDataLogsDiskUsed para se certificar de que o agente não tenha ficado sem espaço de armazenamento.

Verifique se você não tentou acessar o cluster de fora da VPC sem a configuração correta. Por padrão, os recursos do Amazon MSK são provisionados dentro da VPC. Você deve se conectar por meio de uma rede privada na mesma VPC.

Se você tentar acessar o cluster de fora da VPC, certifique-se de definir as configurações de rede necessárias para o serviço da AWS. Por exemplo, o AWS Client VPN ou o AWS Direct Connect.

Informações relacionadas

Conectar-se a um cluster do Amazon MSK Provisioned

Como soluciono problemas de autenticação e permissão ao usar meu cluster do Amazon MSK com a autenticação SASL/SCRAM ativada?

Solução de problemas para o cluster do Amazon MSK

AWS OFICIALAtualizada há 6 meses