Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao subir o segundo broker

Fiz as configurações conforme mostrado, mas ao subir o segundo broker, aparece o erro:

org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:126)
        at kafka.zk.KafkaZkClient$CheckedEphemeral.getAfterNodeExists(KafkaZkClient.scala:2239)
        at kafka.zk.KafkaZkClient$CheckedEphemeral.create(KafkaZkClient.scala:2177)
        at kafka.zk.KafkaZkClient.checkedEphemeralCreate(KafkaZkClient.scala:2144)
        at kafka.zk.KafkaZkClient.registerBroker(KafkaZkClient.scala:111)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:405)
        at kafka.Kafka$.main(Kafka.scala:112)
        at kafka.Kafka.main(Kafka.scala)
[2024-10-26 13:33:57,546] INFO [KafkaServer id=0] shutting down (kafka.server.KafkaServer)

Eu finalizei o zookeeper e ambos os brokers, ao subir o segundo, aparece esse erro. Fiz o teste de subir primeiro o kafka2, dai o erro aparece ao subir o kafka1

Também percebi que não gerou nenhum arquivo nas pastas de logs, tanto do zookeeper quanto dos kafkas. As pastas de logs foram devidamente configuradas nos arquivos server.properties , server2.properties e zookeeper.properties

2 respostas

outro erro que encontrei ao tentar subir o segundo kafka é:

[2024-10-26 13:42:02,530] ERROR Cannot invoke "java.nio.channels.ServerSocketChannel.close()" because the return value of "kafka.network.Acceptor.serverChannel()" is null (kafka.network.DataPlaneAcceptor)
java.lang.NullPointerException: Cannot invoke "java.nio.channels.ServerSocketChannel.close()" because the return value of "kafka.network.Acceptor.serverChannel()" is null
        at kafka.network.Acceptor.$anonfun$closeAll$2(SocketServer.scala:712)
        at kafka.utils.CoreUtils$.swallow(CoreUtils.scala:68)
        at kafka.network.Acceptor.closeAll(SocketServer.scala:712)
        at kafka.network.Acceptor.close(SocketServer.scala:679)
        at kafka.network.SocketServer.$anonfun$stopProcessingRequests$4(SocketServer.scala:288)
        at kafka.network.SocketServer.$anonfun$stopProcessingRequests$4$adapted(SocketServer.scala:288)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:935)
        at kafka.network.SocketServer.stopProcessingRequests(SocketServer.scala:288)
        at kafka.server.KafkaServer.$anonfun$shutdown$4(KafkaServer.scala:985)
        at kafka.utils.CoreUtils$.swallow(CoreUtils.scala:68)
        at kafka.server.KafkaServer.shutdown(KafkaServer.scala:985)
        at kafka.server.KafkaBroker.shutdown(KafkaBroker.scala:99)
        at kafka.server.KafkaBroker.shutdown$(KafkaBroker.scala:99)
        at kafka.server.KafkaServer.shutdown(KafkaServer.scala:111)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:667)
        at kafka.Kafka$.main(Kafka.scala:112)
        at kafka.Kafka.main(Kafka.scala)
solução!

Olá, Cleyton. Tudo bem?

Esse erro NodeExistsException indica que o Zookeeper já possui um broker registrado com o mesmo ID, e isso está impedindo o segundo broker de ser iniciado. A questão pode estar ligada à configuração dos arquivos server.properties e à forma como os brokers estão sendo identificados. Para resolver, siga estas instruções:

  1. Verifique o broker.id, cada broker Kafka precisa ter um ID único. No seu caso, como está configurando dois brokers, certifique-se de que o broker.id seja diferente em cada arquivo de configuração. Exemplo:

    # server.properties (broker 1)
    broker.id=0
    
    # server2.properties (broker 2)
    broker.id=1
    
  2. Configure corretamente as portas e diretórios de logs, cada broker deve usar uma porta e um diretório de logs diferente. Altere o listeners e o caminho dos logs para evitar conflitos.

    # server.properties (broker 1)
    listeners=PLAINTEXT://:9092
    log.dirs=/var/lib/kafka-logs-1
    
    # server2.properties (broker 2)
    listeners=PLAINTEXT://:9093
    log.dirs=/var/lib/kafka-logs-2
    
  3. Zere o estado antigo no Zookeeper, como você mencionou que o erro ocorre mesmo ao tentar iniciar em ordens diferentes, pode ser necessário limpar os dados do Zookeeper. Execute:

    # Parar o Zookeeper
    bin/zookeeper-server-stop.sh
    
    # Remover os dados antigos
    rm -rf /tmp/zookeeper
    
    # Reiniciar o Zookeeper
    bin/zookeeper-server-start.sh config/zookeeper.properties
    
  4. Remova os logs antigos dos brokers, isso garante que não haja resíduos de uma configuração anterior.

    rm -rf /var/lib/kafka-logs-1/*
    rm -rf /var/lib/kafka-logs-2/*
    
  5. Reinicie os serviços, agora, suba novamente o Zookeeper e os dois brokers Kafka.

    # Subir o Zookeeper
    bin/zookeeper-server-start.sh config/zookeeper.properties
    
    # Subir o primeiro broker
    bin/kafka-server-start.sh config/server.properties
    
    # Subir o segundo broker
    bin/kafka-server-start.sh config/server2.properties
    

Como complemento, vou deixar essa discussão, sobre um erro parecido, caso queira conferir: Erro no Kafka

Espero ter ajudado.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!