Kafka ja Flink moodustavad hajutatud voogedastusökosüsteemi reaalajas andmekanalite jaoks, samas kui mälusisene töötlemine kiirendab analüütikat, hoides andmeid täielikult RAM-is – igaüks neist teenindab põhimõtteliselt erinevaid arhitektuurilisi vajadusi kiiruse, ulatuse ja püsivuse osas.
Esiletused
Kafka salvestab kõik kettale, samas kui mälus olevad süsteemid seavad kiiruse vastupidavuse asemel esikohale, luues põhimõtteliselt erinevad töökindluse garantiid.
Flinki täpselt ühekordne semantika lahendab keerulisi voogude töötlemise väljakutseid, mida mälusüsteemid tavaliselt ei lahenda
Mälusisene töötlemine pakub 100–1000 korda madalamat latentsust, kuid oluliselt kõrgemat hinda salvestatud andmete gigabaidi kohta
Hübriidarhitektuurid ühendavad üha enam mõlemat lähenemisviisi, kasutades Kafkat andmete liigutamiseks ja mälusisest juurdepääsu kuuma juurdepääsu mustrite jaoks.
Mis on Kafka ja Flink?
Hajutatud voogedastusplatvorm koos voogedastusmootoriga reaalajas andmekanalite jaoks.
Apache Kafka, mis loodi LinkedInis 2011. aastal, töötleb iga päev triljoneid sõnumeid tuhandetes ettevõtetes.
Apache Flink, mis sündis 2014. aastal Stratosphere'i uurimisprojektist, töötleb vooge tõelise sündmusaja semantikaga
Kafka salvestab andmeid kettale logistruktuuriga salvestusruumi abil, võimaldades taasesitust ja rikketaluvust
Flinki kontrollpunktide mehhanism pakub täpselt ühekordse töötlemise garantiisid hajutatud klastrites
Koos moodustavad nad sündmustepõhiste mikroteenuste Lambda või Kappa arhitektuuri selgroo.
Mis on Mälusisene töötlemine?
Arvutusmeetod, mis salvestab andmeid RAM-i üliväikese latentsusega juurdepääsu ja analüüsi jaoks.
Mälusisesed andmebaasid nagu Redis ja Memcached suudavad sekundis teenindada miljoneid toiminguid
Apache Ignite ja Hazelcast laiendavad mälusiseseid kontseptsioone hajutatud andmetöötlusele SQL-toega
RAM-i ligipääs on umbes 100 000 korda kiirem kui ketta sisend/väljund, mis muudab jõudluse ülemmäärasid põhjalikult.
SAP HANA oli teerajajaks ettevõtte mälusiseste andmebaaside loomisel, kuigi kulud piirasid laialdast kasutuselevõttu
Kaasaegsed mälus olevad süsteemid salvestavad vastupidavuse tagamiseks sageli hetktõmmiseid kettale, ilma et see kiirust ohverdaks.
Nõuab selgesõnalist replikatsiooni või varundusstrateegiat
Kuluprofiil
Kauba salvestusruum, mõõdukas RAM
Suur RAM-i nõue, esmaklassiline riistvara
Andmemahu käitlemine
Petabaidiskaalas ajaloolised andmed
Gigabaidist terabaidini töökomplektid
Töötlemise paradigma
Sündmuspõhised, piiramatud vood
Päring-vastus, piiratud päringud
Üksikasjalik võrdlus
Arhitektuurifilosoofia
Kafka ja Flink omaksvõtavad püsivusele keskenduva filosoofia, kus andmed voolavad läbi vastupidavate logide, võimaldades taasesitust, auditeerimisjälgi ja lahtisidunud tarbijaid. Mälusisene töötlemine lükkab selle oletuse ümber – kiirus on vastupidavusest olulisem, kusjuures süsteemid on optimeeritud ajutiste ja kiirelt muutuvate andmete jaoks. Mõelge Kafkast kui hoolikalt korraldatud arhiveerimissüsteemist, mis voogedastab andmeid, samas kui mälusisene mälu on teie aju töömälu: suurepärane koheste ülesannete jaoks, kuid mitte maksuandmete salvestamiseks.
Toimivusomadused
Flink suudab töödelda miljoneid sündmusi sekundis sadade millisekundite latentsusega, mis kõlab muljetavaldavalt, kuni võrdlete seda Redisega, mis teenindab mikrosekundilise reageerimisajaga üle miljoni operatsiooni sekundis. Sellel kiirusel on aga piirangud – mälus olevad süsteemid halvenevad järsult, kui andmed ületavad saadaolevat RAM-i, samas kui Kafka läbilaskevõime jääb märkimisväärselt stabiilseks isegi terabaidiste mahajäämuse korral.
Operatiivne keerukus
Kafka ulatuslik käitamine nõuab oskusteavet partitsioonide tasakaalustamise, tarbijarühmade ümberjaotamise ja maaklerite haldamise alal. Flink lisab veel ühe kihi olekute taustsüsteemide ja kontrollpunktide häälestamise abil. Mälusisesed süsteemid tunduvad esialgu lihtsamad, kuid hajutatud variandid, nagu Ignite, toovad kaasa oma keerukuse jagatud aju stsenaariumide, mälu fragmenteerimise ja vahemälu kehtetuks tunnistamise strateegiate osas. Kumbki lähenemisviis ei kõrvalda tegevuskoormust – see lihtsalt nihkub sinna, kus keerukus kuhjub.
Kulude ökonoomika
RAM maksab gigabaidi kohta umbes 20–50 korda rohkem kui SSD-salvestusruum, mistõttu on puhtalt mälus olevad lähenemisviisid suurte andmekogumite puhul kallid. Kafka kettapõhine mudel õitseb odava salvestusruumi peal, kuigi varjatud kuluks saab vahendajate vahelise võrgu ribalaius. Organisatsioonid avastavad sageli, et hübriidlähenemine – mälus olevad kuumad andmed, Kafkas ajaloolised andmed – pakub parimat majanduslikku kasu, kuigi see toob kaasa integratsiooniprobleeme.
Integratsioonimustrid
Kafka ja Flink paistavad silma sündmuspõhistes arhitektuurides, kus mitu teenust reageerivad samale andmevoole iseseisvalt. Mälusisene töötlemine domineerib päringute-vastuste mustrites, näiteks kasutajaseansi haldamises või reaalajas edetabelites. Huvitaval kombel kasutavad paljud tootmisarhitektuurid mõlemat: Kafkat kesknärvisüsteemina andmete liigutamiseks ja mälusiseseid kihte, mis pakuvad kiire juurdepääsu kihti konkreetsete rakenduste jaoks.
Plussid ja miinused
Kafka ja Flink
Eelised
+Vastupidav sündmuste logi
+Massiivne skaleeritavus
+Täpselt ühekordne töötlemine
+Rikas ökosüsteem
+Taasesitusvõimalus
Kinnitatud
−Suurem latentsus
−Kompleksne häälestamine
−Tegevuskulud
−Õppimiskõver
−Ressursimahukas
Mälusisene töötlemine
Eelised
+Ülimadal latentsusaeg
+Lihtsad päringud
+Suur läbilaskevõime
+Ketta kitsaskohti pole
+Ennustatav jõudlus
Kinnitatud
−Kallis riistvara
−Andmete volatiilsus
−Piiratud andmestiku suurus
−Replikatsiooni keerukus
−Soojenduskaristused
Tavalised eksiarvamused
Müüt
Reaalajas kasutusjuhtude puhul on mälusisene töötlemine alati kiirem kui voogedastus.
Tõelisus
Kuigi mälusisene lähenemine paistab silma punktotsingute ja lihtsate agregatsioonide puhul, suudavad Flinki optimeeritud voogoperaatorid keerukate akendatud arvutuste puhul naiivseid mälusisesi implementatsioone edestada. Jõudluslõhe väheneb märkimisväärselt, kui võrrelda hästi konstrueeritud süsteeme, mitte ühe lähenemisviisi jaoks välja valitud võrdlusaluseid.
Müüt
Kafka kaotab andmeid, kui see pole õigesti konfigureeritud, mistõttu on see mälusiseste andmebaasidega võrreldes ebausaldusväärne.
Tõelisus
Kafka vaikekonfiguratsioonid seavad esikohale vastupidavuse, replikatsiooniteguriga kolm ja acks=all. Mälusisestel süsteemidel on tegelikult konstruktsiooni tõttu suuremad vastupidavusriskid, kuigi Redise AOF-i ja RDB püsivus, Ignite'i natiivne püsivus ja sarnased funktsioonid leevendavad seda. Eksiarvamus tuleneb „aeglasema” ja „vähem usaldusväärse” segi ajamisest.
Müüt
Peate valima voogedastusprotsessi ja mälus oleva töötlemise vahel; need ei saa koos töötada.
Tõelisus
Kaasaegsed arhitektuurid kombineerivad rutiinselt mõlemat. Kafka toimib vastupidava sündmuste selgroona, samas kui mälusisesed kihid nagu Redis või Hazelcast pakuvad kiiresti materialiseeritud vaateid. Flink ise pakub olekute taustprogramme, sealhulgas RocksDB (ketas) ja heap/mälu, hägustades piire kahe lähenemisviisi vahel.
Müüt
Mälusisene töötlemine on mõeldud ainult vahemällu salvestamiseks ja ei suuda toime tulla tõsiste analüütiliste töökoormustega.
Tõelisus
Apache Ignite, MemSQL (SingleStore) ja SAP HANA demonstreerivad keerukat mälusisest analüütikat koos SQL-toega, hajutatud liitumiste ja ACID-tehingutega. Piirang on peamiselt majanduslik – analüütiliste andmekogumite mahutamine muutmiseks muutlikuks mastaabis liiga kulukaks, mitte tehniliselt võimatuks.
Müüt
Flink asendab Kafkat, kuna mõlemad haldavad voogedastusandmeid.
Tõelisus
Need tööriistad täiendavad teineteist, mitte ei konkureeri. Kafka on hajutatud logifail sündmuste salvestamiseks ja edastamiseks; Flink on arvutusmootor nende sündmuste töötlemiseks. Tavaliselt suunatakse Kafka voogud Flinki teisendamiseks ja seejärel väljastatakse tulemused tagasi Kafkasse või teise neeldajasse. Need on pinus külgnevad kihid, mitte asendajad.
Sageli küsitud küsimused
Kas Kafka ja Flink saavad asendada minu olemasolevat mälusisest vahemälu nagu Redis?
Mitte otseselt. Kafka ja Flink on suurepärased andmevoogude teisaldamise ja töötlemise poolest, kuid need ei ole loodud millisekundi pikkuste juhusliku juurdepääsu mustrite jaoks. Redis teenindab individuaalseid võtmepäringuid mikrosekunditega, samas kui Kafka väikseim otsinguüksus on partitsiooni nihke lugemine. Kui teie rakendus vajab kiiret seansi salvestamist või reaalajas edetabeleid, vajate tõenäoliselt mõlemat: Flink töötleb sündmusi Redisisse kiireks juurdepääsuks.
Kuidas ma saan reaalajas analüüsi jaoks valida Flinki ja mälus oleva andmebaasi vahel?
Mõelge oma päringumustritele ja andmete värskuse nõuetele. Flink särab pidevate arvutustega piiramatute voogude peal – mõelge pettuste tuvastamisele, anomaaliate jälgimisele või reaalajas ETL-ile, kus sündmused voolavad pidevalt. Mälusisesed andmebaasid sobivad paremini, kui kasutajad või rakendused käivitavad ad-hoc päringuid suhteliselt stabiilsete andmekogumite, näiteks iga paari sekundi tagant värskendatavate armatuurlaua koondandmete vastu. Paljud meeskonnad käitavad Flinki voogude eelnevaks koondamiseks ja seejärel pakuvad tulemusi mälusisesest salvestusest.
Mis juhtub, kui mälus olevad andmed ületavad saadaolevat RAM-i?
Jõudlus halveneb katastroofiliselt, kui süsteemil puuduvad vahetus- või ületäitumismehhanismid. Puhtalt mälus olevad süsteemid võivad kokku joosta või toimingud tagasi lükata. Kaasaegsed platvormid, nagu Apache Ignite ja Redis Flashil, paigutavad vanemad andmed SSD-le, kuigi see ohverdab latentsusaja eelise. Mõned mälus olevad andmebaasid rakendavad väljatõstmispoliitikaid (LRU, LFU), mis kustutavad andmeid vaikselt, mis toimib vahemälude puhul, kuid riskib andmete kadumiseni peamistes salvestuskohtades. Jälgige alati mälu koormust ja klastrite suurust, arvestades varumälu.
Kas Kafka on endiselt asjakohane pilvepõhiste sõnumite (nt Kinesis või Pub/Sub) leviku taustal?
Absoluutselt. Kafka avatud lähtekoodiga olemus, tohutu ökosüsteem ja ise hostitud variant on endiselt veenvad organisatsioonidele, kes väldivad tarnijaga seotust. Pilvepõhised alternatiivid vähendavad küll tegevuskoormust, kuid toovad kaasa pidevaid kulusid ja vähem paindlikkust. Kafka logipõhine mudel võimaldab ka unikaalseid mustreid, nagu sündmuste hankimine ja voogude taasesitus, mida lihtsamad järjekorrateenused ei kopeeri. Paljud ettevõtted kasutavad hübriidlähenemisi: pilvepõhine lihtsate juhtumite jaoks, isehallatav Kafka keerukate või reguleeritud töökoormuste jaoks.
Kuidas Flink reaalajas töötlemise osas Spark Streaminguga võrreldes on?
Flink töötleb sündmusi individuaalselt tõelise voogedastussemantika abil, samas kui Spark Streaming kasutas ajalooliselt mikropartiitöötlust (kuigi Spark Structured Streaming on seda lõhet vähendanud). Flinki sündmusteaegne töötlemine ja olekupõhised toimingud tunduvad keeruka voogloogika puhul loomulikumad. Spark domineerib partiitöötluses ja ühendatud partiivoogude torujuhtmetes. Puhta madala latentsusega voogesituse puhul võidab tavaliselt Flink; märkimisväärse partiiajalooga segatud töökoormuste puhul on Sparki ökosüsteemi ulatus sageli esikohal.
Kas ma saan mälusiseste süsteemidega saavutada täpselt ühe korra töötlemise?
Täpselt ühe korra semantika on mälusiseste süsteemide puhul põhimõtteliselt keerulisem, kuna neil puudub Kafka vastupidav taasesituse logi ja Flinki hajutatud hetktõmmised. Seda saab lähendada idempotentsete kirjutamis-, tehinguliste värskenduste ja hoolika kliendi deduplikatsiooni abil, kuid garantiid on tavaliselt nõrgemad. Kui finants- või regulatiivsetele nõuetele vastavus nõuab ranget täpselt ühe korra põhimõtet, pakub Kafka-Flinki kombinatsioon küpsemaid ja lahingus testitud mehhanisme.
Milliseid latentsusaegu peaksin iga lähenemisviisi puhul ootama?
Mälupõhised süsteemid, nagu näiteks Redis, pakuvad lihtsate toimingute puhul tavaliselt alla millisekundi pikkust aega (alla 1 ms), kusjuures p99 latentsusajad on sageli alla 5 ms. Kafka üksi lisab võrgu- ja kettakirjutamise latentsusaega, mis on tootmistoimingute puhul tavaliselt 5–50 ms, olenevalt konfiguratsioonist. Flinki töötlemine lisab akendatud arvutuste puhul veel 10–100 ms, kuigi lihtsad läbilaske teisendused võivad olla kiiremad. Kafka-Flinki otsast lõpuni ulatuvad torujuhtmed tavaliselt 100 ms kuni mitme sekundini, olenevalt akna suurusest ja keerukusest.
Kuidas võrrelda Kafka-Flinki ja mälusiseste klastrite käitamise kulusid suures mahus?
Kafka klastrid kasutavad peamiselt ketast ja võrku, kusjuures RAM-i kasutatakse lehtede vahemällu salvestamiseks. Tagasihoidlik 5-sõlmeline Kafka klaster võiks pilveinfrastruktuuris miljoneid sõnumeid sekundis töödelda alla 5000 dollari eest kuus. Terabaidiste andmekogumite samaväärne mälumaht võib RAM-i hinnastamise tõttu maksta 20 000–50 000 dollarit kuus. Flink lisab arvutuskulusid, kuid ei muuda põhimõtteliselt salvestusruumi majanduslikku kasu. Tasuvuspunkt nihkub töökogumite suuruse vähenemisel – väiksemad kuumad andmekogumid eelistavad mälusisest mälu, suuremad ajaloolised andmekogumid aga Kafka kettamudelit.
Kas algajad peaksid alustama Kafka ja Flinkiga või mälusisese töötlemisega?
Alusta oma probleemist, mitte tehnoloogiast. Kui lood veebirakendust, mis vajab kiiret seansisalvestust või edetabelit, on Redisil või sarnastel mälusalvestustel leebem õppimiskõver. Kui töötled klikke, asjade interneti andmeid või lood sündmuspõhiseid mikroteenuseid, on Kafka avaldamis-tellimismudel kontseptuaalselt lihtne. Flinkil on järsem kõver tänu olekupõhistele voogedastusprotsesside kontseptsioonidele. Paljud arendajad saavutavad edu alustades ainult Kafkaga ja lisades seejärel Flinki, kui voogedastusprotsesside keerukus seda õigustab.
Kuidas ma käsitlen iga arhitektuuri rikkeid?
Kafka käsitleb maaklerite tõrkeid partitsiooni replikatsiooni kaudu – tarbijad lähevad automaatselt koopiatele üle. Flink taaskäivitub viimasest kontrollpunktist, töödeldes potentsiaalselt uuesti väikest andmeakent. Mälusisesed süsteemid on erinevad: Redis Sentinel või Cluster pakuvad küll tõrkesiirde funktsiooni, kuid replikeerimata andmed lähevad kaotsi. Ignite ja Hazelcast replikeerivad andmeid sõlmede vahel, et tagada kõrge käideolek. Peamine erinevus: Kafka ja Flinki tõrketaaste on automaatsem ja lahingutestide läbinud, samas kui mälusisesed süsteemid vajavad replikatsioonitegurite ja püsivusstrateegiate selgesõnalist konfigureerimist andmete kadumise vältimiseks.
Otsus
Valige Kafka ja Flink, kui vajate vastupidavaid ja taasesitatavaid vooge keeruka sündmuste töötlemisega hajutatud süsteemides. Valige mälusisene töötlemine, kui piiratud andmekogumite alla millisekundi kestvad reageerimisajad õigustavad riistvara lisatasu. Enamik küpsemaid platvorme ühendab lõpuks mõlemad, kasutades mõlemat seal, kus selle tugevused avalduvad.