Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 129246|Atsakyti: 17

[Šaltinis] Kafka operacijos .NET/C# pranešimų eilėse [su šaltinio kodu]

[Kopijuoti nuorodą]
Paskelbta 2021-04-13 11:45:31 | | | |
"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:

Įtraukite "ActiveMQ" į sistemos paslaugas sistemoje "Windows".
https://www.itsvse.com/thread-6210-1-1.html

NumberOfPendingMessages, MessagesEnqueued, Messag...
https://www.itsvse.com/thread-4954-1-1.html

Informacijos apie ActiveMQ ir RabbitMQ santrauka
https://www.itsvse.com/thread-4659-1-1.html

"CentOS ActiveMQ" pridedamas prie paslaugos
https://www.itsvse.com/thread-4617-1-1.html

"Centos 6.2" 64 bitų diegimo "activemq" pamoka
https://www.itsvse.com/thread-4616-1-1.html

ActiveMQ5.15.3 nepavyksta paleisti ir pranešama apie UnsupportedClassVersionError
https://www.itsvse.com/thread-4615-1-1.html

Activemq temos teisių parametrai
https://www.itsvse.com/thread-4495-1-1.html

Vartotojas itsvse neturi teisės skaityti iš: ActiveMQ.Advisory.TempQueue,Activ...
https://www.itsvse.com/thread-4476-1-1.html

C# ActiveMQ klientas prenumeruoja šaltinio kodą
https://www.itsvse.com/thread-4470-1-1.html

.net/c# activemq ryšio abonementui ir slaptažodžiui nustatyti
https://www.itsvse.com/thread-4282-1-1.html

Nustatyti ACTIVEMQ temos ir eilės vartotojo vardą ir slaptažodį
https://www.itsvse.com/thread-4281-1-1.html

ActiveMQ keičia svetainės valdymo slaptažodį
https://www.itsvse.com/thread-4280-1-1.html

activemq Nuolatinė saugykla yra pilna
https://www.itsvse.com/thread-4125-1-1.html

.NET/C# ActiveMQ operacijos pavyzdys [Šaltinio kodas]
https://www.itsvse.com/thread-3907-1-1.html

Activemq vartotojo teisių konfigūracija
https://www.itsvse.com/thread-3906-1-1.html

Skirtumas tarp activemq eilės ir temos yra tas, kad
https://www.itsvse.com/thread-3863-1-1.html

. .Net platforma
https://www.itsvse.com/thread-3452-1-1.html

ActiveMQ nuolatinės prenumeratos parametrai
https://www.itsvse.com/thread-3451-1-1.html

"RabbitMQ BasicQos" vartotojų lygiagrečiojo apdorojimo riba
https://www.itsvse.com/thread-4667-1-1.html

rabbitMQ eilės eilės pranešimų patvarumas [su šaltinio kodu]
https://www.itsvse.com/thread-4657-1-1.html

【Praktika】 rabbitMQ konsolė paskyros informacijai pridėti
https://www.itsvse.com/thread-4655-1-1.html

Išsami RabbitMQ pranešimo atsako mechanizmo analizė
https://www.itsvse.com/thread-4639-1-1.html

.net/c# RabbitMQ ryšio atjungimas - atjungimas ir pakartotinis prijungimas
https://www.itsvse.com/thread-4636-1-1.html

Įvadas į tris RabbitMQ mainų režimus (fanout, tiesioginis ir tema)
https://www.itsvse.com/thread-4635-1-1.html

【Praktika】 RabbitMQ įdiegia žiniatinklio valdymo papildinį
https://www.itsvse.com/thread-4631-1-1.html

【Praktinė kova】 RabbitMQ diegimo pamoka sistemoje "Windows"
https://www.itsvse.com/thread-4630-1-1.html
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šomeAtsakyti






Ankstesnis:.NET/C# išimtis naudojant "Tencent Enterprise Mailbox": baigėsi operacijos skirtasis laikas.
Kitą:NuGet išvalo talpyklą
 Savininkas| Paskelbta 2021-04-15 09:31:05 |
Kai .NET Kafka klientas yra atjungtas, jis nepateikia išimties ir vėl prisijungia po to, kai tinklas yra normalus
%4|1618450028.267| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: atjungtas (po 59926 ms būsenos UP)
%3|1618450028.267| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: atjungtas (po 59926 ms būsenoje UP)
%3|1618450028.267| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: Nežinoma klaida (po 0 ms būsenoje CONNECT)
%3|1618450028.268| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 0 ms būsenoje CONNECT)
%3|1618450028.357| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 10 ms būsenoje CONNECT, 1 identiška klaida (-os) nuslopinta)
%3|1618450028.357| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 10 ms būsenoje CONNECT, 1 identiška klaida (-os) nuslopinta)
%3|1618450062.882| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 0 ms būsenoje CONNECT, 8 identiškos klaidos nuslopintos)
%3|1618450062.882| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 0 ms būsenoje CONNECT, 8 identiškos klaidos nuslopintos)
%3|1618450098.255| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 11 ms būsenoje CONNECT, 4 identiškos klaidos slopintos)
%3|1618450098.255| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 11 ms būsenoje CONNECT, 4 identiškos klaidos nuslopintos)
%3|1618450138.243| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: Nežinoma klaida (po 0 ms būsenoje CONNECT, 4 identiškos klaidos nuslopintos)
%3|1618450138.244| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 0 ms būsenoje CONNECT, 4 identiškos klaidos nuslopintos)
%3|1618450168.254| FAIL|rdkafka#vartotojas-1| [thrd:192.168.1.175:9092/bootstrap]: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: Nežinoma klaida (po 10 ms būsenoje CONNECT, 3 identiškos klaidos nuslopintos)
%3|1618450168.254| KLAIDA|rdkafka#vartotojas-1| [thrd:app]: rdkafka#consumer-1: 192.168.1.175:9092/1: Prisijungti prie ipv4#192.168.1.175:9092 nepavyko: nežinoma klaida (po 10 ms būsenoje CONNECT, 3 identiškos klaidos nuslopintos)

 Savininkas| Paskelbta 2021-04-13 16:26:58 |
Pranešimo vartojimo principas:

Faktiniame gamybos procese kiekviena tema turės kelis skaidinius, o kelių skaidinių privalumas yra tas, kad, viena vertus, galimybė skaidyti duomenis brokeryje efektyviai sumažina pranešimų talpą ir pagerina IO našumą. Kita vertus, siekiant pagerinti vartotojo pusės vartojimo galią, ta pati tema paprastai bus vartojama per kelis vartotojus, tai yra vartotojo pusės apkrovos balansavimo mechanizmas, kurį mes suprasime toliau, kaip vartotojai vartoja pranešimus kelių skaidinių ir kelių vartotojų atveju? Kafka egzistuoja vartotojų grupių sąvokoje, tai yra, group.id tos pačios rūšies vartotojai, priklausantys vartotojų grupei, ir visi grupės vartotojai koordinuoja, kad sunaudotų visus prenumeratos temos skaidinius. Žinoma, kiekvieną skaidinį gali vartoti tik tos pačios vartotojų grupės vartotojai, tad kaip tos pačios vartotojų grupės vartotojai paskirsto duomenis, kuriuose skaidinys turėtų būti vartojamas? Paprastas pavyzdys, jei prarandami skaidiniai, tai yra, kai dalininkų skaičius yra toks pat kaip vartotojų skaičius, kiekvienas vartotojas atitinka skaidinį, jei vartotojų skaičius yra didesnis nei skaidinių, tada papildomas vartotojų skaičius neveiks, priešingai, bus vartotojų, sunaudojančių kelis skaidinius.

Zonavimo priskyrimo strategija:

Kafkoje yra dvi skaidinių paskirstymo strategijos: viena yra diapazonas (numatytasis), o kitas - RoundRobin (apklausa). Tai nustato vartotojo konfigūracijos parametras partition.assignment.strategy.


Peržiūrėti visas temas


Išsamios temos peržiūra




 Savininkas| Paskelbta 2021-05-08 17:17:33 |
"Kafka" ištrina vartotojų grupes



Prašomos vartotojų grupės (toliau – itsvse) buvo ištrintos sėkmingai.


Gali būti pranešta apie šias klaidas:

Error: Deletion of some consumer groups failed:
* Grupės 'itsvse' panaikinti nepavyko dėl: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: grupė nėra tuščia.
sprendimas

Naudoti visus pranešimus arba nustatyti poslinkį

Kafka rankiniu būdu nustato poslinkį
https://www.itsvse.com/thread-9641-1-1.html
Tada ištrinkite jį dar kartą!

 Savininkas| Paskelbta 2021-04-13 15:40:48 |
Maitinimo apvalkalo komanda



Kiekvienas vartotojas palaiko 2 ryšius su "Kafka" paslauga
 Savininkas| Paskelbta 2021-05-07 12:37:06 |
kafka, norėdami peržiūrėti nurodytos grupės temų krūvų skaičių

Paskelbta 2021-06-16 12:41:09 |
Paklauskite, kodėl kodo negalima peržiūrėti~
 Savininkas| Paskelbta 2021-06-25 10:50:06 |
Kafka gauna temos dydžio komandą:



 Savininkas| Paskelbta 2021-07-18 10:15:01 |
Kafka komandinė eilutė temoms kurti:

Paskelbta 2021-09-03 11:52:41 |
Kafkoje vis dar yra daug spąstų, išmoktų
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com