Kasutaja:ManTotters/Apache Kafka

Allikas: Vikipeedia

Apache Kafka on avatud lähtekoodiga andmevoo käsitsemise tarkvara, mis arendati esialgsel kujul välja LinkedIn-is ning annetati seejärel Apache Software Foundation-ile. Apache Kafka on kirjutatud Java ja Scala keeltes. Projekti eesmärgiks on pakkuda ühendatud, kõrge läbilaskevõimega ja madala latentsusega platvormi reaalaja andmevoogude käsitsemiseks. Kafkat on võimalik ühendada välistesse süsteemidesse Kafka Connect-i abil välistesse süsteemidesse andmete impordiks ja ekspordiks, ning pakub andmevoo töötkuseks Kafka Streams teeki Javas. Kafka kasutab tõhususele optimeeritud binaarset TCP-põhist protokolli, ning toetub message set abstraktsioonile, mis seob mitu sõnumit kokku, et vähendada võrguliikluse poolt tekivat kulu.[1]

Ajalugu[muuda | muuda lähteteksti]

Apache Kafka arendati esialgselt välja LinkedIn-i poolt, ning lähtekood muudeti avalikuks 2011 aasta alguses. 2012 aasta 23. oktoobril väljus projekt Apache Inkubaatorist. Jay Kreps otsustas tarkvara nimetada kirjtanik Franz Kafka järgi, kuna Kafka on süsteem, mis on optimiseeritud kirjutamiseks, ning kuna talle meeldis Kafka looming.[2]

Kasutuskohad[muuda | muuda lähteteksti]

Apache Kafka põhineb kehtestuste logil (ing commit log), ja lubab kasutajal piiramata hulgast süsteemidest andmeid tellida (ing subscribe) ning nendesse andmeid avaldada. Mõned näited kasutuskohtadest on Uber-is juhtide ja reisijate kokkuviimine, ning mitmesugused reaalaja andmevoogude implementatsioonid LinkedIn-is ja Netflix-is.[3]

Apache Kafka arhitektuur[muuda | muuda lähteteksti]

Kafka salvestab võtme ja väärtusega sõnumeid, mis pärinevad määramata hulgast protsessidest, mida kutsutakse producer-iteks. Andmed on jagatud erinevatesse kategooriatesse, nn "teemadesse" (topics), mis omakorda võivad olla jaotatud partitsioonideks (partition). Partitsiooni siseselt on sõnumid rangelt järjestatud nihete (offset) järgi, indekseeritud, ning salvestatud koos ajatempliga. Teist sorti protsessid, mida kutsutakse consumer-iteks, saavad lugeda sõnumeid partitsioonidest. Andmevoo töötluseks mõeldud Streams API lubab kirjutada Java rakendusi, mis tarbivad andmeid Kafka-st ning kirjutavad tulemused uuesti Kafka-sse. Apache Kafka töötab ka väliste andmevoo töötluse süsteemidega, nagu näiteks Apache Apex, Apache Flink, Apache Spark ja Apache Storm.

Kafkat käitatakse ühest või mitmest serverist (mida nimetatakse broker-iteks) koosnevas klastris. Teema partitsioonid on jaotatud klastris olevatesse broker-itesse. Lisaks on paritsioonid paljundatud koopiatega mitmesse erinevasse broker-isse. Selline arhitektuur lubab Kafkal transportida massiivseid andmevooge tõrkeid taluval viisil, ning on lubanud Kafkal asendada konventsionaalseid sõnumite saatmissüsteeme, nagu näiteks Java Message Service (JMS), Advanced Message Queuing Protocol (AMQP) jt. Alates versioonist 0.11.0.0 pakub Kafka transaktsioonilist kirjutamist (ing transactional writes), mis pakuvad täpselt-üks-kord andmevoo töötlust, kasutades Streams API-t.

Kafka toetab kahte tüüpi teemasid: tavalisi (regular) ja pakitud (compacted). Tavalisi teemasid saab seadistada säilitusperioodi või andmemahu piiriga. Kui kirjed on vanemad kui seadistatud säilitusperiood või anmemahu piir on partitsiooni poolt ületatud, on Kafkal lubatud vanu andmeid kustutada. Vaikimisi on teemad seadistatud säilitusperioodiga 7 päeva, kuid andmeid on võimalik säilitada ka igavesti. Pakitud teemade puhul ei aegu kirjed aja- või mahupiiride põhjal. Selle asemel käsitleb Kafka uusi sõnumeid kui uuendusi vanematele sõnumitele ning garanteerib, et ei kustuta kunagi ühe võtmega seotud uusimat kirjet. Kasutajad saavad kustutada sõnumeid täielikult, kirjutades niinimetatud ilma väärtuseta tombstone-sõnumi kindlale võtmele.

Kafka hõlmab endas nelja põhilist rakendusliidest:

  • Producer API - Lubab rakendusel publitseerida kirjete vooge.
  • Consumer API - Lubab rakendusel jälgida teemasid ning töödelda kirjete vooge.
  • Connector API - Ühendab Consumer-ite ja Producer-ite abil teemad olemasolevate rakendustega.
  • Streams API - Liides, mis võtab sisendiks andmevoo, töötleb seda, ning avaldab töödeldud kirjed uude teemasse.

Kafka binaarne alusprotokoll lubab arendajatel kirjutada consumer ja producer-tüüpi kliente vabalt valitud programmeerimiskeeles. See seob Kafka lahti Java Virtuaalmasina ökosüsteemist. Nimekiri saadavatest mitte-Java klientidest on leitav Apache Kafka wiki-st.

Kafka Streams API[muuda | muuda lähteteksti]

Kafka Streams on Java-s kirjutatud andmevoo töötluse teek, mis lisati Kafka-sse versioonis 0.10.0.0. See teek lubab arendada olekulisi (ing stateful) andmevoo töötluse rakendusi mis on skaleeruvad, elsastsed ja täielikult tõrketaluvad. Peamine liides on andmevoo töötluse domeeni-spetsiifiline keel (DSL), mis pakub kõrgema taseme operaatoreid nagu filtreerimine, vastendusfunktsioon (ing map), grupeerimine, akendamine, agregeerimine ja tabeli kontsept. Olekuliseks vootöötluseks kasutab Kafka RocksDB-d et säilitada lokaalset operaatorite olekut. Kuna RocksDB toetab kettale kirjutamist, võib hoitav olek olla suurem kui kasutada olev põhimälu. Tõrketaluvuseks on kõik lokaalse oleku uuendused kirjutatud samuti ühte teemasse Kafka klastris. See lubab taasluua olekut, lugedes andmed nendest teemadest RocksDB andmebaasi.

Kafka versiooniühilduvus[muuda | muuda lähteteksti]

Kuni versioonini 0.9.x on Kafka broker-id ühilduvad vaid vanemate klientidega. Alates Kafka versioonist 0.10.0.0 on broker-id päripidi ühilduvad ka uuemate klientidega. Kui uuem klient ühenub vanemasse broker-isse, saab ta kasutada vaid neid funktsioone, mida viimane toetab. Streams API täielik ühilduvus algab alates versioonist 0.10.1.0.

Kafka jõudlus[muuda | muuda lähteteksti]

Et jälgida Kafka jõudlust otsast-otsani, on tarvis jälgida näitajaid broker-itest, consumer-itest ja producer-itest, ning lisaks jälgida ZooKeeperit, mida Kafka kasutab consumer-ite koordineerimiseks.[4] Kafka jõudluse jälgimiseks on saadaval mitmeid jälgimisplatvorme, nagu näiteks vabavaraline LinkedIn-i Burrow või tasuline Datadog. Lisaks nendele platvormidele saad Kafka kohta andmeid koguda Javaga tavaliselt kaasaskäivate tööriistadega, nagu näiteks JConsole.[5]

Viited[muuda | muuda lähteteksti]

  1. "Efficiency". kafka.apache.org.
  2. "What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?". Quora.
  3. "What is Apache Kafka". confluent.io.
  4. "Monitoring Kafka performance metrics". Datadog.
  5. "Collecting Kafka performance metrics - Datadog". Datadog.