Estou tentando usar o Kafka.
Todas as configurações são feitas corretamente, mas quando tento produzir uma mensagem do console, continuo recebendo o seguinte erro
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Versão Kafka: 2.11-0.9.0.0
apache-kafka
producer
Vishesh
fonte
fonte
2.2.0
em 2019Respostas:
Pode estar relacionado à
advertised.host.name
configuração no seuserver.properties
.O que poderia acontecer é que o produtor está tentando descobrir quem é o líder para uma determinada partição, descobre seus
advertised.host.name
eadvertised.port
e tenta conectar. Se essas configurações não estiverem definidas corretamente, é possível que o líder esteja indisponível.fonte
Eu tentei todas as recomendações listadas aqui. O que funcionou para mim foi ir
server.properties
e adicionar:Deixe
listeners
eadvertised_listeners
comentei.fonte
server.properties
arquivo MAC está localizado em #/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
são configurações obsoletas. kafka.apache.org/documentation/#brokerconfigsO que resolveu para mim é definir os ouvintes da seguinte forma:
Isso faz com que o broker KAFKA escute todas as interfaces.
fonte
Eu tinha o kafka em execução como um contêiner do Docker e mensagens semelhantes estavam inundando o log.
E
KAFKA_ADVERTISED_HOST_NAME
foi definido como 'kafka'.No meu caso, o motivo do erro foi o
/etc/hosts
registro ausente para 'kafka' no contêiner 'kafka'.Por exemplo, rodar
ping kafka
dentro do contêiner 'kafka' falharia comping: bad address 'kafka'
Em termos de Docker, esse problema é resolvido especificando
hostname
o contêiner.Opções para alcançá-lo:
docker run --hostname ...
docker run -it --add-host ...
hostname
na janela de encaixehostname
na definição de tarefa do AWS EC2fonte
Estou usando o kafka_2.12-0.10.2.1:
vi config/server.properties
adicione abaixo da linha:
Nome do host e porta que o corretor anunciará aos produtores e consumidores. Se não estiver definido,
Caso contrário, ele usará o valor retornado de
java.net.InetAddress.getCanonicalHostName()
.pare o corretor Kafka:
reinicie o broker:
e agora você não deve ver nenhum problema.
fonte
server.properties
não bastava modificar até reiniciar o broker com um daemon recarregado. Talvez você deveria saber que, mas com certeza ajudou tê-lo especificado nesta respostakafka 2.13
Eu tenho testemunhado esse mesmo problema nas últimas 2 semanas enquanto trabalhava com Kafka e tenho lido a postagem deste Stackoverflow desde então.
O resultado, no meu caso, é que Kafka envia uma mensagem de erro de volta, mas cria, ao mesmo tempo, o tópico que não existia antes. Portanto, se eu tentar produzir qualquer mensagem novamente para esse tópico após este evento, o erro não aparecerá mais como o tópico criado.
OBSERVE: Pode ser que minha instalação específica do Kafka tenha sido configurada para criar automaticamente o tópico quando o mesmo não existir; isso deve explicar por que, no meu caso, eu posso ver o problema apenas uma vez para cada tópico após redefinir os tópicos: sua configuração pode ser diferente e, nesse caso, você continuaria recebendo o mesmo erro repetidamente.
Saudações,
Luca Tampellini
fonte
Temos a tendência de receber essa mensagem quando tentamos assinar um tópico que ainda não foi criado. Geralmente, confiamos nos tópicos a serem criados a priori em nossos ambientes implementados, mas temos testes de componentes que são executados em uma instância kafka dockerizada, que começa sempre limpa.
Nesse caso, usamos AdminUtils em nossa configuração de teste para verificar se o tópico existe e criá-lo, se não. Veja este outro estouro de pilha para obter mais informações sobre a configuração de AdminUtils.
fonte
Outra possibilidade para esse aviso (em 0.10.2.1) é que você tenta pesquisar um tópico que acabou de ser criado e o líder dessa partição de tópico ainda não está disponível; você está no meio de uma eleição de liderança.
Esperar um segundo entre a criação do tópico e a pesquisa é uma solução alternativa.
fonte
Para quem tenta executar o kafka no kubernetes e se deparar com esse erro, é isso que finalmente resolveu o problema para mim:
Você precisa:
hostname
à especificação do pod, assim, o kafka pode se encontrar.ou
hostPort
, você precisaráhostNetwork: true
ednsPolicy: ClusterFirstWithHostNet
A razão para isso é porque o Kafka precisa se comunicar e decide usar o ouvinte / nome de host 'anunciado' para se encontrar, em vez de usar o host local. Mesmo se você tiver um serviço que aponte o nome do host anunciado no pod, ele não será visível no pod. Realmente não sei por que esse é o caso, mas pelo menos há uma solução alternativa.
fonte
Adicionando isso, pois pode ajudar outras pessoas. Um problema comum pode ser uma configuração incorreta de
advertised.host.name
. Com o Docker usando a configuração do docker-compose, o nome do serviço internoKAFKA_ADVERTISED_HOST_NAME
não funcionará, a menos que você defina o nome do host também.docker-compose.yml
exemplo:O item acima
hostname: kafka
pode emitir umLEADER_NOT_AVAILABLE
ao tentar conectar-se. Você pode encontrar um exemplo de umadocker-compose
configuração de trabalho aquifonte
No meu caso, estava funcionando bem em casa, mas estava falhando no escritório, no momento em que me conectei à rede do escritório.
Foram modificados os ouvintes config / server.properties = PLAINTEXT: //: 9092 para listeners = PLAINTEXT: // localhost: 9092
No meu caso, eu estava conseguindo descrever o Grupo de Consumidores
fonte
Se você estiver executando o kafka na máquina local, tente atualizar $ KAFKA_DIR / config / server.properties com a linha abaixo:
listeners=PLAINTEXT://localhost:9092
e, em seguida, reinicie o kafka.fonte
Estou usando o docker-compose para criar o contêiner Kafka usando a
wurstmeister/kafka
imagem. AdicionarKAFKA_ADVERTISED_PORT: 9092
propriedade ao meudocker-compose
arquivo resolveu esse erro para mim.fonte
Como eu queria que meu corretor kafka se conectasse com produtores e consumidores remotos, não quero
advertised.listener
ser comentado. No meu caso, (executando o kafka no kubernetes), descobri que meu pod do kafka não recebeu nenhum IP de cluster. Removendo a linhaclusterIP: None
de services.yml, o kubernetes atribui um ip interno ao pod kafka. Isso resolveu meu problema de LEADER_NOT_AVAILABLE e também a conexão remota de produtores / consumidores de kafka.fonte
Quando o erro LEADER_NOT_AVAILABLE for lançado, basta reiniciar o broker kafka:
Seguido por
(Observação: o Zookeeper deve estar em execução a essa hora, se você fizer o contrário, não funcionará)
fonte
New leader is 0
.Esta linha abaixo eu adicionei
config/server.properties
, que resolveu meu problema semelhante acima. Espero que isso ajude, pois está muito bem documentado no arquivo server.properties, tente ler e entender antes de modificar isso.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
fonte
Para todos aqueles que estão lutando com a instalação do Kafka ssl e vendo esse erro LEADER_NOT_AVAILABLE. Um dos motivos que pode estar quebrado é o keystore e o armazenamento confiável. No keystore, você precisa ter uma chave privada do servidor + certificado do servidor assinado. No armazenamento confiável do cliente, você precisa ter um certificado CA intermediário para que o cliente possa autenticar o servidor kafka. Se você usará o ssl para comunicação entre corretores, será necessário que esse armazenamento confiável também esteja definido nas server.properties dos intermediários para que eles possam se autenticar.
Essa última peça que eu estava perdendo por engano e me causou muitas horas dolorosas ao descobrir o que esse erro LEADER_NOT_AVAILABLE poderia significar. Espero que isso possa ajudar alguém.
fonte
O problema foi resolvido após a adição da configuração do ouvinte no arquivo server.properties localizado no diretório config. listeners = PLAINTEXT: // localhost (ou seu servidor): 9092 Reinicie o kafka após essa alteração. Versão usada 2.11
fonte
Para mim, isso aconteceu devido a uma falha na configuração da
porta Docker (9093) da
porta de comando Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName"
Verifiquei minha configuração para corresponder à porta e agora está tudo bem
fonte
Para mim, a causa foi usar um Zookeeper específico que não fazia parte do pacote Kafka. O Zookeeper já estava instalado na máquina para outros fins. Aparentemente, Kafka não funciona com nenhum tratador de animais. Mudar para o tratador que acompanha Kafka resolveu isso para mim. Para não entrar em conflito com o Zookeeper existente, tive que modificar minha configuração para que o Zookeeper escute em uma porta diferente:
fonte
Os ouvintes anunciados, conforme mencionado nas respostas acima, podem ser um dos motivos. Os outros motivos possíveis são:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Além disso, verifique se você tem o ouvinte anunciado definido como em
IP:9092
vez delocalhost:9092
. O último significa que o broker está acessível apenas através do host local.Quando encontrei o erro, lembro-me de ter usado
PLAINTEXT://<ip>:<PORT>
na lista de servidores de inicialização (ou lista de corretores) e funcionou estranhamente.fonte
Para mim, não especifiquei o ID do broker para a instância Kafka. Às vezes, ele recebe um novo ID do zookeeper quando reiniciar no ambiente do Docker. Se o seu ID do broker for maior que 1000, basta especificar a variável de ambiente
KAFKA_BROKER_ID
.Use isso para ver intermediários, tópicos e partições.
fonte
Eu sei que isso foi postado há muito tempo, eu gostaria de compartilhar como eu o resolvi.
desde que eu tenho meu laptop do escritório ( VPN e proxy foi configurado).
verifiquei a variável de ambiente NO_PROXY
retornou com valores vazios
agora eu configurei o NO_PROXY com localhost e 127.0.0.1
se você deseja anexar aos valores existentes,
Depois disso, reiniciei o tratador e o kafka
funcionou como um encanto
fonte