Kuinka tietää, onko Apache Kafka sinulle sopiva

Apache Kafka on kasvanut paljon toiminnallisuudessaan ja ulottuvillaan parin viime vuoden aikana. Sitä käyttää tuotannossa kolmasosa Fortune 500: sta, mukaan lukien seitsemän kymmenestä maailman parhaasta pankista, kahdeksan kymmenestä parhaasta vakuutusyhtiöstä ja yhdeksän kymmenestä Yhdysvaltain teleyrityksestä [lähde].

Tämä artikkeli antaa sinulle nopean esityksen Kafkan tarjoamista ydintoiminnoista. Esitän paljon esimerkkejä, joiden avulla ymmärrät yleiset käyttötavat. Toivottavasti löydät jonkin verran korrelaatiota omiin työnkulkuihisi, jotta voit alkaa hyödyntää Kafkan voimaa. Aloitetaan tarkastelemalla Kafkan tarjoamia kahta keskeistä toimintoa.

1. Kafka viestintäjärjestelmänä

Viestinvälitystä käytetään laajalti kahdella tavalla:

  • Jonottaminen (SQS, selleri ja niin edelleen): Jonon kuluttajat toimivat työntekijäryhmänä. Jokainen viesti menee vain yhteen työntekijän prosesseista jakamalla työn tehokkaasti.
  • Julkaise-Tilaa (SNS, PubNub ja niin edelleen): Tilaajat ovat yleensä riippumattomia toisistaan. Jokainen tilaaja saa kopion jokaisesta viestistä. Se toimii kuin ilmoitusjärjestelmä.

Nämä molemmat ovat hyödyllisiä paradigmoja. Jonottaminen jakaa työn ja on erinomainen vikasietoisuudelle ja mittakaavalle. Julkaise-Tilaa-sovellus sallii usean tilaajan, joka antaa sinun irrottaa järjestelmäsi. Kafkan kauneus on se, että se yhdistää sekä jonottamis- että julkaisu- ja tilaustilanteet yhdeksi tukevaksi viestijärjestelmäksi.

Suosittelen lukemaan dokumentaatio, joka selittää taustalla olevan suunnittelun ja kuinka tämä yhdistelmä saavutetaan aiheen, osioiden ja kuluttajaryhmien avulla. Oikeudenmukaisuuden vuoksi tämä toiminnallisuus voidaan saavuttaa myös RabbitMQ- tai SNS-SQS-yhdistelmällä.

2. Kafka stream-prosessointiin

Kun sinulla on vankka, skaalautuva viestijärjestelmä, kaikki tarvitsemasi on helppo tapa käsitellä viestivirta. Stream API tarjoaa juuri sen. Se on Java-asiakaskirjasto (nykyään myös Scala), joka tarjoaa korkeamman tason abstraktin kuin tuottajan ja kuluttajan sovellusliittymät.

Sen avulla on helppo suorittaa:

  • valtiottomat toiminnot, kuten suodattaminen ja muuntaminen stream-viesteihin
  • tilalliset toiminnot, kuten liittyminen ja yhdistäminen aikaikkunassa

Stream-sovellusliittymä käsittelee viestien sarjoittamista / ansaitsemista ja ylläpitää tilaa, jota vaaditaan tilallisiin toimintoihin.

Näytä minulle koodi

Tässä on Stream API -esimerkki, joka lukee selkeää tekstiä syötevirrassa, laskee kunkin sanan esiintymät ja kirjoittaa määrän lähtövirtaan. Katso koko versio täältä.

Ikkunaamalla se on helppo yhdistää ajanjaksolle ja seurata asioita, kuten N-alkuisen sanan tuona päivänä (ei esitelty tässä).

Kafkan tyypilliset käyttötapaukset (esimerkit)

  • Kuvittele, että sinulla on matkasivusto. Hotellien ja lentojen hinnat muuttuvat jatkuvasti. Muutamille järjestelmän komponenteille (hintahälytykset, analytiikka) on ilmoitettava näistä muutoksista. Postitat muutokset Kafkan aiheisiin, ja jokainen komponentti, joka on ilmoitettava, toimii tilaajana. Yhden tilaajajärjestelmän kaikki solmut muodostavat yhden asiakasryhmän. Annettu viesti lähetetään vain yhdelle kuluttajaryhmän solmulle. Tällä tavalla kukin komponentti saa kopion viestistä, plus työ jakautuu tehokkaasti kunkin komponentin sisällä.
  • Verkkosivuston toimintaa (sivun katselua, hakuja tai muita käyttäjien mahdollisia toimia) voidaan seurata ja analysoida Kafkan kautta. Itse asiassa tämä oli alkuperäinen käyttötapa, jolle Kafka keksittiin LinkedInissä. Verkkosivuston aktiviteetit julkaistaan ​​keskeisissä aiheissa yhdellä aihealueella toimintotyypeittäin. Syöte voidaan käsitellä reaaliajassa saadaksesi tietoa käyttäjän sitoutumisesta, luopumista, sivuvirroista ja niin edelleen.
  • Kuvittele, että GPS-majakoista tai älypuhelinlaitteista tulee sijaintitietoja, ja haluat käsitellä niitä reaaliajassa, jotta näytetään ajoneuvon polku, ajettu matka ja niin edelleen. Saapuvat tiedot voidaan julkaista Kafkan aiheista ja käsitellä Stream API: lla. Tilallinen käsittely ikkunoiden kanssa on hyödyllistä, kun joudut purkamaan ja käsittelemään tietyn käyttäjän kaikki sijaintitiedot tietyn ajanjakson ajan.

Milloin et käytä Kafkaa

  • Jos et voi tai et halua siirtyä Java / Scalaan Kafka-klusterin kanssa puhuttavia palveluita varten, menetät kaikki Kafka Streamsin tarjoamat korkeamman tason abstraktiot. Streams API on pääasiassa asiakaskirjasto, joka puhuu Kafka-klusterille. Kafkan takana oleva yritys Confluent on tällä hetkellä keskittynyt Javaan. Suosituilla kielillä, kuten Pythonilla, on myös ollut avoin kysymys streaming-tuelle jo yli 1,5 vuoden ajan.
  • Jos tarvitset vain jonon, harkitse sen sijaan RabbitMQ: ta. Kafkan avulla jokainen osio voidaan kuluttaa vain yhden asiakkaan toimesta. Ja sinun on päätettävä osiosta, kun asetat tehtävän jonoon. Joten on mahdollista, että tietyn osion tehtävien tulva voi aiheuttaa nälkää, etkä voi tehdä mitään, koska kuluttajien lisääminen ei auta.
  • Jos käsittelet vain muutama tuhat viestiä päivittäin, Kafka on todennäköisesti yliarvioitu. Kafka on todella rakennettu käsittelemään laajamittaista stream-prosessointia, joten sen asentaminen ja ylläpito ei ole sen arvoista, jos sinulla ei ole / ennakoi mittakaavaa.

Se on kaikki ihmiset. Tämä kattaa tärkeät asiat, jotka sinun on tiedettävä Apache Kafkasta. Jos nautit sen lukemisesta, seuraa blogiani. Kerro minulle, haluatko nähdä yleiskuvan muista työkaluista.

Näytä kaikki Amit Rathin viestit

Alun perin julkaistu osoitteessa blog.amirathi.com 3. maaliskuuta 2018.