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.
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
Konsep umum dalam seni bina Kafka:
Kafka Topic Partitions Layout
Kafka partition Topic, dan partition boleh dibaca dan ditulis serentak.
Kafka Consumer Offset
Imbangan pengguna didaftarkan kepada kluster.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
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-console-consumer.sh
和kafka-console-producer.sh
脚本来测试 Kafka 生产和消费,kafka-consumer-groups.sh
可以查看和管理集群中的 Topic,kafka-topics.sh
Logik pengeluaran biasa pengeluar Kafka termasuk langkah berikut:
Proses penghantaran mesej pengeluar ditunjukkan dalam rajah di bawah. Ia perlu dihantar kepada Broker secara berkelompok. 拦截器
,序列化器
和分区器
,最终由累加器
value .serializer:value Serializer
batch.num.messages
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 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:
key.serializer
sepadan dengan kaedah penyahserialisasian kunci.
value.serializer
sepadan dengan kaedah penyahserialisasian nilai. host:port
格式。key.serializer
对应,key 的反序列化方式。value.serializer
对应,value 的反序列化方式。false
,则需要在程序中手动提交位移。对于精确到一次的语义,最好手动提交位移max.poll.records
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.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:
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.
/bin
Direktori, urus kluster kafka, urus topik, hasilkan dan gunakan kafkaDalam 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.
Kafka mengekalkan senarai replika (ISR) yang tersedia dalam semua replika (AR) yang diperuntukkan Apabila Pengeluar menghantar mesej kepada Broker, ia akan menguruskan penyegerakan data antara bunga dan pemimpin berdasarkan perkhidmatan ack
配置来确定需要等待几个副本已经同步了消息才相应成功,Broker 内部会ReplicaManager
. .
Bagaimana Kafka memastikan ketersediaan yang tinggi?
Gunakan replika untuk memastikan ketersediaan data yang tinggi, ack pengeluar, cuba semula, pemilihan Pemimpin automatik, Pengimbangan diri pengguna
Semantik penyampaian Kafka?
Semantik penyampaian umumnya mempunyai
at least once
、at most once
和exactly once
. Kafka melaksanakan dua yang pertama melalui konfigurasi ack.
Apa yang Replic lakukan?
Mencapai ketersediaan data yang tinggi
Apakah AR dan ISR?
AR: Replika Ditugaskan. AR ialah set replika yang diperuntukkan apabila partition dibuat selepas topik dibuat. Bilangan replika ditentukan oleh faktor replika. ISR: Replika Dalam Segerak. Konsep yang sangat penting dalam Kafka merujuk kepada set replika dalam AR yang disegerakkan dengan Pemimpin. Replika dalam AR mungkin bukan dalam ISR, tetapi replika Leader secara semula jadi termasuk dalam ISR. Mengenai ISR, satu lagi soalan temu bual biasa ialah bagaimana untuk menentukan sama ada salinan harus dimiliki oleh ISR. Pertimbangan semasa adalah berdasarkan sama ada masa apabila LEO replika Pengikut ketinggalan di belakang LEO Pemimpin melebihi nilai parameter bahagian Broker replica.lag.time.max.ms. Jika melebihi, replika dikeluarkan daripada ISR.
Apakah Pemimpin dan Bunga?
Apakah maksud HW di Kafka?
Tera air tinggi. Ini adalah medan penting yang mengawal skop mesej yang boleh dibaca oleh pengguna. Pengguna biasa hanya boleh "melihat" semua mesej pada replika Pemimpin antara Log Mula Offset dan HW (eksklusif). Mesej di atas paras air tidak dapat dilihat oleh pengguna.
Apakah pemprosesan yang telah Kafka lakukan untuk memastikan prestasi yang unggul?
konkurensi partition, membaca dan menulis secara berurutan ke cakera, pemampatan cache halaman, serialisasi berprestasi tinggi (perduaan), pengurusan offset bebas kunci pemetaan memori, model Java NIO
Artikel ini tidak termasuk dalam pelaksanaan butiran dan analisis kod sumber Kafka , tetapi Kafka sememangnya merupakan sistem sumber terbuka yang sangat baik keupayaan reka bentuk seni bina, keupayaan pengekodan dan Pengoptimuman prestasi akan sangat membantu.
Atas ialah kandungan terperinci Selesai Kafka dari perspektif temu bual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!