Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Hey Habr!

We ngelingake sampeyan sing nderek buku babagan Kafka kita wis diterbitake karya merata menarik babagan perpustakaan Kafka Streams API.

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Saiki, komunitas mung sinau watesan alat sing kuat iki. Dadi, artikel bubar diterbitake, terjemahan sing arep kita kenalake. Saka pengalamane dhewe, penulis nyritakake carane ngowahi Kafka Streams dadi panyimpenan data sing disebarake. Seneng maca!

perpustakaan Apache Aliran Kafka digunakake ing saindhenging donya ing Enterprises kanggo mbagekke stream Processing ing ndhuwur Apache Kafka. Salah siji saka aspek underappreciated framework iki ngijini sampeyan kanggo nyimpen negara lokal diprodhuksi adhedhasar Processing thread.

Ing artikel iki, aku bakal menehi pitutur marang kowe carane perusahaan kita bisa nggunakake kesempatan iki kanthi bathi nalika ngembangake produk kanggo keamanan aplikasi awan. Nggunakake Kafka Streams, kita nggawe layanan mikro negara sing dienggo bareng, sing saben-saben dadi sumber informasi sing bisa dipercaya lan bisa dipercaya babagan kahanan obyek ing sistem kasebut. Kanggo kita, iki minangka langkah maju ing babagan linuwih lan gampang dhukungan.

Yen sampeyan kasengsem ing pendekatan alternatif sing ngidini sampeyan nggunakake database pusat siji kanggo ndhukung negara formal obyek, maca, iku bakal menarik ...

Napa kita mikir iki wektu kanggo ngganti cara kerja karo negara sing dienggo bareng

Kita kudu njaga kahanan macem-macem obyek adhedhasar laporan agen (contone: situs kasebut diserang)? Sadurunge pindhah menyang Kafka Streams, kita kerep ngandelake database pusat siji (+ layanan API) kanggo manajemen negara. Pendekatan iki nduweni kekurangan: tanggal kahanan intensif njaga konsistensi lan sinkronisasi dadi tantangan nyata. Database bisa dadi bottleneck utawa mungkasi kahanan lomba lan nandhang sangsara saka unpredictability.

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Gambar 1: Skenario pamisah negara sing khas katon sadurunge transisi menyang
Aliran Kafka lan Kafka: agen ngandhani panemune liwat API, negara sing dianyari diitung liwat database pusat

Ketemu Kafka Streams, nggawe gampang nggawe layanan mikro negara sing dienggo bareng

Kira-kira setahun kepungkur, kita mutusake kanggo mriksa skenario negara sing dienggo bareng kanggo ngatasi masalah kasebut. Kita langsung mutusake kanggo nyoba Kafka Streams - kita ngerti kepiye ukurane, kasedhiya banget lan toleran kesalahane, lan kepiye fungsionalitas streaming (transformasi, kalebu sing stateful). Cukup sing dibutuhake, ora kanggo sebutno carane diwasa lan dipercaya sistem olahpesen ing Kafka.

Saben layanan mikro stateful sing digawe dibangun ing ndhuwur conto Kafka Streams kanthi topologi sing cukup prasaja. Iki kalebu 1) sumber 2) prosesor kanthi nyimpen nilai kunci sing terus-terusan 3) sink:

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Gambar 2: Topologi standar saka conto streaming kita kanggo layanan mikro stateful. Elinga yen ana uga repositori ing kene sing ngemot metadata perencanaan.

Ing pendekatan anyar iki, agen nyipta pesen sing disedhiyakake menyang topik sumber, lan konsumen-ujare, layanan notifikasi mail-nampa negara bareng sing diitung liwat sink (topik output).

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Gambar 3: Aliran tugas conto anyar kanggo skenario karo microservices sambungan: 1) agen ngasilake pesen sing teka ing topik sumber Kafka; 2) layanan mikro kanthi negara sing dienggo bareng (nggunakake Kafka Streams) ngolah lan nulis status sing diwilang menyang topik Kafka pungkasan; sawise kang 3) konsumen nampa negara anyar

Eh, toko nilai kunci sing dibangun iki pancen migunani banget!

Kaya kasebut ing ndhuwur, topologi negara sing dienggo bareng ngemot toko nilai kunci. Kita nemokake sawetara opsi kanggo nggunakake, lan loro kasebut diterangake ing ngisor iki.

Pilihan #1: Gunakake toko kunci-nilai kanggo petungan

Toko nilai kunci pisanan kita ngemot data tambahan sing dibutuhake kanggo petungan. Contone, ing sawetara kasus negara sing dienggo bareng ditemtokake dening prinsip "suara mayoritas". Repositori bisa nyimpen kabeh laporan agen paling anyar babagan status sawetara obyek. Banjur, nalika kita nampa laporan anyar saka siji agen utawa liyane, kita bisa nyimpen, njupuk laporan saka kabeh agen liyane babagan kahanan obyek padha saka panyimpenan, lan mbaleni pitungan.
Figure 4 ngisor nuduhake carane kita kapapar tombol / nyimpen Nilai kanggo cara Processing prosesor supaya pesen anyar banjur bisa diproses.

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Ilustrasi 4: Kita mbukak akses menyang toko kunci-nilai kanggo metode pangolahan prosesor (sawise iki, saben skrip sing bisa digunakake karo negara sing dienggo bareng kudu ngetrapake metode kasebut. doProcess)

Pilihan #2: Nggawe API CRUD ing ndhuwur Kafka Streams

Sawise netepake aliran tugas dhasar, kita wiwit nyoba nulis API CRUD RESTful kanggo layanan mikro negara sing dienggo bareng. We wanted kanggo bisa kanggo njupuk negara sawetara utawa kabeh obyek, uga nyetel utawa mbusak negara obyek (migunani kanggo support backend).

Kanggo ndhukung kabeh API Njaluk Negara, saben kita perlu kanggo recalculate negara sak Processing, kita disimpen ing nyimpen tombol-nilai dibangun ing dangu. Ing kasus iki, dadi cukup gampang kanggo ngleksanakake API kasebut nggunakake siji conto Kafka Streams, kaya sing ditampilake ing dhaptar ing ngisor iki:

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Gambar 5: Nggunakake toko nilai kunci sing dibangun kanggo entuk status obyek sing wis dikomputasi

Nganyari kahanan obyek liwat API uga gampang dileksanakake. Sejatine, sampeyan mung kudu nggawe produser Kafka lan gunakake kanggo nggawe rekaman sing ngemot negara anyar. Iki mesthekake yen kabeh pesen sing digawe liwat API bakal diproses kanthi cara sing padha karo sing ditampa saka produser liyane (contone, agen).

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Gambar 6: Sampeyan bisa nyetel status obyek nggunakake produser Kafka

Komplikasi cilik: Kafka duwe akeh partisi

Sabanjure, kita pengin nyebarake beban pangolahan lan nambah kasedhiyan kanthi nyedhiyakake kluster layanan mikro negara bareng saben skenario. Persiyapan gampang banget: yen kita ngatur kabeh kedadeyan supaya bisa mlaku ing ID aplikasi sing padha (lan server bootstrap sing padha), meh kabeh liyane rampung kanthi otomatis. Kita uga nemtokake manawa saben topik sumber kalebu sawetara partisi, supaya saben conto bisa diwenehi subset saka partisi kasebut.

Aku uga bakal sebutno iku laku umum kanggo nggawe salinan serep saka nyimpen negara supaya, contone, ing cilik saka Recovery sawise Gagal, transfer salinan iki kanggo Kayata liyane. Kanggo saben toko negara ing Kafka Streams, topik sing ditiru digawe kanthi log pangowahan (sing nglacak nganyari lokal). Mangkono, Kafka terus-terusan ndhukung toko negara. Mulane, yen ana kegagalan siji utawa liyane Kafka Streams, toko negara bisa dipulihake kanthi cepet ing conto liyane, ing ngendi partisi sing cocog bakal ditindakake. Tes kita wis nuduhake manawa iki rampung sajrone sawetara detik, sanajan ana mayuta-yuta cathetan ing toko.

Ngalih saka layanan mikro siji karo negara sing dienggo bareng menyang klompok layanan mikro, dadi ora pati penting kanggo ngetrapake API Get State. Ing kahanan anyar, toko negara saben microservice mung ngemot bagean saka gambar sakabèhé (obyek sing tombol dipetakan menyang partisi tartamtu). Kita kudu nemtokake conto sing ngemot kahanan obyek sing dibutuhake, lan kita nindakake iki adhedhasar metadata utas, kaya sing ditampilake ing ngisor iki:

Ora mung ngolah: Kepiye carane nggawe database sing disebarake saka Kafka Streams, lan apa sing kedadeyan

Figure 7: Nggunakake metadata stream, kita nemtokake saka conto kang kanggo query negara obyek sing dikarepake; pendekatan padha digunakake karo GET ALL API

Penemuan Kunci

Toko negara ing Kafka Streams bisa dadi basis data sing disebarake de facto,

  • terus ditiru ing Kafka
  • API CRUD bisa gampang dibangun ing ndhuwur sistem kasebut
  • Nangani pirang-pirang partisi rada rumit
  • Sampeyan uga bisa nambah siji utawa luwih toko negara menyang topologi streaming kanggo nyimpen data tambahan. Opsi iki bisa digunakake kanggo:
  • Panyimpenan data jangka panjang sing dibutuhake kanggo petungan sajrone pangolahan stream
  • Panyimpenan data jangka panjang sing bisa migunani ing wektu sabanjure conto streaming diwenehake
  • luwih...

Iki lan kaluwihan liyane nggawe Kafka Streams cocog kanggo njaga negara global ing sistem sing disebarake kaya kita. Kafka Streams wis kabukten bisa dipercaya banget ing produksi (kita wis meh ora kelangan pesen wiwit nyebarake), lan kita yakin manawa kemampuane ora mandheg!

Source: www.habr.com

Add a comment