Estoy tratando de usar Kafka.
Todas las configuraciones se realizan correctamente, pero cuando trato de generar un mensaje desde la consola sigo recibiendo el siguiente error
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Versión Kafka: 2.11-0.9.0.0
apache-kafka
producer
Vishesh
fuente
fuente
2.2.0
en 2019Respuestas:
Podría estar relacionado con la
advertised.host.name
configuración en suserver.properties
.Lo que podría suceder es que el productor está tratando de averiguar quién es el líder de una partición determinada, las cifras de sus
advertised.host.name
eadvertised.port
intentos y conectar. Si estos ajustes no están configurados correctamente, puede pensar que el líder no está disponible.fuente
Intenté todas las recomendaciones enumeradas aquí. Lo que funcionó para mí fue ir
server.properties
y agregar:Salir
listeners
yadvertised_listeners
comentado.fuente
server.properties
archivo se encuentra en/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
son configuraciones obsoletas. kafka.apache.org/documentation/#brokerconfigsLo que me resolvió es configurar a los oyentes así:
Esto hace que el agente KAFKA escuche todas las interfaces.
fuente
Tenía kafka ejecutándose como un contenedor Docker y mensajes similares inundaban el registro.
Y
KAFKA_ADVERTISED_HOST_NAME
se estableció en 'kafka'.En mi caso, el motivo del error fue el
/etc/hosts
registro faltante de 'kafka' en el contenedor 'kafka'.Entonces, por ejemplo, ejecutar
ping kafka
dentro del contenedor 'kafka' fallaría conping: bad address 'kafka'
En términos de Docker, este problema se resuelve especificando
hostname
el contenedor.Opciones para lograrlo:
docker run --hostname ...
docker run -it --add-host ...
hostname
en docker-composehostname
en la definición de tarea de AWS EC2fuente
Estoy usando kafka_2.12-0.10.2.1:
vi config/server.properties
agregar debajo de la línea:
Nombre de host y puerto que el corredor anunciará a productores y consumidores. Si no está configurado,
De lo contrario, utilizará el valor devuelto por
java.net.InetAddress.getCanonicalHostName()
.detener al corredor de Kafka:
reiniciar corredor:
y ahora no deberías ver ningún problema.
fuente
server.properties
no fue suficiente hasta que reinicié el corredor con un demonio recargado. Tal vez se supone que debes saber eso, pero seguro ayudó a que se especificara en esta respuestakafka 2.13
He sido testigo de este mismo problema en las últimas 2 semanas mientras trabajaba con Kafka y he estado leyendo esta publicación de Stackoverflow desde entonces.
El resultado en mi caso es que Kafka envía un mensaje de error pero crea, al mismo tiempo, el tema que no existía antes. Entonces, si trato de producir algún mensaje nuevamente para ese tema después de este evento, el error ya no aparecerá como el tema que se creó.
TENGA EN CUENTA: Podría ser que mi instalación particular de Kafka se haya configurado para crear automáticamente el tema cuando no existe el mismo; eso debería explicar por qué en mi caso puedo ver el problema solo una vez para cada tema después de restablecer los temas: su configuración puede ser diferente y en ese caso seguiría recibiendo el mismo error una y otra vez.
Saludos,
Luca Tampellini
fuente
Tendemos a recibir este mensaje cuando intentamos suscribirnos a un tema que aún no se ha creado. Por lo general, confiamos en los temas que se crearán a priori en nuestros entornos implementados, pero tenemos pruebas de componentes que se ejecutan contra una instancia de kafka dockerizada, que comienza limpia cada vez.
En ese caso, usamos AdminUtils en nuestra configuración de prueba para verificar si el tema existe y crearlo si no. Consulte este otro desbordamiento de pila para obtener más información sobre cómo configurar AdminUtils.
fuente
Otra posibilidad para esta advertencia (en 0.10.2.1) es que intente sondear un tema que acaba de crearse y el líder para esta partición de tema aún no está disponible, está en medio de una elección de liderazgo.
Esperar un segundo entre la creación del tema y el sondeo es una solución alternativa.
fuente
Para cualquiera que intente ejecutar kafka en kubernetes y se encuentre con este error, esto es lo que finalmente lo resolvió para mí:
Tienes que:
hostname
a la especificación de la vaina, de esa manera kafka puede encontrarse.o
hostPort
, entonces necesitahostNetwork: true
ydnsPolicy: ClusterFirstWithHostNet
La razón de esto es porque Kafka necesita hablar consigo mismo, y decide usar el oyente / nombre de host 'anunciado' para encontrarse a sí mismo, en lugar de usar localhost. Incluso si tiene un Servicio que señala el nombre de host anunciado en el pod, no es visible desde el pod. Realmente no sé por qué ese es el caso, pero al menos hay una solución alternativa.
fuente
Agregando esto ya que puede ayudar a otros. Un problema común puede ser una configuración incorrecta de
advertised.host.name
. Con Docker usando docker-compose, la configuración del nombre del servicio internoKAFKA_ADVERTISED_HOST_NAME
no funcionará a menos que también configure el nombre de host.docker-compose.yml
ejemplo:Lo anterior sin
hostname: kafka
puede emitir unLEADER_NOT_AVAILABLE
al intentar conectarse. Puede encontrar un ejemplo de unadocker-compose
configuración de trabajo aquífuente
En mi caso, estaba funcionando bien en casa, pero estaba fallando en la oficina, en el momento en que me conecto a la red de la oficina.
Así que modifiqué los config / server.properties listeners = PLAINTEXT: //: 9092 a listeners = PLAINTEXT: // localhost: 9092
En mi caso, estaba recibiendo mientras describía el Grupo de consumidores
fuente
Si está ejecutando kafka en la máquina local, intente actualizar $ KAFKA_DIR / config / server.properties con la siguiente línea:
listeners=PLAINTEXT://localhost:9092
y luego reinicie kafka.fuente
Estoy usando docker-compose para construir el contenedor Kafka usando
wurstmeister/kafka
image. AgregarKAFKA_ADVERTISED_PORT: 9092
propiedad a midocker-compose
archivo resolvió este error para mí.fuente
Como quería que mi corredor de kafka se conectara con productores y consumidores remotos, no quiero
advertised.listener
que me comenten. En mi caso, (ejecutando kafka en kubernetes), descubrí que mi pod kafka no tenía asignada ninguna IP de clúster. Al eliminar la líneaclusterIP: None
de services.yml, el kubernetes asigna una ip interna al pod kafka. Esto resolvió mi problema de LEADER_NOT_AVAILABLE y también la conexión remota de productores / consumidores de kafka.fuente
Cuando se produce el error LEADER_NOT_AVAILABLE, simplemente reinicie el corredor de kafka:
seguido por
(Nota: Zookeeper debe estar ejecutándose en este momento, si lo haces de otra manera no funcionará)
fuente
New leader is 0
.Esta línea debajo que he agregado
config/server.properties
, resolvió mi problema similar al problema anterior. Espero que esto ayude, está bastante bien documentado en el archivo server.properties, intente leer y comprender antes de modificar esto.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
fuente
Para todos aquellos que luchan con la configuración de Kafka ssl y ven este error LEADER_NOT_AVAILABLE. Una de las razones por las que podría romperse es el almacén de claves y el almacén de confianza. En el almacén de claves debe tener la clave privada del servidor + certificado de servidor firmado. En el almacén de confianza del cliente, debe tener un certificado CA intermedio para que el cliente pueda autenticar el servidor kafka. Si va a utilizar SSL para la comunicación entre intermediarios, necesita que este almacén de confianza también se establezca en el servidor. Las propiedades de los intermediarios para que puedan autenticarse entre sí.
Esa última pieza que me faltaba por error y me causó muchas horas dolorosas descubrir lo que podría significar este error LEADER_NOT_AVAILABLE. Esperemos que esto pueda ayudar a alguien.
fuente
El problema se resuelve después de agregar la configuración de escucha en el archivo server.properties ubicado en el directorio de configuración. listeners = PLAINTEXT: // localhost (o su servidor): 9092 Reinicie kafka después de este cambio. Versión utilizada 2.11
fuente
Para mí, sucedió debido a un
puerto Docker de configuración fallida (9093)
Puerto de comando Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName" Revisé
mi configuración para que coincida con el puerto y ahora todo está bien
fuente
Para mí, la causa fue usar un Zookeeper específico que no era parte del paquete Kafka. Ese Zookeeper ya estaba instalado en la máquina para otros fines. Aparentemente, Kafka no funciona con cualquier Zookeeper. Cambiar al Zookeeper que vino con Kafka lo resolvió por mí. Para no entrar en conflicto con el Zookeeper existente, tuve que modificar mi configuración para que el Zookeeper escuchara en un puerto diferente:
fuente
Los oyentes anunciados como se menciona en las respuestas anteriores podrían ser una de las razones. Las otras posibles razones son:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Además, asegúrese de tener el oyente anunciado configurado en
IP:9092
lugar delocalhost:9092
. Esto último significa que solo se puede acceder al intermediario a través del localhost.Cuando encontré el error, recuerdo haberlo usado
PLAINTEXT://<ip>:<PORT>
en la lista de servidores de arranque (o lista de intermediarios) y funcionó, extrañamente.fuente
Para mí, no especifiqué la identificación del corredor para la instancia de Kafka. Obtendrá una nueva identificación de zookeeper a veces cuando se reinicie en el entorno Docker. Si su ID de corredor es mayor que 1000, solo especifique la variable de entorno
KAFKA_BROKER_ID
.Use esto para ver corredores, temas y particiones.
fuente
Sé que esto se publicó hace mucho tiempo, me gustaría compartir cómo lo resolví.
desde que tengo mi computadora portátil de oficina ( se configuró VPN y proxy ). Revisé la
variable de entorno NO_PROXY
volvió con valores vacíos
ahora he configurado NO_PROXY con localhost y 127.0.0.1
si desea agregar valores existentes, entonces
Después de esto, reinicié Zookeeper y Kafka
funcionó de maravilla
fuente