Kako koristiti Apache Kafka poruke u .Netu

Apache Kafka je posrednik za poruke s otvorenim izvorom, distribuiran, skalabilan, visokih performansi i objavljivanje-pretplata. Izvrstan je izbor za izgradnju sustava sposobnih za obradu velike količine podataka. U ovom ćemo članku pogledati kako možemo stvoriti proizvođačku i potrošačku aplikaciju za Kafku na C #.

Da biste započeli koristiti Kafku, trebali biste preuzeti Kafku i ZooKeeper i instalirati ih na svoj sustav. Ovaj članak o DZoneu sadrži detaljne upute za postavljanje Kafke i ZooKeepera na Windowsima. Kad završite s postavljanjem, pokrenite ZooKeeper i Kafku i nađite se ovdje.

Apache Kafka arhitektura

U ovom ćemo dijelu ispitati arhitektonske komponente i srodnu terminologiju u Kafki. U osnovi, Kafka se sastoji od sljedećih komponenata:

  • Kafka klaster - zbirka jednog ili više poslužitelja poznatih kao brokeri
  • Producer - komponenta koja se koristi za objavljivanje poruka
  • Potrošač - komponenta koja se koristi za dohvaćanje ili konzumiranje poruka
  • ZooKeeper - centralizirana usluga koordinacije koja se koristi za održavanje podataka o konfiguraciji na čvorovima klastera u distribuiranom okruženju

Temeljna jedinica podataka u Kafki je poruka. Poruka na Kafki predstavljena je kao par ključ / vrijednost. Kafka pretvara sve poruke u bajtne nizove. Treba napomenuti da komunikacija između proizvođača, potrošača i klastera u Kafki koristi TCP protokol. Svaki poslužitelj u Kafka klasteru poznat je kao posrednik. Kafku možete vodoravno skalirati dodavanjem dodatnih brokera u klaster.

Sljedeći dijagram ilustrira arhitektonske komponente u Kafki - pogled na visokoj razini.

TEMELJ Apača

Tema na Kafki predstavlja logičnu zbirku poruka. Možete to smatrati feedom ili kategorijom na koju proizvođač može objavljivati ​​poruke. Inače, Kafkin posrednik sadrži jednu ili više tema koje su pak podijeljene u jednu ili više particija. Particija je definirana kao uređeni slijed poruka. Particije su ključ sposobnosti Kafke da se dinamički skalira, jer se particije distribuiraju među više brokera.

Možete imati jednog ili više proizvođača koji guraju poruke u klaster u bilo kojem trenutku. Proizvođač u Kafki objavljuje poruke na određenu temu, a potrošač se pretplaćuje na temu da bi ih primio.

Izbor između Kafke i RabbitMQ-a

I Kafka i RabbitMQ popularni su posrednici poruka otvorenog koda koji su u širokoj upotrebi već duže vrijeme. Kada biste trebali odabrati Kafku umjesto RabbitMQ? Izbor ovisi o nekoliko čimbenika.

RabbitMQ je brzi posrednik poruka napisan na jeziku Erlang. Njegove bogate mogućnosti usmjeravanja i sposobnost pružanja potvrde po poruci snažni su razlozi da je koristite. RabbitMQ također nudi user-friendly web sučelje koje možete koristiti za nadgledanje vašeg RabbitMQ poslužitelja. Pogledajte moj članak da biste naučili kako raditi s RabbitMQ-om u .Netu.  

Međutim, što se tiče podrške velikim implementacijama, Kafka se skalira puno bolje od RabbitMQ - sve što trebate je dodati još particija. Također treba imati na umu da RabbitMQ klasteri ne podnose mrežne particije. Ako planirate grupirati RabbitMQ poslužitelje, umjesto toga trebali biste koristiti federacije. Ovdje možete pročitati više o RabbitMQ klasterima i mrežnim particijama.

Kafka također očito nadmašuje RabbitMQ u izvedbi. Jedna instanca Kafke može obraditi 100.000 poruka u sekundi, nasuprot 20K poruka u sekundi za RabbitMQ. Kafka je također dobar izbor kada želite slati poruke s malim kašnjenjem kako biste podržali skupne potrošače, pod pretpostavkom da potrošači mogu biti na mreži ili izvan mreže.

Izgradnja proizvođača Kafke i potrošača Kafke

U ovom ćemo odjeljku ispitati kako možemo stvoriti proizvođača i potrošača za upotrebu s Kafkom. Da bismo to učinili, u Visual Studiju ćemo izgraditi dvije aplikacije za konzole - jedna od njih predstavljat će proizvođača, a druga potrošača. I trebat ćemo instalirati dobavljača Kafke za .Net i u proizvođačkoj i u potrošačkoj aplikaciji.

Inače, dostupno je mnogo davatelja usluga, ali u ovom ćemo postu koristiti kafka-net, izvorni C # klijent za Apache Kafka. Kafka-net možete instalirati putem upravitelja paketa NuGet iz Visual Studija. Ovu vezu možete pratiti do kafka-net GitHub spremišta.

Evo glavne metode za našeg proizvođača Kafke:

statička praznina Main (string [] args)

        {

            niz korisnih tereta;

            niz tema;

            Poruka poruke = nova poruka (korisni teret);

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

            var options = novi KafkaOptions (uri);

            var usmjerivač = novi BrokerRouter (opcije);

            var client = novi proizvođač (usmjerivač);

            client.SendMessageAsync (tema, novi popis {msg}). Pričekajte ();

            Console.ReadLine ();

        }

I evo koda za našeg potrošača u Kafki:

statička praznina Main (string [] args)

        {

            niz tema;

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

            var options = novi KafkaOptions (uri);

            var usmjerivač = novi BrokerRouter (opcije);

            var potrošač = novi potrošač (novi ConsumerOptions (tema, usmjerivač));

            foreach (var poruka u potrošaču.Consume ())

            {

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

            }

            Console.ReadLine ();

        }

Imajte na umu da biste trebali uključiti prostore imena Kafka i u proizvođačke i u potrošačke programe kao što je prikazano u nastavku.

koristeći KafkaNet;

pomoću KafkaNet.Model;

pomoću KafkaNet.Protocol;

Napokon, samo pokrenite proizvođača (prvo proizvođača), a zatim potrošača. I to je to! Trebali biste vidjeti poruku "Dobrodošli u Kafku!" prikazan u prozoru potrošačke konzole.

Iako imamo na raspolaganju mnogo sustava za razmjenu poruka - RabbitMQ, MSMQ, IBM MQ Series, itd. - Kafka je ispred paketa za obradu velikih tokova podataka koji mogu potjecati od mnogih izdavača. Kafka se često koristi za IoT aplikacije i agregaciju dnevnika te za druge slučajeve upotrebe koji zahtijevaju nisku latenciju i jaka jamstva isporuke poruka.

Ako vašoj aplikaciji treba brz i skalabilan posrednik poruka, Kafka je izvrstan izbor. Pratite još postova o Kafki na ovom blogu.