Panduan ini meneroka offset kumpulan pengguna Kafka, yang penting untuk menjejak kemajuan penggunaan mesej. Setiap kumpulan pengguna mengekalkan offset untuk setiap partition yang digunakan, menunjukkan rekod terakhir yang diproses. Ini memastikan pengguna menyambung semula dari kedudukan yang betul selepas dimulakan semula.
Imbangan kumpulan pengguna ialah pengecam berangka mudah yang menjejaki kedudukan pengguna dalam partition topik Kafka. Setiap partition mempunyai offset berjujukan untuk setiap rekod. Kumpulan pengguna menggunakan offset ini untuk mengingati tempat ia berhenti. Sebagai contoh, bacaan kumpulan pengguna daripada topik dua bahagian (P1 dan P2) akan mempunyai offset berasingan untuk setiap satu, mewakili rekod bacaan terakhir dalam P1 dan P2 masing-masing.
Storan ofset boleh dikendalikan dalam dua cara: dalam Kafka sendiri atau dalam sistem luaran (pangkalan data atau fail). Artikel ini memfokuskan pada mekanisme storan offset dalaman Kafka.
Kafka menyimpan offset dalam topik dalaman khas bernama __consumer_offsets
. Pustaka pelanggan Kafka mengendalikan storan dan pengambilan mengimbangi, membolehkan pengguna menyambung semula dengan lancar dari kedudukan terakhir mereka yang diketahui selepas dimulakan semula.
Jika tiada offset ditemui untuk pengguna, konfigurasi auto.offset.reset
menentukan tingkah laku pengguna:
latest
(lalai): Pengguna bermula dari penghujung topik, mengabaikan mesej sedia ada.earliest
: Pengguna bermula dari permulaan topik, memproses semua mesej yang tersedia.none
: Pengecualian dilemparkan jika tiada offset ditemui.Autokomit memudahkan pengurusan offset dengan melakukan offset secara berkala kepada Kafka. Ini berlaku secara automatik setiap 5 saat secara lalai (dikawal oleh enable.auto.commit
). Walaupun mudah, ia berisiko kehilangan data.
Oleh kerana autokomit beroperasi dalam urutan yang berasingan, ia tidak menjejaki pemprosesan rekod dalam penerbangan. Jika pengguna meninjau berbilang rekod dan auto-komit sebelum pemprosesan selesai, kehilangan data boleh berlaku apabila gagal.
Komit manual menawarkan kawalan yang tepat. Dengan melumpuhkan autokomit (enable.auto.commit=false
), anda secara eksplisit melakukan offset menggunakan commitSync()
atau commitAsync()
selepas berjaya memproses rekod. Ini menghalang kehilangan data.
<code class="language-java">while (true) { records = consumer.poll(timeout); // process records consumer.commitSync(); // or consumer.commitAsync() }</code>
Auto-Commit sesuai jika permohonan anda:
jika tidak, komit manual disyorkan.
Manual Commit menawarkan pilihan segerak (commitSync()
) dan asynchronous (commitAsync()
). commitSync()
blok sehingga komit disahkan, memastikan kegigihan tetapi mempengaruhi prestasi. commitAsync()
tidak menyekat tetapi memerlukan pengendalian yang berpotensi.
offset kumpulan pengguna adalah asas untuk penggunaan Kafka yang boleh dipercayai. Walaupun auto-commit memudahkan perkara, komit manual memberikan kawalan yang lebih besar dan keselamatan data. Pilihan antara serentak dan asynchronous berkomitmen bergantung pada keperluan aplikasi anda, mengimbangi prestasi dan kebolehpercayaan. Memahami mekanisme ini adalah kunci untuk membina aplikasi Kafka yang teguh dan bersalah.
Pertimbangkan untuk meneroka kursus mini Kafka percuma yang terdapat di Coding Harbour.
Photo Credit: @kencheungphoto
Atas ialah kandungan terperinci Pengguna Kafka – Mengimbangi kumpulan pengguna yang komited. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!