Programiranje

Kako uporabljati sporočila Apache Kafka v .Net

Apache Kafka je odprtokodni, distribuiran, razširljiv, visoko zmogljiv posrednik sporočil za objavo in naročanje. Je odlična izbira za gradnjo sistemov, ki lahko obdelajo velike količine podatkov. V tem članku bomo preučili, kako lahko ustvarimo aplikacijo za proizvajalce in potrošnike za Kafko v jeziku C #.

Če želite začeti uporabljati Kafko, morate prenesti Kafko in ZooKeeper ter ju namestiti v svoj sistem. Ta članek DZone vsebuje podrobna navodila za nastavitev Kafke in ZooKeeperja v sistemu Windows. Ko končate nastavitev, zaženite ZooKeeper in Kafka in se dobite tukaj.

Arhitektura Apache Kafka

V tem poglavju bomo preučili arhitekturne komponente in s tem povezano terminologijo v Kafki. Kafka je v osnovi sestavljena iz naslednjih komponent:

  • Kafka Cluster - zbirka enega ali več strežnikov, znanih kot posredniki
  • Producer - komponenta, ki se uporablja za objavo sporočil
  • Potrošnik - komponenta, ki se uporablja za pridobivanje ali porabo sporočil
  • ZooKeeper - centralizirana koordinacijska služba, ki se uporablja za vzdrževanje informacij o konfiguraciji med vozlišči grozda v porazdeljenem okolju

Temeljna enota podatkov v Kafki je sporočilo. Sporočilo v Kafki je predstavljeno kot par ključ-vrednost. Kafka pretvori vsa sporočila v bajtna polja. Treba je opozoriti, da komunikacija med proizvajalci, potrošniki in grozdi v Kafki uporablja protokol TCP. Vsak strežnik v gruči Kafka je znan kot posrednik. Kafko lahko lestvico prilagodite vodoravno, tako da v gručo dodate dodatne posrednike.

Naslednji diagram prikazuje arhitekturne komponente v Kafki - pogled na visoki ravni.

TEMELJ Apache

Tema v Kafki predstavlja logično zbirko sporočil. Lahko si predstavljate vir ali kategorijo, v katero lahko proizvajalec objavlja sporočila. Mimogrede, posrednik Kafka vsebuje eno ali več tem, ki so nato razdeljene na eno ali več particij. Particija je definirana kot urejeno zaporedje sporočil. Predelne stene so ključ do zmožnosti Kafke, da se dinamično prilagaja, saj so razdelitve razdeljene med več posrednikov.

Lahko imate enega ali več proizvajalcev, ki v katerem koli trenutku potisnejo sporočila v skupino. Proizvajalec v Kafki objavi sporočila v določeno temo, potrošnik pa se naroči na to temo, da jih bo prejel.

Izbira med Kafko in RabbitMQ

Tako Kafka kot RabbitMQ sta priljubljena odprtokodna posrednika sporočil, ki sta že dolgo v široki uporabi. Kdaj naj izbere Kafko pred RabbitMQ? Izbira je odvisna od nekaj dejavnikov.

RabbitMQ je posrednik za hitra sporočila, napisan v jeziku Erlang. Njegove bogate zmožnosti usmerjanja in zmožnost ponujanja potrditev na sporočilo so močni razlogi za njegovo uporabo. RabbitMQ ponuja tudi uporabniku prijazen spletni vmesnik, ki ga lahko uporabite za nadzor strežnika RabbitMQ. Oglejte si moj članek, če želite izvedeti, kako delati z RabbitMQ v .Net.

Ko gre za podporo velikih uvedb, pa Kafka prilagaja veliko bolje kot RabbitMQ - vse, kar morate storiti, je dodati več particij. Upoštevati je treba tudi, da grozdi RabbitMQ ne prenašajo omrežnih particij. Če nameravate združiti strežnike RabbitMQ, namesto tega uporabite združitve. Več o gručah RabbitMQ in omrežnih particijah si lahko preberete tukaj.

Kafka prav tako očitno zasenči RabbitMQ v zmogljivosti. En primerek Kafke lahko obdela 100K sporočil na sekundo v primerjavi s 20K sporočili na sekundo za RabbitMQ. Kafka je tudi dobra izbira, kadar želite poslati sporočila z majhno zakasnitvijo, da bi podprli paketne potrošnike, ob predpostavki, da so potrošniki lahko na spletu ali zunaj njih.

Izgradnja proizvajalca in potrošnika Kafke

V tem poglavju bomo preučili, kako lahko zgradimo proizvajalca in potrošnika za uporabo s Kafko. V ta namen bomo v Visual Studio zgradili dve konzoli - ena bo predstavljala proizvajalca, druga pa potrošnika. In tako bomo morali namestiti ponudnika Kafke za .Net tako v aplikaciji proizvajalca kot tudi v potrošniški aplikaciji.

Mimogrede je na voljo veliko ponudnikov, toda v tej objavi bomo uporabili kafka-net, domači odjemalec C # za Apache Kafka. Kafka-net lahko namestite prek upravitelja paketov NuGet znotraj Visual Studio. To povezavo lahko spremljate do repozitorija kafka-net GitHub.

Tu je glavna metoda za našega proizvajalca Kafka:

statična praznina Main (string [] args)

        {

niz koristnega tovora;

niz teme;

Sporočilo sporočila = novo sporočilo (koristni tovor);

Uri uri = nov Uri (“// localhost: 9092”);

var options = new KafkaOptions (uri);

var usmerjevalnik = nov BrokerRouter (možnosti);

var odjemalec = novi proizvajalec (usmerjevalnik);

client.SendMessageAsync (tema, nov seznam {msg}). Počakajte ();

Console.ReadLine ();

        }

In tu je koda za našega potrošnika v Kafki:

statična praznina Main (string [] args)

        {

niz teme;

Uri uri = nov Uri (“// localhost: 9092”);

var options = new KafkaOptions (uri);

var usmerjevalnik = nov BrokerRouter (možnosti);

var Consumer = new Consumer (new ConsumerOptions (tema, usmerjevalnik));

foreach (var sporočilo v Consumer.Consume ())

            {

Console.WriteLine (Encoding.UTF8.GetString (message.Value));

            }

Console.ReadLine ();

        }

Upoštevajte, da bi morali imenske prostore Kafka vključiti v proizvajalčevo in potrošniško aplikacijo, kot je prikazano spodaj.

z uporabo KafkaNet;

z uporabo KafkaNet.Model;

z uporabo KafkaNet.Protocol;

Na koncu samo zaženite proizvajalca (najprej proizvajalca) in nato še potrošnika. In to je to! Videti bi moralo sporočilo "Dobrodošli v Kafki!" prikazano v oknu potrošniške konzole.

Medtem ko imamo na voljo številne sisteme za pošiljanje sporočil - RabbitMQ, MSMQ, IBM MQ Series itd., Je Kafka pred vsemi vrstami podatkov, ki lahko izvirajo iz številnih založnikov. Kafka se pogosto uporablja za IoT aplikacije in združevanje dnevnikov ter druge primere uporabe, ki zahtevajo nizko zakasnitev in močna jamstva za dostavo sporočil.

Če vaša aplikacija potrebuje hitrega in razširljivega posrednika sporočil, je Kafka odlična izbira. V tem blogu spremljajte še več objav o Kafki.

$config[zx-auto] not found$config[zx-overlay] not found