Kafka on LinkedInin kehittämä korkean suorituskyvyn hajautettu viestintäjärjestelmä, jota käytetään laajasti esimerkiksi lokien keruussa, suoratoistotietojen käsittely, verkko- ja offline-viestien jakelu ja muissa tilanteissa. Vaikka Kafaka ei ole suunniteltu perinteiseksi MQ:ksi, se voi useimmissa tapauksissa korvata perinteiset viestijärjestelmät, kuten ActiveMQ:n.
Kafka järjestää viestien kulun aiheiden mukaan, ja palvelinta, joka pitää viestejä, kutsutaan välittäjäksi, ja kuluttajat voivat tilata yhden tai useamman aiheen. Kuorman tasapainottamiseksi aiheen viestit voidaan jakaa useisiin osioihin, ja mitä enemmän osioita, sitä suurempi on Kafkan rinnakkaisuus ja läpäisykyky.
Kafka-klusterit vaativat zookeeper-tukea klusterien toteuttamiseen, ja zookeeper sisältyy jo uusimpaan Kafka-jakeluun, joka voidaan ottaa käyttöön käynnistämään zookeeper-palvelin ja Kafka-palvelin samanaikaisesti, tai käyttää muita olemassa olevia zookeeper-klustereita.
Toisin kuin perinteisessä MQ:ssa, kuluttajien täytyy pitää offset itse, ja kun he saavat viestejä kafkalta, he hakevat viestejä vasta nykyisen offsetin jälkeen. Kafkan Scala/Java-asiakasohjelma toteuttaa jo tämän osan logiikasta tallentamalla offsetin eläintarhanhoitajalle. Jokainen kuluttaja voi valita tunnisteen, ja saman tunnisteen omaavat kuluttajat saavat saman viestin vain kerran.Jos aiheen käyttäjät käyttävät samaa ID:tä, kyseessä on perinteinen jono. Jos jokainen kuluttaja käyttää eri tunnistetta, kyseessä on perinteinen pub-sub.
Arvostelu:
Kafkan kulutus
1. Saman group_id kuluttajat voivat käyttää viestejä (Jonotustila)
2. Eri group_id kuluttajat saavat saman uutisen
Kafkan edut
Hajautettu ja erittäin skaalautuva. Kafka-klustereita voidaan skaalata läpinäkyvästi lisäämään uusia palvelimia klusteriin.
Korkea suorituskyky. Kafkan suorituskyky ylittää selvästi perinteisten MQ-toteutusten, kuten ActiveMQ:n ja RabbitMQ:n, erityisesti Kafkan, joka tukee myös eräajotoimintoja. Seuraava kuva näyttää LinkedInin kuluttajasuorituskyvyn stressitestin tulokset:
Viansietokyky. Jokaisen Kafkan osion data replikoidaan useille palvelimille. Kun välittäjä epäonnistuu, ZooKeeper-palvelu ilmoittaa tuottajalle ja kuluttajalle, jotka vaihtavat toiseen välittäjään.
Kafkan haitat:
Toista viestejä. Kafka takaa, että jokainen viesti toimitetaan vähintään kerran, ja vaikka mahdollisuudet ovat pienet, on mahdollista, että viesti toimitetaan useita kertoja. Uutiset ovat väärässä. Vaikka viestit osion sisällä ovat taatusti järjestyksessä, jos aiheessa on useita osioita, viestien välittäminen osioiden välillä ei ole taattua järjestystä. Monimutkaisuus. Kafka vaatii eläintarhanhoitajien klustereiden tuen, ja aiheet vaativat yleensä manuaalista työtä luomiseen, käyttöönottoon ja ylläpitoon, joka on kalliimpaa kuin tavalliset viestijonot
.NET/C# viestijonon Kafka-toiminnot
Ensiksi käytä .NET Core 3.1:ttä luodaksesi kaksi uutta konsoliprojektia, nimittäin Kafka-Consumerin ja Kafka-Producerin
Käytä nugetia viittaamaan Confluent.Kafka-pakettiin näin, seuraavalla komennolla:
GitHub-osoite:Hyperlinkin kirjautuminen on näkyvissä.
Aloitamme ensin tuottajaohjelman, ja jos käynnistämme kuluttajan ensin, saamme seuraavan virheen:
Virhe tapahtui: Välittäjä: Tuntematon aihe tai osio Tämä artikkeli käsittelee asetuksiaEnableAutoOffsetStore on väärä, eli offset-tallennustilan manuaalinen asetus (samankaltainen kuin manuaalinen vahvistusviesti)
Kuluttajat eivät aseta OffsetStorea kulutuksen jälkeen
Yritä käyttää tuottajaa kahden viestin tuottamiseen, laita kuluttajan kulutus päälle, MaxPollIntervalMs = 10000 // 10 sekuntia ilman manuaalista asetusta, anna muiden asiakkaiden kuluttaa, tietenkään muut asiakkaat eivät kuluta sitä 10 sekunnin kuluessa
MaxPollIntervalMs selittää
Edistyneille kuluttajille maksimiaika salli viestien kuluttamiseen puheluiden välillä (esimerkiksi rd_kafka_consumer_poll()). Jos tämä väli ylittyy, kuluttaja katsotaan epäonnistuneeksi ja ryhmä tasapainotetaan uudelleen siten, että osio siirretään toiselle kuluttajaryhmän jäsenelle. Varoitus: Offset-commitit eivät välttämättä ole tällä hetkellä mahdollisia. Huomautus: Suositellaan asettamaan "enable.auto.offset.store=false" sovelluksille, jotka ovat prosessoineet pitkään, ja tallentamaan offset (käyttäen offsets_store()) viestin käsittelyn jälkeen* varmistaakseen, ettei siirtymää sitoudu automaattisesti ennen käsittelyn valmistumista. Tarkista kerran sekunnissa kahden välein. Lisätietoja löytyy KIP-62:sta. Renderöinnit ovat seuraavat:
OffsetStore asetetaan sen jälkeen, kun kuluttaja on lopettanut kulutuksensa
koodi
Kun asennus on valmis, odota 10 sekuntia, niin se toimii edelleenSain viimeisen viestin(Kun kuluttaja yhdistyy välittäjään,Aloita kulutus offset-asennostaJos c.Commit(cr) on asetettu; Viimeistä viestiä ei vastaanoteta toistuvasti.
Katso lähdekoodi
commit offset + 1 commit, ja lopulta kutsutaan Librdkafka.topic_partition_list_destroy(cOffsets);
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Aseta eri GroupId
Kokeile asettaa toinen GroupId komentoriviparametrin kautta ja lähettää sitten viesti tuottajan kautta, kuten seuraavassa kuvassa näkyy:
Sekä clinet1 että client2Vastaanota historiallisia viestejä, ja kun tuottaja lähettää viestin, molemmat ovat melkeinVastaanota viestejä samanaikaisesti。
Uudet kuluttajat saavat vain uusia viestejä
Miten saat uuden asiakkaan vastaanottamaan vain uusia viestejä ja jättämään historialliset tiedot huomiotta?
Ympäristöt ovat seuraavat:
Kuten alla on esitetty:
Tuottajakoodi
Seuraavasti:
Kuluttajakoodi
Seuraavasti:
Lähdekoodin lataus
Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyvä Vastaus
|