"Kafka" yra didelio našumo, paskirstyta pranešimų sistema, kurią sukūrė "LinkedIn", kuri plačiai naudojama tokiuose scenarijuose kaip žurnalų rinkimas, srautinis duomenų apdorojimas, pranešimų platinimas internete ir neprisijungus ir kt. Nors "Kafaka" nėra sukurtas kaip tradicinis MQ, daugeliu atvejų jis gali pakeisti tradicines pranešimų sistemas, tokias kaip "ActiveMQ".
Kafka organizuoja pranešimų srautą pagal temas, o serveris, kuriame laikomi pranešimai, vadinamas brokeriu, o vartotojai gali užsiprenumeruoti vieną ar kelias temas. Siekiant subalansuoti apkrovą, temos pranešimus galima suskirstyti į kelis skaidinius, o kuo daugiau skaidinių, tuo didesnis Kafkos lygiagretumas ir pralaidumas.
Kafkos klasteriams įdiegti reikalingas zookeeper palaikymas, o zookeeper jau yra įtrauktas į naujausią kafka distribuciją, kuri gali būti įdiegta norint paleisti zookeeper serverį ir Kafka serverį vienu metu arba naudoti kitus esamus zookeeper klasterius.
Skirtingai nuo tradicinio MQ, vartotojai turi patys išlaikyti poslinkį, o gaudami pranešimus iš kafkos traukti pranešimus tik po dabartinio poslinkio. Kafkos scala/java klientas jau įgyvendina šią logikos dalį, išsaugodamas poslinkį zoologijos sodo prižiūrėtojui. Kiekvienas vartotojas gali pasirinkti ID, o vartotojai, turintys tą patį ID, tą patį pranešimą gaus tik vieną kartą.Jei visi temos vartotojai naudoja tą patį ID, tai yra tradicinė eilė. Jei kiekvienas vartotojas naudoja skirtingą ID, tai yra tradicinis pub-sub.
Peržiūra:
Kafkos vartojimas
1. Tos pačios group_id vartotojai gali vartoti tik vienas vartotojas (Eilės režimas)
2. Skirtingų group_id vartotojai gauna tas pačias naujienas
Kafkos privalumai
Paskirstytas ir labai keičiamas. Kafkos klasteriai gali būti skaidriai keičiami, kad į klasterį būtų įtraukti nauji serveriai.
Didelis našumas. "Kafka" našumas gerokai viršija tradicinių MQ diegimų, tokių kaip "ActiveMQ" ir "RabbitMQ", našumą, ypač "Kafka", kuris taip pat palaiko paketines operacijas. Toliau pateiktame paveikslėlyje parodyti "LinkedIn" vartotojų veiklos testavimo nepalankiausiomis sąlygomis rezultatai:
Atsparumas gedimams. Duomenys iš kiekvieno Kafkos skaidinio yra replikuojami į kelis serverius. Kai tarpininkas nepavyksta, "ZooKeeper" paslauga praneš gamintojui ir vartotojui, kurie pereina prie kito brokerio.
Kafkos trūkumai:
Kartoti pranešimus. Kafka tik garantuoja, kad kiekviena žinutė bus pristatyta bent vieną kartą, ir nors tikimybė yra maža, yra tikimybė, kad žinutė bus pristatyta kelis kartus. Naujienos netinkamos. Nors pranešimai skaidinyje garantuojami tvarkingi, jei temoje yra keli skaidiniai, negarantuojama, kad pranešimų pristatymas tarp skaidinių bus tvarkingas. Sudėtingumas. Kafka reikalauja zoologijos sodo prižiūrėtojų klasterių palaikymo, o temos paprastai reikalauja rankų darbo, kad sukurtų, įdiegtų ir išlaikytų brangiau nei bendros pranešimų eilės
.NET/C# pranešimų eilės Kafkos operacijos
Pirma, naudokite .NET Core 3.1, kad sukurtumėte du naujus konsolių projektus, būtent "Kafka-Consumer" ir "Kafka-Producer"
Naudokite nuget norėdami nurodyti Confluent.Kafka paketą taip, naudodami šią komandą:
"GitHub" adresas:Hipersaito prisijungimas matomas.
Pirmiausia paleidžiame programą "Producer", o jei pirmiausia paleisime vartotoją, gausime šią klaidą:
Įvyko klaida: Brokeris: nežinoma tema arba skaidinys Šiame straipsnyje bus naudojami nustatymaiEnableAutoOffsetStore yra klaidinga, t. y. rankiniu būdu nustatyti poslinkio saugyklą (panašiai kaip rankinis patvirtinimo pranešimas)
Vartotojai nenustato "OffsetStore" po vartojimo
Pabandykite naudoti gamintoją, kad sukurtumėte du pranešimus, įjunkite vartotojų vartojimą, MaxPollIntervalMs = 10000 // 10 sekundžių be rankinio nustatymo, leiskite kitiems klientams suvartoti, žinoma, kiti klientai jo nesunaudos per 10 sekundžių
MaxPollIntervalMs paaiškina
Pažengusiems vartotojams – maksimalus leistinas laikas pranešimams tarp skambučių (pvz., rd_kafka_consumer_poll()). Jei šis intervalas viršijamas, vartotojas laikomas nepavykusiu ir grupė perbalansuojama taip, kad skaidinys būtų priskirtas kitam vartotojų grupės nariui. Įspėjimas: Šiuo metu korespondentiniai įsipareigojimai gali būti neįmanomi. Pastaba: Rekomenduojama nustatyti "enable.auto.offset.store=false" programoms, kurios apdorojamos ilgą laiką, o apdorojus pranešimą aiškiai išsaugoti poslinkį (naudojant offsets_store()), kad būtų užtikrinta, jog poslinkis nebus automatiškai įvykdytas prieš baigiant apdorojimą. Patikrinkite kartą per sekundę kas du. Daugiau informacijos rasite KIP-62. Atvaizdai yra tokie:
"OffsetStore" nustatoma vartotojui baigus išleisti
Kodas
Kai sąranka bus baigta, palaukite 10 sekundžių ir ji vis tiek busGavo paskutinę žinutę(Kai vartotojas prisijungia prie tarpininko,Pradėti vartojimą nuo poslinkio padėtiesJei nustatytas c.Commit(cr); Paskutinis pranešimas nebus gaunamas pakartotinai.
Peržiūrėti šaltinio kodą
atlikti poslinkį + 1 įsipareigojimą ir galiausiai iškviesti Librdkafka.topic_partition_list_destroy(cOffsets);
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Kito GroupId nustatymas
Pabandykite nustatyti kitą GroupId naudodami komandinės eilutės parametrą, tada išsiųskite pranešimą per gamintoją, kaip parodyta šiame paveikslėlyje:
Tiek clinet1, tiek client2Istorinių pranešimų gavimas, o po to, kai prodiuseris išsiųs žinutę, abu bus beveikGaukite pranešimus tuo pačiu metu。
Nauji vartotojai gauna tik naujus pranešimus
Kaip priversti naują klientą gauti tik naujus pranešimus ir ignoruoti istorinius duomenis?
Nustatymai yra tokie:
Kaip parodyta žemiau:
Gamintojo kodas
Taip:
Vartotojo kodas
Taip:
Šaltinio kodo atsisiuntimas
Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašome Atsakyti
|