Kafka ialah perisian tengah mesej teragih yang sangat baik Kafka digunakan dalam banyak sistem untuk komunikasi mesej. Memahami dan menggunakan sistem pemesejan teragih hampir menjadi kemahiran yang diperlukan untuk pembangun bahagian belakang. Hari ini 码哥字节 Saya akan mulakan dengan soalan temuduga Kafka biasa dan bercakap dengan anda tentang Kafka.
Bercakap tentang middleware mesej yang diedarkan
Soalan
middleware Apakah mesej yang diedarkan
Apakah peranan perisian tengah mesej?
Apakah senario penggunaan perisian tengah mesej?
Mesej pemilihan perisian tengah? . Seperti yang ditunjukkan dalam rajah, selepas menggunakan perisian tengah mesej, sistem perniagaan huluan menghantar mesej, yang mula-mula disimpan dalam perisian tengah mesej, dan kemudian perisian tengah mesej mengedarkan mesej kepada aplikasi modul perniagaan yang sepadan (model pengeluar-pengguna yang diedarkan). Pendekatan tak segerak ini mengurangkan gandingan antara perkhidmatan.
Tentukan perisian tengah mesej:
Gunakan mekanisme penghantaran mesej yang cekap dan boleh dipercayai untuk pertukaran data bebas platform
Berdasarkan komunikasi data untuk menyepadukan sistem teragih
Dengan menyediakan penghantaran mesej dan model baris gilir mesej, ia boleh digunakan dalam persekitaran pengedaran komunikasi antara proses
Merujuk kepada komponen tambahan dalam seni bina sistem sudah pasti akan meningkatkan kerumitan seni bina sistem dan kesukaran dalam operasi dan penyelenggaraan Jadi Apakah kelebihan menggunakan perisian tengah pemesejan yang diedarkan dalam sistem? Apakah peranan middleware mesej dalam sistem? . Jaminan pesanan
Penimbalan
Komunikasi tak segerak
Semasa temu duga, penemuduga sering mengambil berat tentang keupayaan penemuduga untuk memilih komponen sumber terbuka Ini bukan sahaja dapat menguji keluasan pengetahuan penemuduga, tetapi juga kedalaman pengetahuan penemuduga tentang sesuatu jenis sistem, dan Ia juga boleh dilihat. bahawa penemuduga mempunyai keupayaan untuk memahami keseluruhan sistem dan reka bentuk seni bina sistem. Terdapat banyak sistem pemesejan teragih sumber terbuka, dan sistem pemesejan yang berbeza mempunyai ciri yang berbeza Memilih sistem pemesejan memerlukan bukan sahaja pemahaman tertentu tentang setiap sistem pemesejan, tetapi juga pemahaman yang jelas tentang keperluan sistem anda sendiri.
Berikut ialah perbandingan beberapa sistem pemesejan yang diedarkan biasa:
Kata Kunci Jawapan
Apakah perisian tengah pemesejan teragih? Komunikasi, baris gilir, diedarkan, model pengeluar-pengguna.
Apakah peranan perisian tengah mesej? Penyahgandingan, pengendalian puncak, komunikasi tak segerak, penimbalan.
Apakah senario penggunaan perisian tengah mesej? Komunikasi tak segerak, penyimpanan dan pemprosesan mesej.
Mesej pemilihan perisian tengah? Bahasa, protokol, HA, kebolehpercayaan data, prestasi, transaksi, ekologi, kesederhanaan, mod tolak tarik.
Konsep asas dan seni bina Kafka
Soalan
Bercakap secara ringkas tentang seni bina Kafka?
Adakah Kafka mod tolak atau mod tarik Apakah perbezaan antara tolak dan tarik?
Bagaimana Kafka menyiarkan mesej?
Adakah mesej Kafka teratur?
Adakah Kafka menyokong pemisahan baca dan tulis?
Bagaimana Kafka memastikan ketersediaan data yang tinggi?
Apakah peranan penjaga zoo di Kafka?
Adakah ia menyokong transaksi?
Bolehkah bilangan partition dikurangkan?
Konsep umum dalam seni bina Kafka:
Penerbit: Penerbit, iaitu pihak yang menghantar mesej. Pengeluar bertanggungjawab untuk mencipta mesej dan kemudian menghantarnya ke Kafka.
Pengguna: Pengguna, iaitu pihak yang menerima mesej. Pengguna menyambung ke Kafka dan menerima mesej, dan kemudian melakukan pemprosesan logik perniagaan yang sepadan.
Kumpulan Pengguna: Kumpulan pengguna boleh mengandungi satu atau lebih pengguna. Menggunakan pendekatan berbilang partisi + berbilang pengguna boleh meningkatkan kelajuan pemprosesan data hiliran Pengguna dalam kumpulan pengguna yang sama tidak akan menggunakan mesej berulang kali Begitu juga, mesej yang dihantar oleh pengguna dalam kumpulan pengguna yang berbeza tidak akan menjejaskan satu sama lain. Kafka melaksanakan mod P2P mesej dan mod siaran melalui kumpulan pengguna.
Broker: Nod proksi perkhidmatan. Broker ialah nod perkhidmatan Kafka, iaitu pelayan Kafka.
Topik: Mesej dalam Kafka dibahagikan dalam unit Topik Pengeluar menghantar mesej kepada Topik tertentu, dan pengguna bertanggungjawab untuk melanggan mesej Topik dan menggunakannya.
Partition: Topik ialah konsep logik, yang boleh dibahagikan kepada berbilang partition, dan setiap partition hanya milik satu topik. Pembahagian yang berbeza di bawah topik yang sama mengandungi mesej yang berbeza Pembahagian boleh dianggap sebagai fail log tambahan pada tahap storan Apabila mesej dilampirkan pada fail log partition, ia akan diberikan offset tertentu.
Offset: Offset ialah pengecam unik bagi mesej dalam partition, Kafka menggunakannya untuk memastikan susunan mesej dalam partition Walau bagaimanapun, offset tidak menjangkau partition daripada partition dan bukannya susunan mesej.
Replikasi: Replika adalah cara Kafka memastikan ketersediaan data yang tinggi Data Partition Kafka yang sama boleh mempunyai beberapa salinan pada berbilang Broker Biasanya hanya salinan utama yang menyediakan perkhidmatan baca dan tulis luaran terdapat ranap sistem atau kegagalan rangkaian berlaku, Sekali-sekala, Kafka akan memilih semula replika Pemimpin baharu di bawah pengurusan Pengawal untuk menyediakan perkhidmatan baca dan tulis luaran.
Rekod: Rekod mesej yang sebenarnya ditulis kepada Kafka dan boleh dibaca. Setiap rekod mengandungi kunci, nilai dan cap masa.
Kafka Topic Partitions Layout
Kafka partition Topic, dan partition boleh dibaca dan ditulis serentak.
Kafka Consumer Offset
Imbangan pengguna didaftarkan kepada kluster.
Pengimbangan beban pengeluar. Memandangkan mesej Topik yang sama akan dibahagikan dan diedarkan pada berbilang Broker, pengeluar perlu menghantar mesej kepada Broker yang diedarkan ini dengan munasabah.
Kata Kunci Jawapan
Bercakap secara ringkas tentang seni bina Kafka?
Pengeluar, Pengguna, Kumpulan Pengguna, Topik, Pembahagian
Adakah mod tolak atau tarik Kafka? Pengeluar Kafka menggunakan mod Tekan untuk menghantar mesej kepada Broker, dan Pengguna menggunakan mod Tarik untuk penggunaan. Mod tarik membolehkan pengguna mengurus offset dengan sendirinya, yang boleh memberikan prestasi baca
Bagaimana Kafka menyiarkan mesej?
Kumpulan pengguna
Adakah mesej Kafka teratur?
Tahap topik tidak tersusun dan Partition ditempah
Adakah Kafka menyokong pemisahan baca-tulis?
Tidak disokong, hanya Leader menyediakan perkhidmatan membaca dan menulis luaran
Bagaimanakah Kafka memastikan ketersediaan data yang tinggi?
Copy, ack, HW
Apakah peranan penjaga zoo di Kafka?
Pengurusan kluster, pengurusan metadata
Adakah ia menyokong transaksi?
Selepas 0.11, transaksi disokong dan boleh dicapai "tepat sekali"
Bolehkah bilangan partition dikurangkan?
Tidak, data akan hilang
Kafka menggunakan
Soalan
Apakah alat baris arahan untuk Kafka? Mana satu yang telah anda gunakan?
Proses pelaksanaan Kafka Producer?
Apakah konfigurasi biasa Kafka Producer?
Bagaimana untuk memastikan mesej Kafka teratur?
Bagaimanakah Pengeluar memastikan data dihantar tanpa kehilangan?
Bagaimana untuk meningkatkan prestasi Pengeluar?
Jika bilangan pengguna dalam kumpulan yang sama lebih besar daripada bilangan bahagian, bagaimana Kafka mengendalikannya?
Adakah benang Pengguna Kafka selamat?
Beritahu saya tentang model benang apabila anda menggunakan Kafka Consumer untuk menggunakan mesej Mengapa ia direka seperti ini?
Konfigurasi biasa Pengguna Kafka?
Bilakah Pengguna akan ditendang keluar daripada kluster?
Bagaimanakah reaksi Kafka apabila Pengguna menyertai atau keluar?
Apakah Imbangan Semula dan bila Imbangan Semula berlaku?
Alat baris arahan
Alat baris arahan Kafka berada dalam direktori /bin pakej Kafka, yang terutamanya termasuk skrip pengurusan perkhidmatan dan kluster, skrip konfigurasi, skrip melihat maklumat, skrip pelanggan, dll. .
kafka-configs.sh: skrip pengurusan konfigurasi
kafka-console-consumer.sh: konsol pengguna Kafka
kafka-console-shiper.sh: konsol pengeluar Kafka
kafka-consumer- groups.sh: maklumat berkaitan kumpulan pengguna kafka
kafka-delete-records.sh: padam fail log air rendah
kafka-log-dirs.sh: maklumat direktori log mesej kafka
mirror-maker.sh: alat replikasi gugusan kafka di pusat data berbeza
kafka-preferred-replica-election.sh: pencetus pilihan raya replika pilihan
🎜 🎜 zk 🎜 🎜Kami biasanya boleh menggunakan 🎜biasa digunakan untuk melihat status kumpulan pengguna Kafka. 🎜
Kafka Producer
Logik pengeluaran biasa pengeluar Kafka termasuk langkah berikut:
Konfigurasikan parameter pelanggan pengeluar untuk contoh pengeluar biasa.
Bina mesej untuk dihantar.
Hantar mesej.
Tutup contoh pengeluar.
Proses penghantaran mesej pengeluar ditunjukkan dalam rajah di bawah. Ia perlu dihantar kepada Broker secara berkelompok. 拦截器,序列化器和分区器,最终由累加器
Kafka Producer memerlukan parameter yang diperlukan berikut:
bootstrap.server: Nyatakan alamat Broker Kafka
siri bersiri
value .serializer:value Serializer
Parameter biasa:
batch.num.messages
Nilai lalai: 200, bilangan mesej dalam setiap kelompok, hanya berfungsi untuk asyc.
🎜🎜🎜permintaan.diperlukan.acks🎜
Nilai lalai: 0, 0 bermakna pengeluar tidak perlu menunggu pengesahan daripada ketua, 1 bermakna ketua perlu mengesahkan menulis ke log tempatannya dan mengesahkannya dengan segera, -1 bermakna pengeluar perlu mengesahkan selepas semua sandaran selesai. Ia hanya berfungsi dalam mod tak segerak Pelarasan parameter ini adalah pertukaran antara kehilangan data dan kecekapan penghantaran Jika anda tidak sensitif terhadap kehilangan data tetapi mengambil berat tentang kecekapan, anda boleh mempertimbangkan untuk menetapkannya kepada 0, yang boleh meningkatkan kecekapan. pengeluar dalam menghantar data.
request.timeout.ms
Nilai lalai: 10000, pengesahan tamat masa.
partitioner.class
Nilai lalai: kafka.producer.DefaultPartitioner, mesti melaksanakan kafka.producer.Partitioner, sediakan strategi partitioning berdasarkan Key. Kadangkala kami memerlukan jenis mesej yang sama untuk diproses secara berurutan, jadi kami mesti menyesuaikan strategi peruntukan untuk memperuntukkan jenis data yang sama kepada partition yang sama.
producer.type
Nilai lalai: penyegerakan, menentukan sama ada mesej dihantar serentak atau tak segerak. Gunakan kafka.producer.AyncProducer untuk penghantaran batch asyc tak segerak dan kafka.producer.SyncProducer untuk penyegerakan segerak. Penghantaran segerak dan tak segerak juga menjejaskan kecekapan penghasilan mesej.
mampatan.topik
Nilai lalai: tiada, pemampatan mesej, tiada pemampatan secara lalai. Kaedah pemampatan lain termasuk "gzip", "snappy" dan "lz4". Pemampatan mesej boleh mengurangkan jumlah penghantaran rangkaian dan IO rangkaian, sekali gus meningkatkan prestasi keseluruhan.
mampat.topik
Nilai lalai: batal Apabila pemampatan ditetapkan, anda boleh menentukan pemampatan topik tertentu Jika tidak dinyatakan, semua pemampatan akan dilakukan.
message.send.max.retries
Nilai lalai: 3, bilangan maksimum percubaan menghantar mesej.
retry.backoff.ms
Nilai lalai: 300, selang tambahan ditambah pada setiap percubaan.
topic.metadata.refresh.interval.ms
Nilai lalai: 600000, masa untuk mendapatkan metadata dengan kerap. Apabila partition hilang dan ketua tidak tersedia, pengeluar juga akan secara aktif mendapatkan metadata Jika 0, metadata akan diperoleh setiap kali mesej dihantar, yang tidak disyorkan. Jika negatif, metadata hanya akan diambil apabila gagal.
queue.buffering.max.ms
Nilai lalai: 5000, masa maksimum untuk menyimpan data dalam baris gilir pengeluar, hanya untuk asyc.
queue.buffering.max.message
Nilai lalai: 10000, bilangan maksimum mesej yang dicache oleh pengeluar, hanya untuk asyc.
queue.enqueue.timeout.ms
Nilai lalai: -1, 0 dibuang apabila baris gilir penuh, nilai negatif ialah blok apabila baris gilir penuh, nilai positif ialah masa yang sepadan bagi blok apabila baris gilir penuh, hanya untuk asyc.
Kafka Consumer
Kafka mempunyai konsep kumpulan pengguna sahaja. jadi jika bilangan pengguna dalam kumpulan pengguna yang sama melebihi bilangan partition, sesetengah pengguna akan diperuntukkan partition yang tidak boleh digunakan. Hubungan antara kumpulan pengguna dan pengguna ditunjukkan dalam rajah di bawah:
Kafka Pengguna Pelanggan yang menggunakan mesej biasanya termasuk langkah berikut:
Mengkonfigurasi pelanggan, mencipta pengguna 🜎 topik
Tarik mesej dan ambil adalah selamat untuk benang, untuk memastikan benang keselamatan, dan meningkatkan Untuk prestasi penggunaan, model benang yang serupa dengan Reaktor boleh digunakan pada sisi Pengguna untuk menggunakan data.
model penggunaan ;jejari sempadan: 4px;margin-kanan: 2px;margin-kiri: 2px;warna latar belakang: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace ;word-break: break-all;color: rgb(0, 150, 136);">format hos:port.
key.deserializer: key.serializer sepadan dengan kaedah penyahserialisasian kunci.
value.deserializer: value.serializersepadan dengan kaedah penyahserialisasian nilai.
max.poll.records:单次 poll 调用返回的最大消息数,如果处理逻辑很轻量,可以适当提高该值。但是max.poll.recordssession.timeout.ms: Masa pengesanan penyelaras gagal. Lalai ialah 10s Parameter ini ialah selang masa untuk Kumpulan Pengguna mengesan ranap sistem secara aktif (komputer, ahli kumpulan), serupa dengan masa tamat degupan jantung.
🎜auto.offset.reset: Atribut ini menyatakan bahawa pengguna sedang membaca partition yang tidak mempunyai offset dan offset adalah tidak sah (offset semasa pengguna telah tamat tempoh untuk masa yang lama dan telah tamat tempoh serta dipadamkan) Apakah harus dilakukan dalam kes Atau mula membaca data dari kedudukan permulaan. 🎜🎜🎜🎜enable.auto.commit: Tidak melakukan anjakan secara automatik, jika false, anda perlu menyerahkan anjakan secara manual dalam program. Untuk semantik tepat sekali, lebih baik menyerahkan anjakan secara manual 🎜🎜🎜🎜fetch.max.bytes: Bilangan maksimum bait data yang ditarik dalam satu masa 🎜🎜🎜🎜max.poll.records: Mesej maksimum dikembalikan dengan satu panggilan tinjauan pendapat Jika logik pemprosesan sangat ringan, anda boleh meningkatkan nilai ini dengan sewajarnya. Tetapimax.poll. data rekod perlu diproses dalam session.timeout.ms. Nilai lalai ialah 500🎜🎜🎜🎜request.timeout.ms: masa menunggu maksimum untuk respons permintaan. Jika tiada balasan diterima dalam tempoh tamat masa, Kafka sama ada akan menghantar semula mesej atau terus gagal jika bilangan percubaan semula melebihi.
Kafka Rebalance
rebalance pada dasarnya adalah protokol yang menetapkan cara semua pengguna di bawah kumpulan pengguna boleh mencapai persetujuan untuk memperuntukkan setiap partition topik langganan. Sebagai contoh, terdapat 20 pengguna di bawah kumpulan tertentu, dan ia melanggan topik dengan 100 sekatan. Dalam keadaan biasa, Kafka memperuntukkan purata 5 partition kepada setiap pengguna. Proses peruntukan ini dipanggil pengimbangan semula.
Bila hendak mengimbangi semula?
Ini juga soalan yang sering disebut. Terdapat tiga syarat pencetus untuk pengimbangan semula:
Ahli kumpulan bertukar (pengguna baharu menyertai kumpulan, pengguna sedia ada meninggalkan kumpulan secara sukarela, atau kemalangan pengguna sedia ada - perbezaan antara keduanya akan dibincangkan kemudian)
Langgan topik Bilangan partition telah berubah
Bilangan partition yang melanggan topik telah berubah
Bagaimana untuk memperuntukkan partition dalam kumpulan?
Kafka menyediakan dua strategi peruntukan secara lalai: Julat dan Round-Robin. Sudah tentu, Kafka menggunakan strategi peruntukan boleh pasang dan anda boleh membuat pengalokasi anda sendiri untuk melaksanakan strategi peruntukan yang berbeza.
Kata Kunci Jawapan
Apakah alatan baris arahan untuk Kafka? Mana satu yang telah anda gunakan? /binDirektori, urus kluster kafka, urus topik, hasilkan dan gunakan kafka
Proses pelaksanaan Kafka Producer? Pemintas, Pensiri, Pembahagi dan Akumulator
Apakah konfigurasi biasa Pengeluar Kafka? Konfigurasi broker, konfigurasi ack, rangkaian dan parameter penghantaran, parameter mampatan, parameter ack
Bagaimana untuk memastikan mesej Kafka teratur? Kafka sendiri tidak tersusun pada peringkat topik, dan hanya dipesan pada partition Oleh itu, untuk memastikan susunan pemprosesan, anda boleh menyesuaikan partitioner dan menghantar data yang perlu diproses secara berurutan ke partition yang sama memastikan data dihantar dengan lancar? mekanisme ack, mekanisme cuba semula
Bagaimana untuk meningkatkan prestasi Penerbit? Batch, asynchronous, compression
Jika bilangan pengguna dalam kumpulan yang sama lebih besar daripada bilangan bahagian, bagaimana Kafka mengendalikannya? Bahagian yang berlebihan akan berada dalam keadaan tidak berguna dan tidak akan menggunakan data
Adakah benang Pengguna Kafka selamat? Penggunaan benang tunggal yang tidak selamat, pemprosesan berbilang benang
Beritahu saya tentang model benang apabila anda menggunakan Kafka Consumer untuk menggunakan mesej Mengapa ia direka bentuk seperti ini? Pengasingan menarik dan memproses
Konfigurasi biasa Pengguna Kafka? broker, rangkaian dan parameter tarik, parameter degupan jantung
Bilakah Pengguna akan ditendang keluar daripada kluster? Ranap sistem, keabnormalan rangkaian, masa pemprosesan yang lama, tamat masa anjakan penyerahan
Bagaimanakah reaksi Kafka apabila Pengguna menyertai atau keluar? Lakukan Rebalance
Apakah Rebalance dan bila Rebalance berlaku? Perubahan topik, perubahan pengguna
Ketersediaan dan prestasi tinggi
Soalan
Bagaimana Kafka memastikan ketersediaan tinggi?
Semantik penyampaian Kafka?
Apa yang Replic lakukan?
Apa masalahnya AR, ISR?
Apakah Pemimpin dan Bunga?
Apakah maksud HW, LEO, LSO, LW, dll dalam Kafka?
Apakah pemprosesan yang telah Kafka lakukan untuk memastikan prestasi yang unggul?
Partition and Replica
Dalam sistem data teragih, partition biasanya digunakan untuk meningkatkan kapasiti pemprosesan data melalui replika yang tinggi. Multi-partitioning bermaksud keupayaan untuk memproses secara serentak Di antara salinan berbilang ini, hanya satu yang menjadi ketua, dan yang lain adalah salinan pengikut. Hanya salinan pemimpin yang boleh memberikan perkhidmatan kepada dunia luar. Salinan berbilang pengikut biasanya disimpan dalam broker yang berbeza daripada salinan pemimpin. Melalui mekanisme ini, ketersediaan tinggi dicapai Apabila mesin ditutup, salinan pengikut lain boleh dengan cepat "berubah menjadi normal" dan mula menyediakan perkhidmatan kepada dunia luar.
Kenapa follower copy tidak menyediakan perkhidmatan baca?
Masalah ini pada asasnya adalah pertukaran antara prestasi dan konsistensi. Cuba bayangkan, apa yang akan berlaku jika salinan pengikut turut memberikan perkhidmatan kepada dunia luar? Pertama sekali, prestasi pasti akan dipertingkatkan. Tetapi pada masa yang sama, beberapa siri masalah akan timbul. Sama seperti bacaan hantu dan bacaan kotor dalam transaksi pangkalan data. Sebagai contoh, jika anda menulis sekeping data ke topik Kafka a, pengguna b menggunakan data daripada topik a, tetapi mendapati ia tidak boleh menggunakannya kerana mesej terkini belum ditulis pada salinan partition yang dibaca oleh pengguna b. Pada masa ini, pengguna lain c boleh menggunakan data terkini kerana ia menggunakan salinan pemimpin. Kafka menggunakan pengurusan WH dan Offset untuk menentukan data yang boleh digunakan oleh Pengguna dan data yang ditulis pada masa ini. . Sudah tentu, salinan pemimpin sentiasa wujud dalam set salinan ISR Dalam beberapa kes khas, terdapat hanya satu salinan pemimpin dalam salinan ISR. Apabila ketua gagal, kakfa merasakan situasi ini melalui zookeeper, memilih salinan baru dalam salinan ISR untuk menjadi ketua, dan memberikan perkhidmatan kepada dunia luar. Tetapi ada masalah lain dengan ini, seperti yang dinyatakan sebelum ini, mungkin hanya ada pemimpin dalam set replika ISR Apabila replika pemimpin mati, set ISR akan menjadi kosong. Pada masa ini, jika parameter unclean.leader.election.enable ditetapkan kepada benar, Kafka akan memilih replika untuk menjadi peneraju dalam asynchronous, iaitu replika yang tiada dalam set replika ISR.
Atas ialah kandungan terperinci Selesai Kafka dari perspektif temu bual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!