ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

హే హబ్ర్!

గురించి పుస్తకాన్ని అనుసరిస్తున్నట్లు మేము మీకు గుర్తు చేస్తున్నాము కాఫ్కా మేము లైబ్రరీ గురించి సమానమైన ఆసక్తికరమైన పనిని ప్రచురించాము కాఫ్కా స్ట్రీమ్స్ API.

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

ప్రస్తుతానికి, సంఘం ఈ శక్తివంతమైన సాధనం యొక్క పరిమితులను నేర్చుకుంటుంది. కాబట్టి, ఒక కథనం ఇటీవల ప్రచురించబడింది, దాని అనువాదం మేము మీకు పరిచయం చేయాలనుకుంటున్నాము. తన స్వంత అనుభవం నుండి, కాఫ్కా స్ట్రీమ్‌లను పంపిణీ చేసిన డేటా నిల్వగా ఎలా మార్చాలో రచయిత చెప్పారు. చదివి ఆనందించండి!

అపాచీ లైబ్రరీ కాఫ్కా స్ట్రీమ్స్ అపాచీ కాఫ్కా పైన పంపిణీ చేయబడిన స్ట్రీమ్ ప్రాసెసింగ్ కోసం ఎంటర్‌ప్రైజెస్‌లో ప్రపంచవ్యాప్తంగా ఉపయోగించబడుతుంది. థ్రెడ్ ప్రాసెసింగ్ ఆధారంగా ఉత్పత్తి చేయబడిన స్థానిక స్థితిని నిల్వ చేయడానికి ఇది మిమ్మల్ని అనుమతించడం ఈ ఫ్రేమ్‌వర్క్ యొక్క తక్కువ అంచనా వేయబడిన అంశాలలో ఒకటి.

క్లౌడ్ అప్లికేషన్ భద్రత కోసం ఉత్పత్తిని అభివృద్ధి చేస్తున్నప్పుడు మా కంపెనీ ఈ అవకాశాన్ని ఎలా లాభదాయకంగా ఉపయోగించుకుందో ఈ వ్యాసంలో నేను మీకు చెప్తాను. కాఫ్కా స్ట్రీమ్‌లను ఉపయోగించి, మేము భాగస్వామ్య స్టేట్ మైక్రోసర్వీస్‌లను సృష్టించాము, వీటిలో ప్రతి ఒక్కటి సిస్టమ్‌లోని వస్తువుల స్థితి గురించి విశ్వసనీయ సమాచారం యొక్క తప్పు-తట్టుకునే మరియు అత్యంత అందుబాటులో ఉన్న మూలాధారంగా పనిచేస్తుంది. మాకు, ఇది విశ్వసనీయత మరియు మద్దతు సౌలభ్యం రెండింటిలోనూ ఒక ముందడుగు.

మీ వస్తువుల యొక్క అధికారిక స్థితికి మద్దతు ఇవ్వడానికి ఒకే కేంద్ర డేటాబేస్‌ని ఉపయోగించడానికి మిమ్మల్ని అనుమతించే ప్రత్యామ్నాయ విధానంపై మీకు ఆసక్తి ఉంటే, దాన్ని చదవండి, అది ఆసక్తికరంగా ఉంటుంది...

భాగస్వామ్య రాష్ట్రంతో పని చేసే విధానాన్ని మార్చుకోవాల్సిన సమయం వచ్చిందని మేము ఎందుకు భావించాము

మేము ఏజెంట్ నివేదికల ఆధారంగా వివిధ వస్తువుల స్థితిని నిర్వహించాల్సిన అవసరం ఉంది (ఉదాహరణకు: సైట్ దాడి చేయబడిందా)? కాఫ్కా స్ట్రీమ్‌లకు మారడానికి ముందు, మేము తరచుగా రాష్ట్ర నిర్వహణ కోసం ఒకే కేంద్ర డేటాబేస్ (+ సర్వీస్ API)పై ఆధారపడతాము. ఈ విధానం దాని లోపాలను కలిగి ఉంది: డేట్ ఇంటెన్సివ్ పరిస్థితులలో స్థిరత్వం మరియు సమకాలీకరణను కొనసాగించడం నిజమైన సవాలుగా మారుతుంది. డేటాబేస్ అడ్డంకిగా మారవచ్చు లేదా అంతం కావచ్చు జాతి పరిస్థితి మరియు అనూహ్యతకు గురవుతారు.

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 1: పరివర్తనకు ముందు కనిపించే సాధారణ స్ప్లిట్-స్టేట్ దృశ్యం
కాఫ్కా మరియు కాఫ్కా స్ట్రీమ్‌లు: ఏజెంట్లు తమ అభిప్రాయాలను API ద్వారా తెలియజేస్తారు, అప్‌డేట్ చేయబడిన స్థితి కేంద్ర డేటాబేస్ ద్వారా లెక్కించబడుతుంది

కాఫ్కా స్ట్రీమ్‌లను కలవండి, షేర్ చేయబడిన స్టేట్ మైక్రోసర్వీస్‌లను క్రియేట్ చేయడం సులభం చేస్తుంది

సుమారు ఒక సంవత్సరం క్రితం, ఈ సమస్యలను పరిష్కరించడానికి మా భాగస్వామ్య రాష్ట్ర దృశ్యాలను గట్టిగా పరిశీలించాలని మేము నిర్ణయించుకున్నాము. మేము వెంటనే కాఫ్కా స్ట్రీమ్‌లను ప్రయత్నించాలని నిర్ణయించుకున్నాము - ఇది ఎంత స్కేలబుల్, అత్యంత అందుబాటులో ఉంది మరియు తప్పులను తట్టుకునేది, దానిలో ఎలాంటి రిచ్ స్ట్రీమింగ్ ఫంక్షనాలిటీ ఉందో మాకు తెలుసు (పరివర్తనలు, స్టేట్‌ఫుల్ వాటితో సహా). కాఫ్కాలో మెసేజింగ్ సిస్టమ్ ఎంత పరిణతి చెందినది మరియు నమ్మదగినదిగా మారిందో ప్రత్యేకంగా చెప్పనక్కర్లేదు.

మేము సృష్టించిన స్టేట్‌ఫుల్ మైక్రోసర్వీస్‌లలో ప్రతి ఒక్కటి కాఫ్కా స్ట్రీమ్‌ల ఉదాహరణపై చాలా సరళమైన టోపోలాజీతో నిర్మించబడింది. ఇది 1) మూలం 2) స్థిరమైన కీ-విలువ స్టోర్‌తో కూడిన ప్రాసెసర్ 3) సింక్:

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 2: స్టేట్‌ఫుల్ మైక్రోసర్వీస్‌ల కోసం మా స్ట్రీమింగ్ ఇన్‌స్టాన్స్‌ల డిఫాల్ట్ టోపోలాజీ. ఇక్కడ ప్లానింగ్ మెటాడేటా ఉన్న రిపోజిటరీ కూడా ఉందని గమనించండి.

ఈ కొత్త విధానంలో, ఏజెంట్లు సోర్స్ టాపిక్‌కి అందించబడే సందేశాలను కంపోజ్ చేస్తారు మరియు వినియోగదారులు-అంటే మెయిల్ నోటిఫికేషన్ సర్వీస్-సింక్ (అవుట్‌పుట్ టాపిక్) ద్వారా కంప్యూటెడ్ షేర్డ్ స్టేట్‌ను స్వీకరిస్తారు.

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 3: భాగస్వామ్య మైక్రోసర్వీస్‌లతో దృష్టాంతం కోసం కొత్త ఉదాహరణ టాస్క్ ఫ్లో: 1) కాఫ్కా సోర్స్ టాపిక్‌కు వచ్చే సందేశాన్ని ఏజెంట్ రూపొందించారు; 2) భాగస్వామ్య స్థితితో (కాఫ్కా స్ట్రీమ్‌లను ఉపయోగించి) మైక్రోసర్వీస్ దానిని ప్రాసెస్ చేస్తుంది మరియు చివరి కాఫ్కా టాపిక్‌కు లెక్కించబడిన స్థితిని వ్రాస్తుంది; దీని తర్వాత 3) వినియోగదారులు కొత్త రాష్ట్రాన్ని అంగీకరిస్తారు

హే, ఈ అంతర్నిర్మిత కీ-విలువ స్టోర్ నిజానికి చాలా ఉపయోగకరంగా ఉంది!

పైన పేర్కొన్నట్లుగా, మా భాగస్వామ్య రాష్ట్ర టోపోలాజీ కీ-విలువ స్టోర్‌ని కలిగి ఉంది. మేము దీన్ని ఉపయోగించడానికి అనేక ఎంపికలను కనుగొన్నాము మరియు వాటిలో రెండు క్రింద వివరించబడ్డాయి.

ఎంపిక #1: లెక్కల కోసం కీ-విలువ స్టోర్‌ని ఉపయోగించండి

మా మొదటి కీ-విలువ స్టోర్ మాకు లెక్కల కోసం అవసరమైన సహాయక డేటాను కలిగి ఉంది. ఉదాహరణకు, కొన్ని సందర్భాల్లో భాగస్వామ్య స్థితి "మెజారిటీ ఓట్ల" సూత్రం ద్వారా నిర్ణయించబడుతుంది. రిపోజిటరీ కొన్ని వస్తువు యొక్క స్థితిపై అన్ని తాజా ఏజెంట్ నివేదికలను కలిగి ఉంటుంది. అప్పుడు, మేము ఒక ఏజెంట్ లేదా మరొకరి నుండి కొత్త నివేదికను స్వీకరించినప్పుడు, మేము దానిని సేవ్ చేయవచ్చు, నిల్వ నుండి అదే వస్తువు యొక్క స్థితి గురించి అన్ని ఇతర ఏజెంట్ల నుండి నివేదికలను తిరిగి పొందవచ్చు మరియు గణనను పునరావృతం చేయవచ్చు.
మేము కీ/విలువ స్టోర్‌ని ప్రాసెసర్ యొక్క ప్రాసెసింగ్ పద్ధతికి ఎలా బహిర్గతం చేసామో దిగువన ఉన్న మూర్తి 4 చూపిస్తుంది, తద్వారా కొత్త సందేశం ప్రాసెస్ చేయబడుతుంది.

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

దృష్టాంతం 4: ప్రాసెసర్ యొక్క ప్రాసెసింగ్ పద్ధతి కోసం మేము కీ-విలువ స్టోర్‌కు యాక్సెస్‌ను తెరుస్తాము (దీని తర్వాత, భాగస్వామ్య స్థితితో పనిచేసే ప్రతి స్క్రిప్ట్ తప్పనిసరిగా పద్ధతిని అమలు చేయాలి doProcess)

ఎంపిక #2: కాఫ్కా స్ట్రీమ్‌ల పైన CRUD APIని సృష్టించడం

మా ప్రాథమిక విధి విధానాన్ని ఏర్పాటు చేసిన తర్వాత, మేము మా షేర్డ్ స్టేట్ మైక్రోసర్వీస్‌ల కోసం RESTful CRUD APIని వ్రాయడానికి ప్రయత్నించడం ప్రారంభించాము. మేము కొన్ని లేదా అన్ని ఆబ్జెక్ట్‌ల స్థితిని తిరిగి పొందగలగాలి, అలాగే ఒక వస్తువు యొక్క స్థితిని సెట్ చేయడం లేదా తీసివేయడం (బ్యాకెండ్ మద్దతు కోసం ఉపయోగపడుతుంది).

అన్ని గెట్ స్టేట్ APIలకు మద్దతు ఇవ్వడానికి, ప్రాసెసింగ్ సమయంలో మేము స్థితిని తిరిగి లెక్కించాల్సిన అవసరం వచ్చినప్పుడు, మేము దానిని చాలా కాలం పాటు అంతర్నిర్మిత కీ-విలువ స్టోర్‌లో నిల్వ చేస్తాము. ఈ సందర్భంలో, దిగువ జాబితాలో చూపిన విధంగా కాఫ్కా స్ట్రీమ్‌ల యొక్క ఒకే ఉదాహరణను ఉపయోగించి అటువంటి APIని అమలు చేయడం చాలా సులభం అవుతుంది:

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 5: వస్తువు యొక్క ప్రీకంప్యూటెడ్ స్థితిని పొందేందుకు అంతర్నిర్మిత కీ-విలువ స్టోర్‌ని ఉపయోగించడం

API ద్వారా వస్తువు యొక్క స్థితిని నవీకరించడం కూడా అమలు చేయడం సులభం. ప్రాథమికంగా, మీరు కాఫ్కా ప్రొడ్యూసర్‌ని సృష్టించి, కొత్త రాష్ట్రాన్ని కలిగి ఉన్న రికార్డ్ చేయడానికి దాన్ని ఉపయోగించాలి. API ద్వారా రూపొందించబడిన అన్ని సందేశాలు ఇతర నిర్మాతల (ఉదా. ఏజెంట్లు) నుండి స్వీకరించబడిన విధంగానే ప్రాసెస్ చేయబడతాయని ఇది నిర్ధారిస్తుంది.

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 6: మీరు కాఫ్కా ప్రొడ్యూసర్‌ని ఉపయోగించి వస్తువు యొక్క స్థితిని సెట్ చేయవచ్చు

చిన్న సంక్లిష్టత: కాఫ్కాలో అనేక విభజనలు ఉన్నాయి

తర్వాత, మేము ప్రాసెసింగ్ లోడ్‌ని పంపిణీ చేయాలనుకుంటున్నాము మరియు ఒక్కో దృష్టాంతానికి షేర్డ్-స్టేట్ మైక్రోసర్వీస్‌ల క్లస్టర్‌ను అందించడం ద్వారా లభ్యతను మెరుగుపరచాలనుకుంటున్నాము. సెటప్ ఒక బ్రీజ్: మేము ఒకే అప్లికేషన్ ID (మరియు అదే బూట్‌స్ట్రాప్ సర్వర్లు) కింద అమలు చేయడానికి అన్ని సందర్భాలను కాన్ఫిగర్ చేసిన తర్వాత, దాదాపుగా అన్నీ స్వయంచాలకంగా పూర్తయ్యాయి. ప్రతి మూలాధార అంశం అనేక విభజనలను కలిగి ఉంటుందని కూడా మేము పేర్కొన్నాము, తద్వారా ప్రతి ఉదాహరణ అటువంటి విభజనల ఉపసమితిని కేటాయించవచ్చు.

స్టేట్ స్టోర్ యొక్క బ్యాకప్ కాపీని తయారు చేయడం సాధారణ పద్ధతి అని కూడా నేను ప్రస్తావిస్తాను, ఉదాహరణకు, వైఫల్యం తర్వాత రికవరీ అయినప్పుడు, ఈ కాపీని మరొక ఉదాహరణకి బదిలీ చేయండి. కాఫ్కా స్ట్రీమ్స్‌లోని ప్రతి స్టేట్ స్టోర్ కోసం, మార్పు లాగ్‌తో ప్రతిరూపమైన అంశం సృష్టించబడుతుంది (ఇది స్థానిక నవీకరణలను ట్రాక్ చేస్తుంది). అందువలన, కాఫ్కా నిరంతరం స్టేట్ స్టోర్‌ను బ్యాకప్ చేస్తుంది. కావున, ఒకటి లేదా మరొక కాఫ్కా స్ట్రీమ్‌లు విఫలమైన సందర్భంలో, సంబంధిత విభజనలు వెళ్లే మరొక సందర్భంలో స్టేట్ స్టోర్ త్వరగా పునరుద్ధరించబడుతుంది. స్టోర్‌లో మిలియన్ల కొద్దీ రికార్డులు ఉన్నప్పటికీ, ఇది సెకన్ల వ్యవధిలో జరుగుతుందని మా పరీక్షల్లో తేలింది.

భాగస్వామ్య స్థితితో ఉన్న ఒకే మైక్రోసర్వీస్ నుండి మైక్రోసర్వీస్‌ల క్లస్టర్‌కి మారడం, Get State APIని అమలు చేయడం తక్కువ ట్రివిల్ అవుతుంది. కొత్త పరిస్థితిలో, ప్రతి మైక్రోసర్వీస్ యొక్క స్టేట్ స్టోర్ మొత్తం చిత్రంలో కొంత భాగాన్ని మాత్రమే కలిగి ఉంటుంది (నిర్దిష్ట విభజనకు కీలు మ్యాప్ చేయబడిన వస్తువులు). మనకు అవసరమైన వస్తువు యొక్క స్థితిని ఏ సందర్భంలో కలిగి ఉందో మేము గుర్తించాలి మరియు దిగువ చూపిన విధంగా థ్రెడ్ మెటాడేటా ఆధారంగా మేము దీన్ని చేసాము:

ప్రాసెసింగ్ మాత్రమే కాదు: మేము కాఫ్కా స్ట్రీమ్‌ల నుండి పంపిణీ చేయబడిన డేటాబేస్‌ను ఎలా తయారు చేసాము మరియు దాని నుండి ఏమి వచ్చింది

మూర్తి 7: స్ట్రీమ్ మెటాడేటాను ఉపయోగించి, కావలసిన వస్తువు యొక్క స్థితిని ఏ సందర్భం నుండి ప్రశ్నించాలో మేము నిర్ణయిస్తాము; GET ALL APIతో కూడా ఇదే విధానం ఉపయోగించబడింది

కీ అన్వేషణలు

కాఫ్కా స్ట్రీమ్స్‌లోని స్టేట్ స్టోర్‌లు వాస్తవ పంపిణీ డేటాబేస్‌గా ఉపయోగపడతాయి,

  • కాఫ్కాలో నిరంతరం ప్రతిరూపం
  • అటువంటి సిస్టమ్ పైన CRUD API సులభంగా నిర్మించబడుతుంది
  • బహుళ విభజనలను నిర్వహించడం కొంచెం క్లిష్టంగా ఉంటుంది
  • సహాయక డేటాను నిల్వ చేయడానికి స్ట్రీమింగ్ టోపోలాజీకి ఒకటి లేదా అంతకంటే ఎక్కువ స్టేట్ స్టోర్‌లను జోడించడం కూడా సాధ్యమే. ఈ ఎంపికను దీని కోసం ఉపయోగించవచ్చు:
  • స్ట్రీమ్ ప్రాసెసింగ్ సమయంలో లెక్కల కోసం అవసరమైన డేటా యొక్క దీర్ఘకాలిక నిల్వ
  • తదుపరిసారి స్ట్రీమింగ్ ఉదాహరణ అందించబడినప్పుడు ఉపయోగకరంగా ఉండే డేటా యొక్క దీర్ఘకాలిక నిల్వ
  • ఇంకా చాలా...

ఇవి మరియు ఇతర ప్రయోజనాలు కాఫ్కా స్ట్రీమ్‌లను మనలాంటి పంపిణీ వ్యవస్థలో ప్రపంచ స్థితిని నిర్వహించడానికి బాగా సరిపోతాయి. కాఫ్కా స్ట్రీమ్స్ ఉత్పత్తిలో చాలా విశ్వసనీయమైనదిగా నిరూపించబడింది (దీనిని అమలు చేసినప్పటి నుండి మాకు వాస్తవంగా ఎటువంటి సందేశం నష్టం జరగలేదు), మరియు దాని సామర్థ్యాలు అంతటితో ఆగవని మేము విశ్వసిస్తున్నాము!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి