Lider Müsait Değil Kafka Konsol Yapımcısı


172

Kafka'yı kullanmaya çalışıyorum.
Tüm yapılandırmalar düzgün bir şekilde yapılıyor ancak konsoldan mesaj üretmeye çalıştığımda aşağıdaki hatayı almaya devam ediyorum

WARN Error while fetching metadata with correlation id 39 : 
     {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

Kafka versiyonu: 2.11-0.9.0.0


hangi kafka sürümünü kullanıyorsunuz? tüm yapılandırmaların uygun olduğunu nasıl anlarsınız? lütfen daha fazla bilgi eklemeye çalışın
Nautilus

2.11-0.9.0.0 sürümünü kullanıyorum, çalıştığı için tüm yapılandırmaların uygun olduğunu söyledim.
Vishesh

1
@Vishesh Aşağıdaki komutu verebilir misiniz ?/bin/kafka-topics.sh --zookeeper localhost: 2181 --describe --topic yourTopicName
avr

2
benim için de aynı hata. Lider alıyorum ./bin/kafka-topics.sh --zookeeper <ip>: 2181 --describe --topic yourTopicName ancak üreticiye mesaj gönderirken LEADER_NOT_AVAILABLE hatası veriyor.
Mart'ta Vilva

2
Bu sorunu 2.2.02019'da
kafka'da

Yanıtlar:


94

Bu advertised.host.nameayarınızdaki ayarlarla ilgili olabilir server.properties.

Ne olabilirdi senin yapımcı, lider, belirli bir bölümü için kim olduğunu bulmak için onun dışarı rakamlar çalışıyor olmasıdır advertised.host.nameve advertised.portbağlanmak ve denemeden. Bu ayarlar doğru şekilde yapılandırılmazsa liderin mevcut olmadığını düşünebilir.


1
Bu benim için hatayı düzeltti .. ancak server.properties içindeki yorumlar, reklamı yapılan .host.name yapılandırılmazsa host.name kullanacağını söyler. Ve host.name, server.properties dosyasında yapılandırıldı.
Bay Spark

Aynı sorunu aldım ve bu benim için kafka 0.9 için çalıştı
minhas23

3
Bunu AWS tarafından oluşturulan genel ana bilgisayar adı yerine IP adresime ayarlamak, yaşadığım birçok sorunu çözdü.
Spechal

81

Burada listelenen tüm önerileri denedim. Benim için işe yarayan, gidip server.propertieseklemekti:

port = 9092
advertised.host.name = localhost 

Bırakın listenersve advertised_listenersyorum yapın.


5
çözüm benim için çalışıyor ( vikas çözüm bağlantısı ) Sadece MAC server.propertiesdosyasında benim için eklemek istiyorum/usr/local/etc/kafka/
Edison Q

2
benim için işe advertised.listeners=PLAINTEXT://my.ip:9092
Bay Crowley

14
BU KULLANMAYIN - port, advertised.host.namekullanımdan kaldırılmış yapılandırmalardır. kafka.apache.org/documentation/#brokerconfigs
Stephane

44

Benim için çözen, dinleyicileri şöyle ayarlamaktır:

advertised.listeners = PLAINTEXT://my.public.ip:9092
listeners = PLAINTEXT://0.0.0.0:9092

Bu, KAFKA brokerinin tüm arayüzleri dinlemesini sağlar.


4
Bu kabul edilen cevap olmalı. Çok düğümlü konfigürasyon için çalışır ve çok mantıklıdır.
Piyush Shrivastava

Bunu app.yaml dosyamızda kullanabilir miyiz?
Kodlayıcı

40

Kafka'yı Docker konteyneri olarak çalıştırıyordum ve benzer mesajlar günlüğe akıyordu.
Ve KAFKA_ADVERTISED_HOST_NAME'kafka'ya ayarlandı.

Benim durumumda hata nedeni /etc/hosts, 'kafka' konteynerinin kendisinde 'kafka' için eksik kayıttı.
Örneğin, ping kafka'kafka' konteynerinin içine girmekping: bad address 'kafka'

Docker açısından bu sorun hostnamekapsayıcıyı belirterek çözülür .

Bunu başarmak için seçenekler:


Bu kendi başına bir cevap değildir , ancak ileride başvurmak üzere: docker / docker # 1143 çözüldüğünde (hangi işletim sistemi kullanılırsa kullanılsın) kapsayıcının ana bilgisayarına başvurmanın kolay bir yolu olacaktır.
Michael Ahlers

Eğer kullanıyorsanız wurstmeister / kafka-liman işçisi (bu yazının yazıldığı zamanda muhtemelen en popüler biri olan) liman işçisi görüntüsünü, burada notlara bakın env Var ayarı ve neden ilgili
RyanQuey

32

Kafka_2.12-0.10.2.1 kullanıyorum:

vi config/server.properties

aşağıdaki satırı ekleyin:

listeners=PLAINTEXT://localhost:9092
  • Std listener özelliğinden değeri alırken, reklamlı.listençeri değiştirmenize gerek yoktur.

Ana bilgisayar adı ve bağlantı noktası, aracı üreticilere ve tüketicilere reklam verecektir. Ayarlanmamışsa,

  • yapılandırılmışsa "dinleyiciler" değerini kullanır

Aksi takdirde, döndürülen değeri kullanır java.net.InetAddress.getCanonicalHostName().

Kafka brokerını durdurun:

bin/kafka-server-stop.sh

aracıyı yeniden başlat:

bin/kafka-server-start.sh -daemon config/server.properties

ve şimdi herhangi bir sorun görmemelisiniz.


Bu benim için çözdü, server.propertiesaracıyı yeniden yüklenen bir deamon ile yeniden başlatana kadar değişiklik yeterli değildi. Belki bunu bilmelisin, ama bu cevabın belirtilmesine yardımcı oldu
Bossan

Bu benim için çalıştı, çok teşekkürler kardeşim. Ben kullanıyorumkafka 2.13
Alejandro Herrera

31

Kafka ile çalışırken son 2 haftadır da aynı konuya tanıklık ediyorum ve o zamandan beri bu Stackoverflow'un gönderisini okuyorum.

2 haftalık analizden sonra, benim durumumda bunun, var olmayan bir konuya mesaj üretmeye çalışırken ortaya çıktığını gördüm .

Benim durumumdaki sonuç, Kafka'nın bir hata mesajı geri göndermesi, ancak aynı zamanda daha önce var olmayan konuyu yaratmasıdır. Bu olaydan sonra bu konuya tekrar herhangi bir mesaj üretmeye çalışırsam, hata artık oluşturulduğu gibi konu olarak görünmez.

LÜTFEN DİKKAT: Belirli Kafka kurulumum, aynı olmadığında konuyu otomatik olarak oluşturacak şekilde yapılandırılmış olabilir; Bu, benim durumumda, konuları sıfırladıktan sonra her konu için sorunu yalnızca bir kez görebildiğimi açıklamalıdır: yapılandırmanız farklı olabilir ve bu durumda aynı hatayı tekrar tekrar almaya devam edersiniz.

Saygılarımızla,

Luca Tampellini


Merhaba Luca. Ayrıca otomatik olarak yeni konular oluşturuyorum. Sorum şu; tüketicilerinizin bu yeni konuyu otomatik olarak keşfetmesine nasıl izin veriyorsunuz? Tüketicilerim bunu yapmayacak. Tüketicilerimi yeniden başlattıktan sonra yeni mesajlar alınabilir ancak konu oluşturulmasına neden olan mesaj kaybolur.
jchnxu

15

Henüz oluşturulmamış bir konuya abone olmaya çalıştığımızda bu mesajı alma eğilimindeyiz. Genel olarak konuşlandırılan ortamlarımızda a priori oluşturulacak konulara güveniriz, ancak her seferinde temiz bir şekilde başlayan, yerleştirilmiş bir kafka örneğine karşı çalışan bileşen testlerimiz vardır.

Bu durumda, konunun var olup olmadığını kontrol etmek ve yoksa oluşturmak için test kurulumumuzda AdminUtils kullanırız . AdminUtils kurulumu hakkında daha fazla bilgi için bu diğer yığın taşmasına bakın .


8

Bu uyarı için başka bir olasılık (0.10.2.1'de) henüz oluşturulmuş bir konuyu sorgulamaya çalışmanız ve bu konunun bölümünün lideri henüz mevcut değilse, bir liderlik seçiminin ortasındasınız.

Konu oluşturma ve yoklama arasında bir saniye beklemek bir çözümdür.


6

Kafka'yı kubernetes üzerinde çalıştırmaya ve bu hatayla karşılaşmaya çalışan herkes için nihayet benim için çözdü:

Şunlardan birini yapmanız gerekir:

  1. hostnameKapsül spesifikasyonuna ekleyin , bu şekilde kafka kendini bulabilir.

veya

  1. Kullanıyorsanız hostPort, ihtiyacınız olacak hostNetwork: truevednsPolicy: ClusterFirstWithHostNet

Bunun nedeni, Kafka'nın kendisiyle konuşması gerektiğidir ve localhost kullanmak yerine kendisini bulmak için 'reklamı yapılan' dinleyici / ana bilgisayar adını kullanmaya karar verir. Bölmede reklamı yapılan ana bilgisayar adını gösteren bir Hizmetiniz olsa bile, bölmenin içinden görünmez. Neden böyle olduğunu bilmiyorum, ama en azından bir çözüm var.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper-cluster1
  template:
    metadata:
      labels:
        name: zookeeper-cluster1
        app: zookeeper-cluster1
    spec:
      hostname: zookeeper-cluster1
      containers:
      - name: zookeeper-cluster1
        image: wurstmeister/zookeeper:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888

---

apiVersion: v1
kind: Service
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  type: NodePort
  selector:
    app: zookeeper-cluster1
  ports:
  - name: zookeeper-cluster1
    protocol: TCP
    port: 2181
    targetPort: 2181
  - name: zookeeper-follower-cluster1
    protocol: TCP
    port: 2888
    targetPort: 2888
  - name: zookeeper-leader-cluster1
    protocol: TCP
    port: 3888
    targetPort: 3888

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-cluster
  template:
    metadata:
      labels:
        name: kafka-cluster
        app: kafka-cluster
    spec:
      hostname: kafka-cluster
      containers:
      - name: kafka-cluster
        image: wurstmeister/kafka:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: KAFKA_ADVERTISED_LISTENERS
          value: PLAINTEXT://kafka-cluster:9092
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zookeeper-cluster1:2181
        ports:
        - containerPort: 9092

---

apiVersion: v1
kind: Service
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  type: NodePort
  selector:
    app: kafka-cluster
  ports:
  - name: kafka-cluster
    protocol: TCP
    port: 9092
    targetPort: 9092

2
1. çalışmıyor% HATA: Yerel: Ana bilgisayar çözünürlük hatası: kafka-cluster: 9092/1001: 'kafka-cluster: 9092' çözülemedi: nodename veya servname sağlandı veya bilinmiyor
Lu32 0'da

hizmet adı ile aynı hostname ekledim, benim için çalışıyor!
karthikeayan

6

Bunu eklediğinden beri eklemek başkalarına yardımcı olabilir. Yaygın bir sorun, yanlış yapılandırılması olabilir advertised.host.name. Docker kullanarak docker-compose ayarını kullanarak KAFKA_ADVERTISED_HOST_NAMEana makine adını da ayarlamadığınız sürece hizmetin adını alışkanlık haline getirmez. docker-compose.ymlmisal:

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    hostname: kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Yukarıdaki olmadan bağlanmaya çalışırken hostname: kafkabir sorun olabilir LEADER_NOT_AVAILABLE. Burada çalışan bir docker-composeyapılandırma örneği bulabilirsiniz


6

Benim durumumda, evde iyi çalışıyordu, ama ofis ağına bağlandığım anda ofiste başarısız oluyordu.

Böylece config / server.properties dinleyicileri = PLAINTEXT: //: 9092 dinleyicilere değiştirildi = PLAINTEXT: // localhost: 9092

Benim durumumda Tüketici Grubunu tanımlarken


Neden doğru varsayılanları ayarlamadılar, bu bana yardımcı oldu.
powder366


3

Kafka konteynerini wurstmeister/kafkaimaj kullanarak inşa etmek için docker-compose kullanıyorum . Dosyama KAFKA_ADVERTISED_PORT: 9092özellik eklemek benim docker-composeiçin bu hatayı çözdü.


3

Kafka brokerımın uzak üreticiler ve tüketicilerle bağlantı kurmasını istediğimden advertised.listener, bu konuda yorum yapmak istemiyorum . Benim durumumda (kubernetes'te kafka çalıştıran), kafka kapsülüme herhangi bir Küme IP'si verilmediğini öğrendim. clusterIP: NoneKubernetes hattı services.yml'den kaldırarak kafka kapsülüne bir dahili ip atar. Bu, LEADER_NOT_AVAILABLE ve aynı zamanda kafka üreticilerinin / tüketicilerinin uzaktan bağlantı sorunumu çözdü.


3

LEADER_NOT_AVAILABLE hatası atıldığında, kafka brokerini yeniden başlatmanız yeterlidir:

/bin/kafka-server-stop.sh

bunu takiben

/bin/kafka-server-start.sh config/server.properties

(Not: Zookeeper bu zamana kadar çalışıyor olmalı, aksi takdirde çalışmaz)


Evet. kafka ilk başlatıldıktan sonra hayvanat bahçesi başladığında olur.
panchicore

Bunu yaptım ve tam olarak çözemedi. Garip olan şey, brokerın sanki lidermiş gibi başlamasıdır. olduğu gibi New leader is 0.
Sammy

2

Eklediğim aşağıdaki satır config/server.properties, sorunumu yukarıdaki sorunla çözdü. Umarım bu, server.properties dosyasında oldukça iyi belgelenmiştir, bunu değiştirmeden önce okumaya ve anlamaya çalışın. advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092


1

Kafka SSL kurulumuyla uğraşan ve bu LEADER_NOT_AVAILABLE hatasını gören herkes için. Bozulma nedenlerinden biri de anahtar deposu ve güven deposu. Anahtar deposunda, sunucunun + imzalı sunucu sertifikasının özel anahtarına sahip olmanız gerekir. İstemci güven deposunda, istemcinin kafka sunucusunun kimliğini doğrulayabilmesi için ara CA sertifikasına sahip olmanız gerekir. Aracılar arası iletişim için ssl kullanacaksanız, bu truststore'un sunucuda ayarlanmış olması gerekir.

Yanlışlıkla eksik olduğum son parça, bu LEADER_NOT_AVAILABLE hatasının ne anlama gelebileceğini öğrenmemde çok fazla acılı saatler geçirdi. Umarım bu birine yardımcı olabilir.


"Sunucunun özel anahtarı" ile ne demek istiyorsun? CA anahtar ve sunucu anahtar deposunda imzalanmış sunucu sertifikası varken İstemci güven deposunda CA sertifikası var .. Ama yine de bu hataları alıyorum ..
phaigeim

Üzgünüm, özel anahtar + sertifika demek istedim. Büyük bir küme kuruyordum ve bürokrasi zincirinde bir yerde hata yaptım, bu nedenle sertifikalardan biri KSS ile eşleşmedi. Bu başka bir sebep de olabilir. Özel anahtarın md5'inin, sertifika eşleşmelerinin ve bu sertifikanın güven mağazanızla doğrulanıp onaylanmadığını bir kez daha kontrol edin. Truststore genellikle kök ve ara sertifikalar içerir
vojtmen

1

Konfigürasyon dizininde bulunan server.properties dosyasına dinleyici ayarı eklendikten sonra sorun çözüldü. listeners = PLAINTEXT: // localhost (veya sunucunuz): 9092 Bu değişiklikten sonra kafka'yı yeniden başlatın. Kullanılan sürüm 2.11


1

Bunun gibi tekrarlanan hata mesajları alırsanız:

Error while fetching metadata with correlation id 3991 : {your.topic=LEADER_NOT_AVAILABLE}

Veya

Discovered group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:677)
(Re-)joining group (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:509)
Group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:729)
Discovered group coordinator 172.25.40.219:9092 (id: 2147483645 rack: null) (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:677)
Group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:729)

Ardından, kafka sunucusunda böyle dinleyici ayarlarını yapılandırmanız gerekir.

 listeners=PLAINTEXT://your.server.ip:9092

Apacke Kafka 2.5.0 ve birleşik platform 5.4.1'de denenmiş çözüm budur.


0

Benim için, bir miss yapılandırma nedeniyle oldu
Docker portu (9093)
Kafka komut portu "bin / kafka-console-producer.sh - broker listesi localhost: 9092 --topic TopicName"
Konfigürasyonumu port ile eşleşecek şekilde kontrol ettim ve şimdi herşey iyi


0

Benim için neden Kafka paketinin bir parçası olmayan belirli bir Zookeeper kullanmaktı. Bu Zookeeper zaten başka amaçlarla makineye kuruldu. Görünüşe göre Kafka herhangi bir Zookeeper ile çalışmıyor. Kafka ile birlikte gelen Zookeeper'a geçmek benim için çözdü. Mevcut Zookeeper ile çatışmamak için, Zookeeper'ın farklı bir limanda dinlemesini sağlamak için konfugasyonumu değiştirmek zorunda kaldım:

[root@host /opt/kafka/config]# grep 2182 *
server.properties:zookeeper.connect=localhost:2182
zookeeper.properties:clientPort=2182

0

Yukarıdaki yanıtlarda belirtildiği gibi reklamı yapılan dinleyiciler bunun nedenlerinden biri olabilir. Diğer olası nedenler:

  1. Konu oluşturulmamış olabilir. Bunu kullanarak kontrol edebilirsiniz.bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
  2. Meta verileri almak için üreticiye verdiğiniz önyükleme sunucularınızı kontrol edin. Önyükleme sunucusu konuyla ilgili en son meta verileri içermiyorsa (örneğin, zookeeper talebini kaybettiğinde). Birden fazla önyükleme sunucusu eklemelisiniz.

Ayrıca, reklamı yapılan dinleyicinin IP:9092yerinelocalhost:9092 . İkincisi, aracının yalnızca localhost üzerinden erişilebilir olduğu anlamına gelir.

Hatayla karşılaştığımda, PLAINTEXT://<ip>:<PORT>bootstrap sunucuları (veya aracı listesi) listesinde kullandığımı hatırlıyorum ve garip bir şekilde çalıştı.

bin/kafka-console-producer --topic sample --broker-list PLAINTEXT://<IP>:<PORT>

0

Benim için Kafka örneği için aracı kimliği belirtmedim. Docker ortamında yeniden başlatıldığında bazen zookeeper'den yeni bir kimlik alır. Acente kimliğiniz 1000'den büyükse, ortam değişkenini belirtmeniz yeterlidirKAFKA_BROKER_ID .

Aracıları, konuları ve bölümleri görmek için bunu kullanın.

brew install kafkacat
kafkacat -b [kafka_ip]:[kafka_poot] -L

0

Bu uzun zaman önce gönderildi biliyorum, ben nasıl çözüldü paylaşmak istiyorum.
benim ofis dizüstü beri ( VPN ve proxy yapılandırılmış). NO_PROXY
ortam değişkenini kontrol ettim

> echo %NO_PROXY%

boş değerleri ile döndü
şimdi localhost ve 127.0.0.1 NO_PROXY ayarladım

> set NO_PROXY=127.0.0.1,localhost  

mevcut değerlere eklemek istiyorsanız,

> set NO_PROXY=%NO_PROXY%,127.0.0.1,localhost  

bundan sonra zookeeper'ı yeniden başlattım ve kafka
bir cazibe gibi çalıştı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.