Kafka este un sistem de mesagerie distribuit, de înaltă performanță, dezvoltat de LinkedIn, folosit pe scară largă în scenarii precum colectarea jurnalelor, procesarea datelor în streaming, distribuirea de mesaje online și offline și altele. Deși nu este proiectat ca un MQ tradițional, Kafaka poate înlocui sistemele tradiționale de mesagerie precum ActiveMQ în majoritatea cazurilor.
Kafka organizează fluxul mesajelor pe subiecte, iar serverul care stochează mesajele se numește broker, iar consumatorii se pot abona la unul sau mai multe subiecte. Pentru a echilibra încărcătura, mesajele unui subiect pot fi împărțite în mai multe partiții, iar cu cât sunt mai multe partiții, cu atât paralelismul și debitul Kafka sunt mai mari.
Clusterele Kafka necesită suport zookeeper pentru a implementa clustere, iar zookeeper este deja inclus în cea mai recentă distribuție kafka, care poate fi implementată pentru a începe simultan un server zookeeper și un server Kafka sau pentru a folosi alte clustere de zookeeper existente.
Spre deosebire de MQ tradițional, consumatorii trebuie să păstreze singuri un offset, iar când primesc mesaje de la kafka, trag mesaje doar după offset-ul curent. Clientul scala/java al Kafka implementează deja această parte a logicii salvând offset-ul către îngrijitor zoologic. Fiecare consumator poate alege un ID, iar consumatorii cu același ID vor primi același mesaj o singură dată.Dacă toți consumatorii unui subiect folosesc același ID, este o coadă tradițională. Dacă fiecare consumator folosește un ID diferit, este un pub-sub tradițional.
Recenzie:
Consum kafka
1. Consumatorii de același group_id, doar un singur consumator poate consuma mesaje (Modul coadă de coadă)
2. Consumatorii din group_id diferite primesc aceleași vești
Avantajele Kafka
Distribuit și foarte scalabil. Clusterele Kafka pot fi scalate transparent pentru a adăuga servere noi în cluster.
Performanță ridicată. Performanța Kafka depășește cu mult implementările tradiționale MQ, cum ar fi ActiveMQ și RabbitMQ, în special Kafka, care suportă și operațiuni batch. Imaginea următoare arată rezultatele testului de stres de performanță al consumatorilor de la LinkedIn:
Toleranță la greșeli. Datele din fiecare partiție din Kafka sunt replicate către mai multe servere. Când un broker eșuează, serviciul ZooKeeper va notifica producătorul și consumatorul, care trec la un alt broker.
Dezavantaje ale Kafka:
Repetă mesajele. Kafka garantează că fiecare mesaj va fi livrat cel puțin o dată, iar deși șansele sunt mici, există șansa ca un mesaj să fie livrat de mai multe ori. Știrile sunt nepotrivite. Deși mesajele din interiorul unei partiții sunt garantate să fie ordonate, dacă un subiect are mai multe partiții, livrarea mesajelor între partiții nu este garantată să fie ordonată. Complexitate. Kafka necesită sprijinul clusterelor de îngrijitori de grădini zoologice, iar subiectele necesită de obicei muncă manuală pentru a fi create, implementate și menținute mai costisitoare decât cozile generale de mesaje
.NET/C# operații Kafka din coada mesajelor .NET/C#
În primul rând, folosește .NET Core 3.1 pentru a crea două noi proiecte de consolă, și anume Kafka-Consumer și Kafka-Producer
Folosește nuget pentru a face referire la pachetul Confluent.Kafka astfel, cu următoarea comandă:
Adresă GitHub:Autentificarea cu hyperlink este vizibilă.
Începem mai întâi programul Producer, iar dacă începem mai întâi cu consumatorul, vom primi următoarea eroare:
A apărut o eroare: Broker: Subiect sau partiție necunoscută Acest articol va consuma setărileEnableAutoOffsetStore este fals, adică setarea manuală a stocării offset (similar unui mesaj de confirmare manuală)
Consumatorii nu setează OffsetStore după consum
Încearcă să folosești producătorul pentru a produce două mesaje, activează consumul consumatorilor, MaxPollIntervalMs = 10000 // 10 secunde fără setare manuală, permite altor clienți să consume, desigur, nu va fi consumat de alți clienți în 10 secunde
MaxPollIntervalMs explică
Pentru consumatorii avansați, timpul maxim permis pentru a consuma mesajele între apeluri (de exemplu, rd_kafka_consumer_poll()). Dacă acest interval este depășit, consumatorul este considerat că a eșuat și grupul este reechilibrat astfel încât partiția să fie realocată unui alt membru al grupului de consumatori. Atenție: S-ar putea să nu fie posibile commit-uri offset în acest moment. Notă: Se recomandă să se seteze "enable.auto.offset.store=false" pentru aplicațiile care sunt procesate de mult timp, apoi să se stocheze explicit offset-ul (folosind offsets_store()) după procesarea mesajului* pentru a se asigura că offset-ul nu este automat confirmat înainte de finalizarea procesării. Verifică o dată pe secundă, la intervale de câte două. Pentru mai multe informații, vezi KIP-62. Randările sunt următoarele:
OffsetStore este setat după ce consumatorul termină de cheltuit
cod
După ce configurarea este completă, așteaptă 10 secunde și tot va funcționaAm primit ultimul mesaj(Când consumatorul se conectează cu brokerul,Începe consumul din poziția de offsetDacă c.Commit(cr) este setat; Ultimul mesaj nu va fi primit în mod repetat.
Vezi codul sursă
să commit offset-ul + 1 și în cele din urmă să apeleze Librdkafka.topic_partition_list_destroy(cOffsets);
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Setează un alt GroupID
Încearcă să setezi un alt GroupId prin parametrul de linie de comandă, apoi trimite un mesaj prin producător, așa cum se arată în imaginea următoare:
Atât clinet1, cât și client2Primește mesaje istorice, iar după ce producătorul trimite un mesaj, amândoi aproape că vor fiPrimește mesaje în același timp。
Consumatorii noi primesc doar mesaje noi
Cum faci ca un client nou să primească doar mesaje noi și să ignore datele istorice?
Setările sunt următoarele:
Așa cum se arată mai jos:
Cod producător
Așa cum urmează:
Cod pentru consumatori
Așa cum urmează:
Descărcare codului sursă
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rog Răspunde
|