Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Hlo Habr!

Peb qhia koj tias ua raws li phau ntawv hais txog Kafka peb tau luam tawm ib qho kev nthuav qhia sib npaug ntawm cov tsev qiv ntawv Kafka Stream API.

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Txog tam sim no, lub zej zog tsuas yog kawm txog qhov txwv ntawm cov cuab yeej muaj zog no. Yog li, ib tsab xov xwm tau tshaj tawm tsis ntev los no, kev txhais lus uas peb xav qhia koj txog. Los ntawm nws tus kheej kev paub, tus sau qhia yuav ua li cas tig Kafka Stream rau hauv cov ntaub ntawv faib tawm. Txaus siab rau kev nyeem ntawv!

Apache qiv Kafka ntws siv thoob ntiaj teb hauv kev lag luam rau kev faib cov kwj dej rau saum Apache Kafka. Ib qho ntawm qhov tsis txaus siab ntawm lub moj khaum no yog tias nws tso cai rau koj khaws lub xeev hauv zos uas tsim los ntawm kev ua cov xov xov.

Hauv tsab xov xwm no, kuv yuav qhia koj li cas peb lub tuam txhab tswj hwm kom muaj txiaj ntsig zoo siv lub sijhawm no thaum tsim cov khoom lag luam rau huab thov kev nyab xeeb. Siv Kafka Stream, peb tau tsim cov kev pabcuam hauv xeev sib koom, txhua tus ua haujlwm ua haujlwm tsis raug thiab muaj cov ntaub ntawv muaj txiaj ntsig zoo txog lub xeev cov khoom hauv lub cev. Rau peb, qhov no yog ib kauj ruam tom ntej ob qho tib si ntawm kev ntseeg siab thiab kev txhawb nqa yooj yim.

Yog tias koj txaus siab rau lwm txoj hauv kev uas tso cai rau koj siv ib lub hauv paus database los txhawb lub xeev ntawm koj cov khoom, nyeem nws, nws yuav nthuav ...

Yog vim li cas peb xav tias nws yog lub sij hawm los hloov txoj kev uas peb ua hauj lwm nrog koom nyob rau hauv lub xeev

Peb yuav tsum tau tswj hwm lub xeev ntawm ntau yam khoom raws li cov lus ceeb toom ntawm tus neeg sawv cev (piv txwv li: puas yog qhov chaw raug tua)? Ua ntej tsiv mus rau Kafka Kwj, peb feem ntau tso siab rau ib qho chaw hauv nruab nrab (+ pabcuam API) rau kev tswj hwm lub xeev. Txoj kev no muaj nws cov drawbacks: hnub cov xwm txheej hnyav tswj kev sib xws thiab synchronization dhau los ua qhov nyuaj tiag tiag. Cov ntaub ntawv tuaj yeem dhau los ua ib qho khoob lossis xaus rau hauv haiv neeg mob thiab raug kev txom nyem los ntawm unpredictability.

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 1: Ib qho kev sib cais-xeev scenario pom ua ntej hloov mus rau
Kafka thiab Kafka kwj: cov neeg sawv cev sib txuas lus lawv cov kev xav ntawm API, hloov kho lub xeev yog xam los ntawm lub hauv paus database

Ntsib Kafka Stream, ua kom yooj yim los tsim kev sib koom hauv xeev microservices

Kwv yees li ib xyoos dhau los, peb tau txiav txim siab los saib xyuas peb cov xwm txheej hauv lub xeev los daws cov teeb meem no. Peb tam sim ntawd txiav txim siab sim Kafka Stream - peb paub yuav ua li cas scalable, muaj ntau thiab ua txhaum-thov nws yog, dab tsi nplua nuj streaming functionality nws muaj (hloov pauv, suav nrog cov stateful sawv daws yuav). Tsuas yog qhov peb xav tau, tsis hais txog yuav ua li cas paub tab thiab txhim khu kev qha kev xa xov tau dhau los hauv Kafka.

Txhua lub xeev microservices peb tsim tau tsim nyob rau sab saum toj ntawm Kafka Stream piv txwv nrog ib qho yooj yim topology. Nws muaj 1) qhov chaw 2) processor nrog lub khw muag khoom tseem ceeb-tus nqi 3) lub dab dej:

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 2: Lub default topology ntawm peb streaming piv txwv rau stateful microservices. Nco ntsoov tias tseem muaj qhov chaw cia ntawm no uas muaj cov phiaj xwm metadata.

Nyob rau hauv txoj kev tshiab no, cov neeg ua haujlwm sau cov lus uas tau pub rau hauv lub ntsiab lus, thiab cov neeg siv khoom-hais tias, xa ntawv ceeb toom kev pabcuam-tau txais lub xeev suav nrog hauv lub dab dej (cov ntsiab lus tso tawm).

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 3: Cov piv txwv tshiab ua hauj lwm txaus rau ib qho xwm txheej nrog kev sib koom microservices: 1) tus neeg sawv cev tsim cov lus uas tuaj txog ntawm Kafka lub ntsiab lus; 2) microservice nrog lub xeev sib koom (siv Kafka kwj) txheej txheem nws thiab sau lub xeev xam mus rau lub ntsiab lus Kafka zaum kawg; tom qab ntawd 3) cov neeg siv khoom lees txais lub xeev tshiab

Hav, lub khw muag khoom tseem ceeb-tus nqi no yog qhov tseem ceeb heev!

Raws li tau hais los saum no, peb lub xeev topology sib koom muaj cov khw muag khoom tseem ceeb. Peb pom ntau qhov kev xaiv rau kev siv nws, thiab ob ntawm lawv tau piav qhia hauv qab no.

Kev xaiv #1: Siv lub khw muag khoom tseem ceeb rau kev suav

Peb thawj lub khw muag khoom tseem ceeb muaj cov ntaub ntawv pabcuam peb xav tau rau kev suav. Piv txwv li, qee qhov xwm txheej hauv xeev tau txiav txim siab los ntawm lub hauv paus ntsiab lus ntawm "feem ntau votes". Lub chaw cia khoom tuaj yeem tuav tag nrho cov ntaub ntawv tshaj tawm tus neeg sawv cev tshiab ntawm cov xwm txheej ntawm qee yam khoom. Tom qab ntawd, thaum peb tau txais daim ntawv tshaj tawm tshiab los ntawm ib tus neeg sawv cev lossis lwm tus, peb tuaj yeem khaws nws, khaws cov ntaub ntawv los ntawm txhua tus neeg sawv cev txog lub xeev ntawm tib yam khoom los ntawm kev khaws cia, thiab rov ua qhov kev suav.
Daim duab 4 hauv qab no qhia tau hais tias peb nthuav tawm cov khoom tseem ceeb / tus nqi rau cov txheej txheem ua haujlwm li cas kom cov lus tshiab tuaj yeem ua tiav.

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Piv txwv 4: Peb qhib kev nkag mus rau lub khw muag khoom tseem ceeb rau cov txheej txheem kev ua haujlwm (tom qab no, txhua tsab ntawv uas ua haujlwm nrog lub xeev sib koom yuav tsum siv txoj hauv kev doProcess)

Kev xaiv #2: Tsim CRUD API nyob rau sab saum toj ntawm Kafka Kwj

Tau tsim peb txoj haujlwm yooj yim, peb pib sim sau RESTful CRUD API rau peb cov kev pabcuam hauv xeev microservices. Peb xav kom muaj peev xwm retrieve lub xeev ntawm qee yam lossis tag nrho cov khoom, nrog rau teeb lossis tshem tawm lub xeev ntawm ib qho khoom (tseem ceeb rau kev txhawb nqa backend).

Txhawm rau txhawb nqa tag nrho Get State APIs, thaum twg peb xav tau rov xam lub xeev thaum ua tiav, peb khaws nws hauv lub khw muag khoom tseem ceeb rau lub sijhawm ntev. Hauv qhov no, nws yooj yim heev los siv xws li API siv ib qho piv txwv ntawm Kafka Stream, raws li qhia hauv cov npe hauv qab no:

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 5: Siv lub khw muag khoom tseem ceeb tsim nyog kom tau txais lub xeev precomputed ntawm ib yam khoom

Kev hloov kho lub xeev ntawm ib yam khoom ntawm API kuj yooj yim rau kev siv. Yeej, txhua yam koj yuav tsum tau ua yog tsim tus tsim Kafka thiab siv nws los ua cov ntaub ntawv uas muaj lub xeev tshiab. Qhov no ua kom ntseeg tau tias tag nrho cov lus tsim los ntawm API yuav ua tiav tib yam li cov tau txais los ntawm lwm cov neeg tsim khoom (xws li cov neeg sawv cev).

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 6: Koj tuaj yeem teeb lub xeev ntawm ib yam khoom siv Kafka tus tsim khoom

Cov teeb meem me me: Kafka muaj ntau qhov sib faib

Tom ntej no, peb xav faib cov khoom ua haujlwm thiab txhim kho kev muaj los ntawm kev muab ib pawg ntawm kev sib koom-xeev microservices rau ib qhov xwm txheej. Kev teeb tsa yog qhov yooj yim: ib zaug peb teeb tsa tag nrho cov xwm txheej kom khiav hauv tib daim ntawv thov ID (thiab tib lub bootstrap servers), yuav luag txhua yam tau ua tiav. Peb kuj tau hais tias txhua lub ntsiab lus yuav muaj ntau qhov kev faib tawm, yog li txhua qhov piv txwv tuaj yeem raug xa mus rau ib pawg ntawm cov partitions.

Kuv tseem yuav hais tias nws yog ib qho kev xyaum ua ib daim ntawv theej ntawm lub xeev lub khw kom, piv txwv li, thaum rov qab los tom qab ua tsis tiav, hloov daim ntawv no mus rau lwm qhov piv txwv. Rau txhua lub xeev lub khw muag khoom hauv Kafka Stream, cov ncauj lus rov qab tsim nrog lub cav hloov pauv (uas taug qab cov kev hloov tshiab hauv zos). Yog li, Kafka tas li rov qab rau lub xeev lub khw. Yog li ntawd, nyob rau hauv cov kev tshwm sim ntawm ib tug tsis ua hauj lwm ntawm ib tug los yog lwm yam Kafka Stream piv txwv, lub xeev lub khw yuav rov qab tau sai sai rau lwm yam piv txwv, qhov uas coj partitions yuav mus. Peb cov kev ntsuam xyuas tau pom tias qhov no tau ua tiav hauv ib lub vib nas this, txawm tias muaj ntau lab cov ntaub ntawv hauv khw.

Tsiv los ntawm ib qho microservice nrog rau lub xeev sib koom mus rau ib pawg ntawm microservices, nws dhau los ua qhov tsis tseem ceeb rau kev siv Get State API. Hauv qhov xwm txheej tshiab, lub xeev lub khw muag khoom ntawm txhua lub microservice tsuas muaj ib feem ntawm tag nrho cov duab (cov khoom uas nws cov yuam sij tau kos npe rau ib qho kev faib tshwj xeeb). Peb yuav tsum txiav txim siab seb qhov piv txwv twg muaj lub xeev ntawm cov khoom peb xav tau, thiab peb tau ua qhov no raws li xov xwm metadata, raws li qhia hauv qab no:

Tsis tsuas yog ua tiav: Yuav ua li cas peb ua cov ntaub ntawv xa tawm los ntawm Kafka Stream, thiab dab tsi tuaj ntawm nws

Daim duab 7: Siv cov kwj metadata, peb txiav txim siab los ntawm qhov piv txwv twg los nug lub xeev ntawm cov khoom xav tau; Ib txoj hauv kev zoo sib xws tau siv nrog GET ALL API

Cov ntsiab lus tseem ceeb

Lub xeev cov khw muag khoom hauv Kafka Stream tuaj yeem ua tus de facto faib database,

  • tas li replicated nyob rau hauv Kafka
  • CRUD API tuaj yeem tsim tau yooj yim rau saum cov kab ke
  • Kev tuav ntau lub partitions yog qhov nyuaj me ntsis
  • Nws kuj tseem tuaj yeem ntxiv ib lossis ntau lub xeev cov khw muag khoom rau streaming topology los khaws cov ntaub ntawv pabcuam. Qhov kev xaiv no tuaj yeem siv rau:
  • Lub sij hawm ntev cia cov ntaub ntawv xav tau rau kev xam thaum lub sij hawm ua kwj
  • Kev khaws cia ntev ntev ntawm cov ntaub ntawv uas tej zaum yuav muaj txiaj ntsig zoo rau lub sijhawm tom ntej streaming piv txwv raug muab
  • ntau ntau...

Cov no thiab lwm yam zoo ua rau Kafka Stream zoo tsim nyog rau kev tswj hwm lub xeev thoob ntiaj teb hauv kev faib khoom zoo li peb. Kafka Stream tau ua pov thawj tias muaj kev ntseeg siab heev hauv kev tsim khoom (peb tau zoo tsis muaj cov lus poob txij li kev siv nws), thiab peb ntseeg siab tias nws lub peev xwm yuav tsis nres!

Tau qhov twg los: www.hab.com

Ntxiv ib saib