Programovanie

Ako používať zasielanie správ Apache Kafka v .Net

Apache Kafka je otvorený, distribuovaný, škálovateľný, vysoko výkonný sprostredkovateľ správ s možnosťou publikovať a prihlásiť sa na odber. Je to skvelá voľba pre stavebné systémy schopné spracovať veľké objemy dát. V tomto článku sa pozrieme na to, ako môžeme vytvoriť aplikáciu výrobcu a spotrebiteľa pre Kafku v jazyku C #.

Ak chcete začať používať Kafku, mali by ste si stiahnuť Kafku a ZooKeeper a nainštalovať si ich do vášho systému. Tento článok o DZone obsahuje podrobné pokyny na nastavenie programov Kafka a ZooKeeper v systéme Windows. Po dokončení nastavenia spustite ZooKeeper a Kafku a stretnite sa so mnou tu.

Architektúra Apache Kafka

V tejto časti preskúmame architektonické prvky a súvisiacu terminológiu v Kafke. V zásade sa Kafka skladá z nasledujúcich komponentov:

  • Kafka Cluster - kolekcia jedného alebo viacerých serverov známych ako sprostredkovatelia
  • Producent - komponent, ktorý sa používa na publikovanie správ
  • Spotrebiteľ - komponent, ktorý sa používa na načítanie alebo konzumáciu správ
  • ZooKeeper - centralizovaná koordinačná služba používaná na udržiavanie informácií o konfigurácii medzi uzlami klastra v distribuovanom prostredí

Základnou jednotkou údajov v Kafke je správa. Správa v Kafke je predstavovaná ako pár kľúč - hodnota. Kafka prevádza všetky správy na bajtové polia. Je potrebné poznamenať, že komunikácia medzi producentmi, spotrebiteľmi a klastrami v Kafke používa protokol TCP. Každý server v klastri Kafka je známy ako sprostredkovateľ. Kafku môžete škálovať vodorovne jednoduchým pridaním ďalších sprostredkovateľov do klastra.

Nasledujúci diagram ilustruje architektonické komponenty v Kafke - pohľad na vysokej úrovni.

NADÁCIA Apache

Téma v Kafke predstavuje logickú zbierku správ. Môžete si to predstaviť ako informačný kanál alebo kategóriu, do ktorej môže producent zverejňovať správy. Mimochodom, sprostredkovateľ Kafka obsahuje jednu alebo viac tém, ktoré sú naopak rozdelené do jednej alebo viacerých oblastí. Oddiel je definovaný ako usporiadaná sekvencia správ. Priečky sú kľúčom k schopnosti spoločnosti Kafka dynamicky sa škálovať, pretože sú rozdelené medzi viacerých sprostredkovateľov.

Môžete mať jedného alebo viacerých producentov, ktorí tlačia správy do klastra v danom okamihu. Producent v Kafke zverejňuje správy na konkrétnu tému a spotrebiteľ sa prihlasuje na odber témy na príjem správ.

Výber medzi Kafkou a RabbitMQ

Kafka aj RabbitMQ sú populárni sprostredkovatelia správ s otvoreným zdrojovým kódom, ktorí sa už pomerne dlho používajú. Kedy by ste si mali zvoliť Kafku pred RabbitMQ? Výber závisí od niekoľkých faktorov.

RabbitMQ je sprostredkovateľ rýchlych správ napísaný v jazyku Erlang. Jeho bohaté možnosti smerovania a schopnosť ponúknuť potvrdenie za správu sú silnými dôvodmi na jeho použitie. RabbitMQ tiež poskytuje užívateľsky prívetivé webové rozhranie, ktoré môžete použiť na sledovanie svojho servera RabbitMQ. V mojom článku sa dozviete, ako pracovať s RabbitMQ v .Net.

Pokiaľ však ide o podporu veľkých nasadení, Kafka je škálovateľná oveľa lepšie ako RabbitMQ - stačí ak pridáte ďalšie oddiely. Je tiež potrebné poznamenať, že klastre RabbitMQ netolerujú sieťové oddiely. Ak plánujete klastrovanie serverov RabbitMQ, mali by ste namiesto toho použiť federácie. Tu si môžete prečítať viac o klastroch a sieťových oddieloch RabbitMQ.

Kafka tiež zreteľne zatieni RabbitMQ vo výkone. Jedna inštancia Kafka dokáže spracovať 100 000 správ za sekundu, v porovnaní s 20 000 správami za sekundu pre RabbitMQ. Kafka je tiež dobrou voľbou, ak chcete prenášať správy s nízkou latenciou na podporu hromadných spotrebiteľov za predpokladu, že by mohli byť online alebo offline.

Budovanie výrobcu Kafka a spotrebiteľa Kafka

V tejto časti preskúmame, ako môžeme vytvoriť výrobcu a spotrebiteľa pre použitie so spoločnosťou Kafka. Aby sme to dosiahli, postavíme v Visual Studio dve konzolové aplikácie - jedna z nich bude zastupovať producenta a druhá spotrebiteľa. A budeme si musieť nainštalovať poskytovateľa Kafka pre .Net v produkčnej aj spotrebiteľskej aplikácii.

Mimochodom, je k dispozícii veľa poskytovateľov, ale v tomto príspevku budeme používať kafka-net, natívneho C # klienta pre Apache Kafka. Kafka-net môžete nainštalovať prostredníctvom správcu balíkov NuGet z Visual Studio. Tento odkaz môžete sledovať do úložiska GitHub kafka-net.

Tu je hlavná metóda pre nášho výrobcu Kafka:

static void Main (reťazec [] args)

        {

užitočné zaťaženie reťazca;

sláčiková téma;

Správa msg = nová správa (užitočné zaťaženie);

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

var options = nové KafkaOptions (uri);

var router = nový BrokerRouter (možnosti);

var klient = nový producent (smerovač);

client.SendMessageAsync (téma, nový zoznam {msg}). Wait ();

Console.ReadLine ();

        }

A tu je kód pre nášho spotrebiteľa Kafka:

static void Main (reťazec [] args)

        {

sláčiková téma;

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

var options = nové KafkaOptions (uri);

var router = nový BrokerRouter (možnosti);

var consumer = new Consumer (new ConsumerOptions (topic, router));

foreach (var správa v consumer.Consume ())

            {

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

            }

Console.ReadLine ();

        }

Pamätajte, že menné priestory Kafka by ste mali zahrnúť do aplikácií výrobcov aj spotrebiteľov, ako je uvedené nižšie.

pomocou KafkaNet;

pomocou KafkaNet.Model;

pomocou KafkaNet.Protocol;

Na záver stačí spustiť výrobcu (najskôr producent) a potom spotrebiteľa. A to je všetko! Mali by ste vidieť správu „Vitajte na Kafke!“ zobrazené v okne konzoly pre spotrebiteľa.

Aj keď máme na výber mnoho systémov na odosielanie správ - RabbitMQ, MSMQ, IBM MQ Series atď. - Kafka predstihuje balík riešení pre veľké prúdy dát, ktoré môžu pochádzať od mnohých vydavateľov. Kafka sa často používa pre aplikácie IoT a agregáciu protokolov a iné prípady použitia, ktoré si vyžadujú nízku latenciu a silné záruky doručenia správ.

Ak vaša aplikácia vyžaduje rýchleho a škálovateľného sprostredkovateľa správ, Kafka je skvelou voľbou. Sledujte ďalšie príspevky na Kafke v tomto blogu.

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