Saya mencoba menggunakan Kafka.
Semua konfigurasi dilakukan dengan benar tetapi ketika saya mencoba untuk menghasilkan pesan dari konsol saya terus mendapatkan kesalahan berikut
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Versi kafka: 2.11-0.9.0.0
apache-kafka
producer
Wisnu
sumber
sumber
2.2.0
pada tahun 2019Jawaban:
Ini mungkin terkait dengan
advertised.host.name
pengaturan diserver.properties
.Apa yang bisa terjadi adalah bahwa produsen Anda sedang mencoba untuk mencari tahu siapa adalah pemimpin untuk partisi tertentu, angka keluar nya
advertised.host.name
danadvertised.port
dan mencoba untuk menghubungkan. Jika pengaturan ini tidak dikonfigurasi dengan benar maka mungkin berpikir bahwa pemimpin tidak tersedia.sumber
Saya mencoba semua rekomendasi yang tercantum di sini. Apa yang berhasil bagi saya adalah untuk pergi
server.properties
dan menambahkan:Tinggalkan
listeners
danadvertised_listeners
beri komentar.sumber
server.properties
file MAC terletak di/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
adalah konfigurasi usang. kafka.apache.org/documentation/#brokerconfigsApa yang dipecahkan bagi saya adalah mengatur pendengar seperti:
Hal ini membuat broker KAFKA mendengarkan semua antarmuka.
sumber
Saya memiliki kafka berjalan sebagai wadah Docker dan pesan serupa membanjiri log.
Dan
KAFKA_ADVERTISED_HOST_NAME
diatur ke 'kafka'.Dalam kasus saya alasan kesalahan adalah
/etc/hosts
catatan yang hilang untuk 'kafka' dalam wadah 'kafka' itu sendiri.Jadi, misalnya, berlari
ping kafka
di dalam wadah 'kafka' akan gagalping: bad address 'kafka'
Dalam hal Docker masalah ini akan diselesaikan dengan menentukan
hostname
wadah.Opsi untuk mencapainya:
docker run --hostname ...
docker run -it --add-host ...
hostname
dalam komposisi buruh pelabuhanhostname
dalam AWS EC2 Task Definitionsumber
Saya menggunakan kafka_2.12-0.10.2.1:
vi config/server.properties
tambahkan di bawah garis:
Hostname dan port broker akan beriklan ke produsen dan konsumen. Jika tidak diatur,
Jika tidak, itu akan menggunakan nilai yang dikembalikan dari
java.net.InetAddress.getCanonicalHostName()
.hentikan broker Kafka:
mulai ulang broker:
dan sekarang Anda seharusnya tidak melihat masalah apa pun.
sumber
server.properties
tidak cukup sampai saya memulai kembali broker dengan deamon yang dimuat ulang. Mungkin Anda seharusnya mengetahuinya, tetapi pasti membantu menentukannya dalam jawaban inikafka 2.13
Saya telah menyaksikan masalah yang sama dalam 2 minggu terakhir saat bekerja dengan Kafka dan telah membaca posting Stackoverflow ini sejak itu.
Hasil dalam kasus saya adalah bahwa Kafka mengirim pesan kesalahan kembali tetapi menciptakan, pada saat yang sama, topik yang tidak ada sebelumnya. Jadi jika saya mencoba membuat pesan apa pun lagi untuk topik itu setelah acara ini, kesalahan tidak akan muncul lagi sebagai topik yang telah dibuat.
TOLONG DICATAT: Bisa jadi instalasi Kafka khusus saya telah dikonfigurasi untuk secara otomatis membuat topik ketika hal yang sama tidak ada; yang seharusnya menjelaskan mengapa dalam kasus saya, saya dapat melihat masalah hanya sekali untuk setiap topik setelah mengatur ulang topik: konfigurasi Anda mungkin berbeda dan dalam hal ini Anda akan terus menerima kesalahan yang sama berulang kali.
Salam,
Luca Tampellini
sumber
Kami cenderung mendapatkan pesan ini ketika kami mencoba berlangganan ke topik yang belum dibuat. Kami umumnya mengandalkan topik yang akan dibuat apriori di lingkungan yang digunakan, namun kami memiliki tes komponen yang dijalankan terhadap turunan kafka berlabuh, yang mulai bersih setiap saat.
Dalam hal ini, kami menggunakan AdminUtils dalam pengaturan pengujian kami untuk memeriksa apakah topik ada dan membuatnya jika tidak. Lihat ini lain stack overflow untuk lebih lanjut tentang pengaturan AdminUtils.
sumber
Kemungkinan lain untuk peringatan ini (dalam 0.10.2.1) adalah Anda mencoba untuk memilih topik yang baru saja dibuat dan pemimpin untuk partisi-topik ini belum tersedia, Anda berada di tengah pemilihan kepemimpinan.
Menunggu sedetik antara penciptaan topik dan pemungutan suara adalah solusi.
sumber
Bagi siapa pun yang mencoba menjalankan kafka di kubernetes dan mengalami kesalahan ini, inilah yang akhirnya menyelesaikannya untuk saya:
Anda harus:
hostname
ke spec pod, dengan begitu kafka dapat menemukan dirinya sendiri.atau
hostPort
, maka Anda perluhostNetwork: true
dandnsPolicy: ClusterFirstWithHostNet
Alasan untuk ini adalah karena Kafka perlu berbicara dengan dirinya sendiri, dan itu memutuskan untuk menggunakan pendengar / hostname 'diiklankan' untuk menemukan sendiri, daripada menggunakan localhost. Bahkan jika Anda memiliki Layanan yang menunjukkan nama host yang diiklankan di pod, itu tidak terlihat dari dalam pod. Saya tidak benar-benar tahu mengapa itu terjadi, tetapi setidaknya ada solusinya.
sumber
Menambahkan ini karena dapat membantu orang lain. Masalah umum dapat berupa kesalahan konfigurasi
advertised.host.name
. Dengan Docker menggunakan pengaturan pembuatan docker nama layanan di dalamKAFKA_ADVERTISED_HOST_NAME
tidak akan berfungsi kecuali jika Anda mengatur nama host juga.docker-compose.yml
contoh:Di atas tanpa
hostname: kafka
dapat mengeluarkanLEADER_NOT_AVAILABLE
saat mencoba untuk terhubung. Anda dapat menemukan contohdocker-compose
konfigurasi yang berfungsi di sinisumber
Dalam kasus saya, itu bekerja dengan baik di rumah, tetapi gagal di kantor, saat saya terhubung ke jaringan kantor.
Jadi memodifikasi config / server.properties listeners = PLAINTEXT: //: 9092 menjadi listeners = PLAINTEXT: // localhost: 9092
Dalam kasus saya, saya mendapatkan saat menggambarkan Grup Konsumen
sumber
Jika Anda menjalankan kafka pada mesin lokal, coba perbarui $ KAFKA_DIR / config / server.properties dengan baris di bawah ini:
listeners=PLAINTEXT://localhost:9092
dan kemudian mulai ulang kafka.sumber
Saya menggunakan komposisi buruh pelabuhan untuk membangun wadah Kafka menggunakan
wurstmeister/kafka
gambar. MenambahkanKAFKA_ADVERTISED_PORT: 9092
properti kedocker-compose
file saya memecahkan kesalahan ini untuk saya.sumber
Karena saya ingin broker kafka saya terhubung dengan produsen dan konsumen jarak jauh, Jadi saya tidak ingin
advertised.listener
dikomentari. Dalam kasus saya, (menjalankan kafka di kubernetes), saya mengetahui bahwa pod kafka saya tidak diberi IP Cluster apa pun. Dengan menghapus barisclusterIP: None
dari services.yml, kubernetes memberikan internal-ip ke pod kafka. Ini menyelesaikan masalah saya tentang LEADER_NOT_AVAILABLE dan juga koneksi jarak jauh dari produsen / konsumen kafka.sumber
Saat LEADER_NOT_AVAILABLE kesalahan terjadi, cukup restart broker kafka:
diikuti oleh
(Catatan: Zookeeper harus berjalan saat ini, jika Anda melakukannya, ia tidak akan berfungsi)
sumber
New leader is 0
.Baris di bawah ini saya telah menambahkan
config/server.properties
, yang menyelesaikan masalah saya masalah yang sama di atas. Semoga ini bisa membantu, cukup banyak didokumentasikan dengan baik dalam file server.properties, cobalah membaca dan memahami sebelum Anda memodifikasi ini.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
sumber
Untuk semua yang berjuang dengan pengaturan Kafka ssl dan melihat kesalahan LEADER_NOT_AVAILABLE ini. Salah satu alasan yang mungkin rusak adalah keystore dan truststore. Di keystore Anda harus memiliki kunci pribadi dari server + sertifikat server yang ditandatangani. Di truststore klien, Anda harus memiliki sertifikat CA intermedidate agar klien dapat mengotentikasi server kafka. Jika Anda akan menggunakan ssl untuk komunikasi antar broker, Anda perlu truststore ini juga diatur di server.properti dari broker sehingga mereka dapat saling mengotentikasi.
Bagian terakhir yang saya lewatkan secara salah dan menyebabkan saya banyak waktu yang menyakitkan mencari tahu apa arti kesalahan LEADER_NOT_AVAILABLE ini. Semoga ini bisa membantu seseorang.
sumber
Masalah diselesaikan setelah menambahkan pengaturan pendengar pada file server.properties yang terletak di direktori config. listeners = PLAINTEXT: // localhost (atau server Anda): 9092 Mulai ulang kafka setelah perubahan ini. Versi yang digunakan 2.11
sumber
Bagi saya, itu terjadi karena konfigurasi
port Docker yang hilang (9093)
Kafka command port "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName"
Saya memeriksa konfigurasi saya untuk mencocokkan port dan sekarang semuanya baik-baik saja
sumber
Bagi saya, penyebabnya adalah menggunakan Zookeeper spesifik yang bukan bagian dari paket Kafka. Zookeeper itu sudah diinstal pada mesin untuk keperluan lain. Rupanya Kafka tidak bekerja dengan sembarang Zookeeper. Beralih ke Zookeeper yang datang bersama Kafka menyelesaikannya untukku. Agar tidak bertentangan dengan Zookeeper yang ada, saya harus memodifikasi konfigurasi saya agar Zookeeper mendengarkan pada port yang berbeda:
sumber
Pendengar yang diiklankan seperti yang disebutkan dalam jawaban di atas bisa menjadi salah satu alasannya. Alasan lain yang mungkin adalah:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Selain itu, pastikan Anda mengatur pendengar yang diiklankan untuk
IP:9092
menggantikanlocalhost:9092
. Yang terakhir berarti bahwa broker hanya dapat diakses melalui localhost.Ketika saya menemukan kesalahan, saya ingat pernah menggunakan
PLAINTEXT://<ip>:<PORT>
daftar bootstrap server (atau daftar pialang) dan ternyata berhasil, anehnya.sumber
Bagi saya, saya tidak menentukan id broker untuk Kafka instance. Ini akan mendapatkan id baru dari zookeeper kadang-kadang ketika restart di lingkungan Docker. Jika id broker Anda lebih besar dari 1000, cukup tentukan variabel lingkungan
KAFKA_BROKER_ID
.Gunakan ini untuk melihat broker, topik dan partisi.
sumber
saya tahu ini sudah lama diposting, saya ingin berbagi bagaimana saya menyelesaikannya.
karena saya punya laptop kantor ( VPN dan proksi dikonfigurasi).
saya memeriksa variabel lingkungan NO_PROXY
kembali dengan nilai kosong
sekarang saya telah menetapkan NO_PROXY dengan localhost dan 127.0.0.1
jika Anda ingin menambahkan nilai yang ada, maka
setelah ini, saya telah me-restart zookeeper dan kafka
bekerja seperti mantra
sumber