Gesaan dan konteks
Soalan ini menguji pemindahan pemilikan teragih dan bukannya menghafal tetapan Kafka semata-mata. Pengimbangan semula eager membatalkan semua sekatan terlebih dahulu, manakala pengimbangan semula koperatif membolehkan ahli mengekalkan sekatan yang tidak perlu dipindahkan dan hanya membatalkan set migrasi. Jawapan yang lengkap merangkumi versi ahli, protokol assignor, komit ofset, tetingkap kegagalan, dan telemetri.
Perkara yang dinilai oleh penemu duga
- Sama ada anda menerangkan perbezaan pembatalan (revoke) dan serahan (handoff) antara protokol eager dan koperatif.
- Sama ada anda merancang susunan bergolek yang serasi dan bukannya menganggap satu ahli boleh beralih secara bersendirian.
- Sama ada pemilikan, ofset, kerja dalam proses (in-flight work), dan masa komit adalah selaras.
- Sama ada ranap sistem, tamat masa (timeouts), pendua, rollback, dan had kapasiti dikendalikan.
Soalan penjelasan
Sahkan versi klien, senarai assignor semasa, keahlian statik, masa pemprosesan setiap mesej, tetingkap pendua yang boleh diterima, dan belanjawan kependaman pengimbangan semula. Tanya sama ada pemprosesan bersifat idempoten, sama ada sinki menyokong penyahduplikasian, dan sama ada pelaksanaan boleh dilakukan secara berperingkat dan diundur balik (rollback). Tetapkan penskalaan puncak, bilangan sekatan, dan ambang amaran.
Rangka jawapan 30 saat
Mula-mula tingkatkan setiap ahli kepada versi yang menyokong protokol koperatif sambil mengekalkan senarai assignor yang serasi. Sebaik sahaja sokongan protokol adalah seragam, lancarkan CooperativeStickyAssignor sebagai strategi pilihan dan alih keluar strategi lama. Setiap pengimbangan semula hanya membatalkan sekatan yang berpindah; pengguna berhenti mengambil sekatan tersebut, melakukan komit pada ofset yang telah selesai, dan pemilik baharu menyambung semula daripada ofset yang dikomit. Pantau bilangan pengimbangan semula, sekatan yang dibatalkan, kependaman pemprosesan, dan pendua. Ranap bergantung pada tamat masa sesi dan pemulihan ofset; rollback memulihkan konfigurasi serasi lama melalui satu lagi perubahan bergolek.
Penyelesaian langkah demi langkah
1. Tentukan matriks keserasian protokol
Assignor dirundingkan pada peringkat kumpulan, jadi menukar satu tika sahaja tidak mencukupi. Tingkatkan semua klien kepada versi yang memahami pengimbangan semula koperatif sebelum bergantung padanya. Kekalkan entri keserasian semasa fasa pertama, kemudian utamakan koperatif dan alih keluar strategi lama selepas kumpulan bersedia:
partition.assignment.strategy=\
org.apache.kafka.clients.consumer.CooperativeStickyAssignor,\
org.apache.kafka.clients.consumer.RangeAssignorSahkan protokol dan tugasan yang dirundingkan oleh kumpulan selepas setiap fasa; memeriksa fail konfigurasi sahaja bukanlah bukti bahawa kumpulan yang sedang berjalan telah beralih.
2. Reka bentuk pembatalan dan serahan sekatan
Set pembatalan koperatif hanya mengandungi sekatan yang mesti dipindahkan. Semasa pembatalan, hentikan pengambilan sekatan tersebut, selesaikan atau lepaskan kelompok selamat semasa, dan komit ofset yang telah selesai. Teruskan memproses sekatan yang tidak dibatalkan. Pemilik baharu bermula daripada ofset yang dikomit, jadi kunci keidempotenan perniagaan atau penyahduplikasian sinki mengendalikan pendua.
3. Selaraskan ofset dengan kerja dalam proses
Lakukan komit selepas kesan sampingan perniagaan, jangan sekali-kali sebelumnya. Jika pembatalan tiba semasa suatu kelompok sedang diproses, tetapkan bendera henti dan selesaikan pada titik selamat; apabila mencapai had masa, hentikan pengambilan dan rekod kelompok yang belum selesai. Pemprosesan tak segerak memerlukan penjejakan urutan bagi setiap sekatan supaya hanya awalan (prefix) lengkap yang berturutan sahaja dikomit.
4. Rancang pelancaran bergolek (rolling rollout)
Pengawal pelancaran memulakan semula kelompok kecil ahli dan menunggu kestabilan kumpulan serta pemulihan lag selepas setiap kelompok. Rekod garis dasar, tingkatkan klien, perhatikan protokol, tukar kepada assignor pilihan, latih perubahan skala, dan hanya selepas itu tingkatkan saiz kelompok. Jeda sekiranya berlaku ribut pengimbangan semula atau pelanggaran kependaman dan bukannya menukar tamat masa sesi dan max poll interval pada masa yang sama.
5. Reka bentuk tingkah laku ranap dan rollback
Selepas ahli ranap, penyelaras memperuntukkan semula sekatannya apabila tamat masa sesi tamat. Pengganti menyambung semula dari ofset terakhir yang dikomit, jadi kesan sampingan sebelum ranap mungkin berulang. Rollback memulihkan assignor lama dalam senarai keserasian dan menggunakan susunan bergolek yang sama; jangan alih keluar ahli baharu yang masih berjalan secara paksa. Rekod generasi, ID ahli, set pembatalan, dan kegagalan komit untuk diagnosis keadaan berlumba (race conditions).
6. Tambah kawalan kapasiti dan telemetri
Jejak kekerapan dan tempoh pengimbangan semula, bilangan sekatan yang dibatalkan, lag pengguna, selang poll, kependaman komit, kadar pendua, dan ahli yang tidak ditugaskan. Uji permulaan semula serentak, sekatan panas (hot partitions), pemprosesan melebihi max.poll.interval, jitter rangkaian, dan kiraan sekatan yang hampir dengan kiraan ahli. Jika kapasiti tidak mencukupi, kurangkan saiz kelompok pelancaran atau tambah pengguna sebelum meneruskan.
Contoh jawapan berkualiti tinggi
Saya akan mengesahkan bahawa setiap klien menyokong penugasan koperatif, kemudian menggunakan konfigurasi bergolek dua fasa: mengekalkan assignor yang serasi semasa menaik taraf versi, dan hanya selepas itu mengutamakan CooperativeStickyAssignor serta mengalih keluar strategi lama. Panggilan balik pembatalan hanya menghentikan sekatan yang sedang berpindah, menyelesaikan titik selamat, dan melakukan komit pada ofset berturutan; sekatan yang dikekalkan diteruskan. Pemilik baharu menyambung semula daripada ofset yang dikomit, dengan keidempotenan mengendalikan pendua. Pengawal kelompok kecil memerhatikan pengimbangan semula, lag, selang poll, kegagalan komit, dan kadar pendua. Ranap pulih melalui tamat masa sesi dan ofset, manakala rollback mengikut susunan bergolek serasi yang sama dan bukannya memadamkan ahli aktif secara paksa.
Kesilapan biasa
- Menukar satu pengguna sahaja dan mengabaikan perundingan assignor peringkat kumpulan.
- Menganggap pengimbangan semula koperatif sebagai jeda sifar (zero pause) sedangkan sekatan yang berpindah masih perlu diserahkan.
- Melakukan komit ofset sebelum kesan sampingan perniagaan berlaku.
- Mengambil data selepas pembatalan atau melakukan komit pada hasil tak segerak yang tidak berturutan.
- Menukar beberapa tetapan tamat masa secara serentak dan kehilangan bukti punca.
- Hanya memerhatikan lag sambil mengabaikan kekerapan pengimbangan semula, set pembatalan, dan pendua.
Soalan susulan
Adakah pengimbangan semula koperatif menjamin sifar pendua?
Tidak. Ranap, percubaan semula komit, dan sempadan pembatalan boleh mengulangi kerja. Matlamatnya adalah untuk mengurangkan jeda keseluruhan kumpulan dan mengehadkan tetingkap pendua; sinki masih memerlukan keidempotenan atau penyahduplikasian.
Mengapakah setiap ahli mesti menyokong penugasan koperatif?
Protokol assignor dirundingkan oleh kumpulan. Ahli yang tidak dapat menghurai atau melaksanakan semantik koperatif boleh menyebabkan perundingan gagal atau memaksa tingkah laku eager, jadi versi yang serasi mesti dilancarkan terlebih dahulu.
Bagaimana jika pemprosesan melebihi max.poll.interval?
Gunakan kelompok yang lebih kecil, kolam tak segerak yang terkawal, atau perubahan parameter yang disemak dengan teliti sambil mengekalkan panggilan poll tepat pada masanya. Hanya meningkatkan tamat masa boleh melambatkan pengesanan kegagalan dan memanjangkan pemilikan sekatan.
Bagaimanakah anda mengesahkan keselamatan rollback?
Suntik ranap ahli, jitter rangkaian, dan kegagalan komit dalam kumpulan staging. Rekod generasi, ofset, set pembatalan, dan kesan sampingan yang dinyahduplikasi. Sahkan bahawa assignor lama stabil dalam matriks keserasian tanpa melangkau ofset yang belum dikomit.