Topik temu duga representatif

Bagaimanakah Kafka Streams harus berhijrah ke protokol pengimbangan semula berasaskan broker?

BackendSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Aplikasi Kafka Streams anda mesti beralih daripada protokol klasik kepada Streams Rebalance Protocol Kafka 4.2. Terangkan masalah yang diselesaikannya, laluan migrasi, keupayaan yang tidak disokong, dan cara anda mengesahkan bahawa keadaan (state) serta ofset adalah selamat.

Gesaan dan skop

Anda memiliki aplikasi Kafka Streams berkeadaan (stateful) yang menggunakan protokol kumpulan klasik. Selepas menaik taraf kepada Kafka 4.2, pasukan ingin menggunakan Streams Rebalance Protocol berasaskan broker untuk mengurangkan jeda penyelarasan global apabila tika (instance) menyertai, meninggalkan, atau gagal. Penemu duga meminta pelan migrasi, sempadan keserasian, dan pelan pengunduran.

Andaikan Kafka Streams 4.2.x, topik changelog dan pemetakan semula (repartition) sedia ada, serta tiada pembinaan semula keadaan penuh yang tidak dirancang. Panduan rasmi menyatakan protokol baharu mengira tugasan tugas secara berterusan pada broker dan menggunakan kumpulan streams khusus. Kluster Kafka 4.2 baharu mendayakan ciri ini secara lalai, tetapi klien masih menetapkan group.protocol=streams.

Perkara yang dinilai oleh penemu duga

  • Sama ada anda menerangkan cara penyelarasan berasaskan broker menyingkirkan sekatan global sisi klien dan bukannya sekadar menghafal tetapan.
  • Sama ada anda membezakan antara kumpulan streams baharu, peningkatan kumpulan klasik dalam talian, dan migrasi luar talian yang disokong.
  • Sama ada anda menyemak versi broker dan klien serta risiko KAFKA-20254 dalam 4.2.0.
  • Sama ada anda mengetahui bahawa ofset yang dikomit dipelihara manakala metadata kumpulan lain dibina semula.
  • Sama ada anda menukar ketiadaan keahlian statik, kemas kini topologi, dan sokongan regex menjadi pintu pelepasan (release gates).

Jawapan yang lemah menyatakan "tukar tetapan dan laksanakan pelancaran berperingkat (roll)." Jawapan yang kuat menginventori jurang versi dan ciri, memilih kumpulan baharu atau migrasi tetingkap penyelenggaraan, serta merekodkan ofset, changelog, topik pemetakan semula, dan objektif pemulihan.

Penjelasan sebelum menjawab

  1. Adakah Kafka dan klien Streams kedua-duanya sekurang-kurangnya versi 4.2? Jika tidak, protokol lengkap tidak boleh didayakan dengan selamat.
  2. Adakah aplikasi bergantung pada keahlian statik, kemas kini topologi dalam talian, langganan regex, atau tugasan tunggu sedia/peka-rak (rack-aware)? Sebarang kebergantungan boleh menyekat migrasi.
  3. Bolehkah setiap tika berhenti sementara kumpulan menjadi kosong? Laluan 4.2 rasmi menyokong migrasi luar talian sahaja.
  4. Adakah versinya 4.2.0 atau 4.2.1 dan ke atas? 4.2.0 mempunyai pepijat broker yang diketahui dalam migrasi luar talian, yang dibetulkan dalam 4.2.1.
  5. Bolehkah application.id baharu digunakan? Kumpulan baharu mengasingkan risiko tetapi membina semula keadaan dan mengubah pengurusan ofset.

Jawapan-jawapan ini mengubah pelan: jika masa henti (downtime) mustahil, jangan mendakwa migrasi dalam talian; jika ciri yang tidak disokong diperlukan, kekal pada protokol klasik atau lakukan refaktor terlebih dahulu.

Rangka kerja jawapan 30 saat

"Saya terlebih dahulu mengesahkan bahawa broker dan klien berada pada versi 4.2.x dan menginventori ciri yang tidak disokong oleh protokol baharu. Streams Rebalance Protocol memindahkan penyelarasan tugas kepada broker dan menyingkirkan sekatan global sisi klien, tetapi migrasinya bukanlah penggunaan pelancaran berperingkat yang biasa. Laluan yang didokumenkan mengosongkan kumpulan, menetapkan group.protocol=streams, dan memulakan tika. Hanya ofset yang dikomit dipelihara; topik changelog dan pemetakan semula kekal, manakala metadata kumpulan lain dibina semula. Saya akan mengelakkan 4.2.0 dan menggunakan 4.2.1 atau lebih baharu, merekodkan ofset dan titik semak keadaan, mengesahkan metrik pemulihan, kependaman, dan pengimbangan semula, serta berundur ke klasik atau membina semula dengan ID aplikasi baharu jika semakan gagal."

Penyelesaian langkah demi langkah

1. Terangkan apa yang berubah

Kumpulan Streams klasik mengira tugasan tugas ahli pada klien, yang boleh mewujudkan titik penyelarasan global semasa perubahan keahlian. Protokol baharu menyimpan metadata kumpulan streams dan tugasan tugas pada broker; aplikasi menyelaraskan melalui degupan jantung (heartbeat) dan kumpulan streams khusus. Panduan rasmi menerangkan ini sebagai berasaskan broker dan menyediakan keadaan kumpulan streams serta Admin API yang berasingan.

2. Inventori jurang keupayaan

Kafka 4.2 mendokumenkan had yang jelas: keahlian statik tidak tersedia; kemas kini topologi yang ketara memerlukan kumpulan streams baharu; hanya penugaskan tugas lekit (sticky task assignor) disokong, jadi tugas memanaskan badan (warmup tasks) dan penugasan peka-rak tidak tersedia; langganan corak tidak disokong; dan migrasi dalam talian antara kumpulan klasik dan streams tidak tersedia. Letakkan perkara ini pada senarai semak pelepasan sebelum menukar protokol.

3. Pilih laluan migrasi

Laluan luar talian yang didokumenkan adalah: hentikan setiap tika, tunggu session.timeout.ms atau keluar secara eksplisit supaya kumpulan kosong, tetapkan group.protocol=streams, dan mulakan tika. Hanya ofset yang dikomit dikekalkan pada broker. Topik changelog dan pemetakan semula kekal sebagai topik dalaman biasa; metadata kumpulan lain dibina semula.

text
Stop all instances
      ↓
Confirm an empty streams group and record committed offsets
      ↓
Upgrade brokers and clients to a compatible version
      ↓
Set group.protocol=streams
      ↓
Start instances and observe recovery and rebalance metrics

Jika tetingkap penyelenggaraan tidak boleh diterima, kekalkan protokol klasik atau gunakan application.id baharu untuk pengesahan bayangan (shadow validation). Jangan pindahkan andaian peningkatan pelancaran berperingkat bagi pengguna klasik kepada Streams Rebalance Protocol.

4. Tangani risiko versi

Panduan peningkatan Kafka memberi amaran bahawa migrasi luar talian daripada klasik ke streams dalam 4.2.0 terjejas oleh pepijat sisi broker KAFKA-20254 dan mengesyorkan agar tidak melakukannya. Pembetulan ada dalam 4.2.1. Dalam temu duga, jadikan 4.2.1 sebagai versi migrasi minimum dan bukannya sekadar mengatakan bahawa "Kafka 4.2 menyokongnya."

5. Reka bentuk semakan keadaan dan ofset

Sebelum migrasi, rekodkan ofset yang dikomit bagi setiap topik input, status changelog, dan kependaman pemprosesan. Selepas migrasi, sahkan bahawa kumpulan baharu menyambung semula daripada ofset yang dijangkakan, stor keadaan dipulihkan daripada changelog, topik pemetakan semula masih wujud dengan bilangan petak yang sama, dan rekod pendua atau yang hilang sepadan dengan semantik pemprosesan yang dipersetujui. Bandingkan dengan garis dasar pra-migrasi daripada sekadar menyemak pemulaan proses sahaja.

6. Pantau dan undur semula (rollback)

Gunakan keadaan kumpulan streams, kiraan/kadar pengimbangan semula, tempoh pemulihan, kependaman pemprosesan, dan kadar ralat sebagai permukaan pemerhatian. Jika pemulihan tamat masa atau semakan hasil gagal, hentikan kumpulan baharu, pelihara ofset dan log, serta kembalikan konfigurasi kepada klasik. Jika kumpulan klasik telah pun dikosongkan, pemulihan memerlukan sandaran atau ID aplikasi baharu; metadata kumpulan tidak akan kembali secara ajaib.

Contoh jawapan berkualiti tinggi

"Saya tidak akan menganggap ini sebagai pelepasan pelancaran berperingkat yang biasa. Mula-mula saya mengesahkan broker dan klien 4.2.x serta menyemak keahlian statik, kemas kini topologi dalam talian, langganan regex, warmup, atau penugasan peka-rak. Oleh kerana laluan rasmi adalah luar talian, saya memilih 4.2.1 atau lebih baharu, menghentikan setiap tika dalam tetingkap penyelenggaraan, mengesahkan kumpulan kosong, merekodkan ofset yang dikomit dan titik semak stor keadaan, dan kemudian menetapkan group.protocol=streams.

"Selepas perubahan tersebut, saya mengesahkan bahawa ofset diteruskan, changelog memulihkan stor keadaan, topik pemetakan semula kekal, dan keadaan kumpulan streams, metrik pengimbangan semula, masa pemulihan, serta kependaman perniagaan adalah sihat. Hanya ofset yang dikomit dipelihara; metadata kumpulan lain dibina semula. 4.2.0 membawa risiko KAFKA-20254, jadi saya tidak akan memanggilnya sebagai versi migrasi yang selamat. Jika pengesahan gagal, saya menghentikan kumpulan baharu, kembali kepada klasik, atau membina semula dengan ID aplikasi baharu dan mengekalkan bukti untuk semakan."

Kesilapan lazim

  • Kesilapan: menganggap group.protocol=streams sebagai suis pelancaran berperingkat → Mengapa ia gagal: migrasi dalam talian tidak disokong → Pembetulan: jadualkan tetingkap penyelenggaraan kumpulan kosong.
  • Kesilapan: berhijrah pada 4.2.0 → Mengapa ia gagal: panduan peningkatan rasmi merekodkan KAFKA-20254 → Pembetulan: gunakan 4.2.1 atau lebih baharu dengan pembetulan tersebut.
  • Kesilapan: menjanjikan setiap keadaan kumpulan dipelihara → Mengapa ia gagal: hanya ofset yang dikomit kekal dan metadata lain dibina semula → Pembetulan: rekodkan semakan ofset, stor keadaan, dan topik yang berasingan.
  • Kesilapan: mengabaikan keahlian statik atau kemas kini topologi → Mengapa ia gagal: protokol baharu belum menyokongnya → Pembetulan: inventori ciri dan kekal pada klasik apabila perlu.

Soalan susulan dan respons

Perniagaan tidak boleh berhenti. Bolehkah dua kelompok tika bertukar secara beransur-ansur?

Jangan gambarkan itu sebagai migrasi Streams yang didokumenkan. Jika masa henti adalah mustahil, kekalkan klasik atau cipta ID aplikasi baharu untuk pengesahan bayangan, kemudian biarkan lapisan perniagaan menyerap kos pembinaan semula keadaan bagi pertukaran (cutover).

Mengapa perlu mengesahkan stor keadaan jika ofset yang dikomit kekal?

Ofset menyatakan tempat untuk membaca seterusnya, bukannya keadaan tempatan telah lengkap. Main semula changelog, ketidakserasian, atau kegagalan pemprosesan boleh menyebabkan stor keadaan tidak konsisten dengan ofset, jadi sahkan keadaan dan hasil perniagaan.

4.2.0 ialah GA. Mengapa perlu mengelakkannya?

GA bermaksud ciri tersebut telah dikeluarkan, bukan bermakna setiap laluan migrasi bebas daripada kecacatan yang diketahui. Panduan rasmi mengenal pasti KAFKA-20254 dalam migrasi luar talian dan menyatakan ia telah dibetulkan dalam 4.2.1; pilih versi pembetulan, bukan label GA.

Aplikasi menggunakan langganan regex. Bagaimana sekarang?

Protokol streams baharu tidak menyokong langganan topik berasaskan corak. Kekal pada klasik atau tukar penemuan kepada senarai topik yang eksplisit sebelum mempertimbangkan semula migrasi; menukar protokol kumpulan sahaja tidak mencukupi.

Bagaimanakah anda memutuskan sama ada hendak menggunakan ID aplikasi baharu?

Gunakan satu apabila pengesahan selari diperlukan, kumpulan lama tidak boleh dikosongkan dengan selamat, atau risiko pemulihan keadaan mesti diasingkan. Kosnya ialah pemprosesan semula, pembinaan semula stor keadaan, dan sumber tambahan, jadi anggarkan masa pemulihan dan storan terlebih dahulu.

Rujukan

  • Panduan pembangun Apache Kafka Streams Rebalance Protocol.
  • Panduan Peningkatan Apache Kafka 4.2 Streams.
  • Pengumuman Pelepasan Apache Kafka 4.2.0.

Sumber awam

Soalan berkaitan