Programmēšana

Kā lietot Apache Kafka ziņojumapmaiņu .Net

Apache Kafka ir atvērtā koda, izplatīts, mērogojams, augstas veiktspējas ziņojumu publicēšanas un abonēšanas starpnieks. Tā ir lieliska izvēle ēku sistēmām, kas spēj apstrādāt lielu datu apjomu. Šajā rakstā mēs aplūkosim, kā mēs varam izveidot Kafka ražotāju un patērētāju lietojumprogrammu C #.

Lai sāktu lietot Kafka, lejupielādējiet Kafka un ZooKeeper un instalējiet tos savā sistēmā. Šajā DZone rakstā ir sniegti soli pa solim norādījumi par Kafka un ZooKeeper iestatīšanu operētājsistēmā Windows. Kad esat pabeidzis iestatīšanu, sāciet lietotni ZooKeeper un Kafka un iepazīstieties ar mani šeit.

Apache Kafka arhitektūra

Šajā sadaļā mēs izskatīsim Kafkas arhitektūras komponentus un saistīto terminoloģiju. Būtībā Kafka sastāv no šādām sastāvdaļām:

  • Kafka kopa - viena vai vairāku serveru kolekcija, kas pazīstama kā brokeri
  • Ražotājs - komponents, kas tiek izmantots ziņojumu publicēšanai
  • Patērētājs - komponents, kas tiek izmantots ziņojumu izgūšanai vai patērēšanai
  • ZooKeeper - centralizēts koordinācijas pakalpojums, ko izmanto, lai uzturētu konfigurācijas informāciju pār klastera mezgliem izplatītā vidē

Kafkas datu pamatvienība ir vēstījums. Kafkas ziņojums tiek attēlots kā atslēgu un vērtību pāris. Kafka pārveido visus ziņojumus baitu masīvos. Jāatzīmē, ka saziņā starp ražotājiem, patērētājiem un Kafka kopām tiek izmantots TCP protokols. Katrs Kafka klastera serveris ir pazīstams kā brokeris. Jūs varat mērogot Kafka horizontāli, vienkārši pievienojot kopai papildu brokerus.

Šī diagramma ilustrē Kafka arhitektūras komponentus - augsta līmeņa skats.

Apache FONDS

Kafkas tēma ir loģiska ziņojumu kolekcija. Jūs to varat uzskatīt par plūsmu vai kategoriju, kurā ražotājs var publicēt ziņojumus. Starp citu, Kafka brokeris satur vienu vai vairākas tēmas, kuras savukārt ir sadalītas vienā vai vairākās nodalījumos. Nodalījums tiek definēts kā sakārtota ziņojumu secība. Starpsienas ir atslēga Kafka spējai dinamiski mērogot, jo nodalījumi tiek sadalīti vairākiem brokeriem.

Jums var būt viens vai vairāki ražotāji, kas jebkurā brīdī ievieto ziņojumus klasterī. Ražotājs Kafkā publicē ziņojumus noteiktā tēmā, un patērētājs abonē tēmu, lai saņemtu ziņojumus.

Izvēle starp Kafka un RabbitMQ

Gan Kafka, gan RabbitMQ ir populāri atklātā pirmkoda ziņojumu brokeri, kas jau ilgu laiku ir plaši izmantoti. Kad jums vajadzētu izvēlēties Kafka, nevis RabbitMQ? Izvēle ir atkarīga no dažiem faktoriem.

RabbitMQ ir ātrs ziņojumu starpnieks, kas rakstīts Erlang valodā. Tā bagātīgās maršrutēšanas iespējas un spēja piedāvāt apstiprinājumus katram ziņojumam ir nopietni iemesli, lai to izmantotu. RabbitMQ nodrošina arī lietotājam draudzīgu tīmekļa saskarni, kuru varat izmantot sava RabbitMQ servera uzraudzībai. Apskatiet manu rakstu, lai uzzinātu, kā strādāt ar RabbitMQ .net.

Tomēr, runājot par lielu izvietojumu atbalstīšanu, Kafka mērogs ir daudz labāks nekā RabbitMQ - viss, kas jums jādara, ir pievienot vairāk nodalījumu. Jāatzīmē arī tas, ka RabbitMQ kopas nepieļauj tīkla nodalījumus. Ja plānojat apvienot RabbitMQ serverus, tā vietā jāizmanto federācijas. Vairāk par RabbitMQ kopām un tīkla nodalījumiem varat lasīt šeit.

Arī Kafka sniegumā nepārprotami pārspēj RabbitMQ. Viena Kafka instance var apstrādāt 100K ziņojumus sekundē, salīdzinot ar RabbitMQ tuvāk 20K ziņām sekundē. Kafka ir arī laba izvēle, ja vēlaties pārsūtīt ziņojumus ar zemu latentumu, lai atbalstītu pakešu patērētājus, pieņemot, ka patērētāji varētu būt tiešsaistē vai bezsaistē.

Kafka ražotāja un Kafka patērētāja veidošana

Šajā sadaļā mēs pārbaudīsim, kā mēs varam izveidot ražotāju un patērētāju lietošanai kopā ar Kafka. Lai to izdarītu, mēs Visual Studio izveidosim divas konsoles lietojumprogrammas - viena no tām pārstāvēs ražotāju, bet otra - patērētāju. Un mums būs jāinstalē Kafka nodrošinātājs .Net gan ražotāja, gan patērētāja lietojumprogrammā.

Starp citu, ir pieejami daudzi pakalpojumu sniedzēji, taču šajā ziņojumā mēs izmantosim kafka-net, vietējo C # klientu Apache Kafka. Jūs varat instalēt kafka-net, izmantojot Visual Studio, izmantojot NuGet pakotņu pārvaldnieku. Jūs varat sekot šai saitei uz kafka-net GitHub repozitoriju.

Šī ir mūsu Kafka ražotāja galvenā metode:

static void Main (virkne [] args)

        {

virknes lietderīgā slodze;

stīgu tēma;

Message msg = new Message (lietderīgā slodze);

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

var options = jauni KafkaOptions (uri);

var router = jauns BrokerRouter (opcijas);

var klients = jauns producents (maršrutētājs);

client.SendMessageAsync (tēma, jauns saraksts {msg}). Pagaidiet ();

Console.ReadLine ();

        }

Un šeit ir mūsu Kafka patērētāja kods:

static void Main (virkne [] args)

        {

stīgu tēma;

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

var options = jauni KafkaOptions (uri);

var router = jauns BrokerRouter (opcijas);

var patērētājs = jauns patērētājs (jauns ConsumerOptions (tēma, maršrutētājs));

foreach (var ziņojums patērētājam. Patērēt ())

            {

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

            }

Console.ReadLine ();

        }

Ņemiet vērā, ka Kafka nosaukumvietas jāiekļauj gan ražotāja, gan patērētāja lietojumprogrammās, kā parādīts zemāk.

izmantojot KafkaNet;

izmantojot KafkaNet.Model;

izmantojot KafkaNet.Protocol;

Visbeidzot, vienkārši vadiet ražotāju (vispirms ražotāju) un pēc tam patērētāju. Un viss! Jums vajadzētu redzēt ziņojumu “Welcome to Kafka!” tiek parādīts patērētāja konsoles logā.

Kaut arī mums ir pieejamas daudzas ziņojumapmaiņas sistēmas, no kurām izvēlēties - RabbitMQ, MSMQ, IBM MQ Series utt., Kafka ir priekšā daudzo datu plūsmām, kas var rasties no daudziem izdevējiem. Kafka bieži tiek izmantots IoT lietojumprogrammām un žurnālu apkopošanai un citiem lietošanas gadījumiem, kuriem nepieciešama zema latentuma pakāpe un spēcīgas ziņojumu piegādes garantijas.

Ja jūsu lietojumprogrammai ir nepieciešams ātrs un pielāgojams ziņojumu starpnieks, Kafka ir lieliska izvēle. Sekojiet līdzi jaunākajām ziņām par Kafka šajā emuārā.

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