Keď hovoríme o distribuovaných systémoch, ako je uvedené vyššie, narazíme na problém analytiky a monitorovania. Každý uzol generuje veľa informácií o svojom zdraví (využitie procesora, pamäte atď.) A o stave aplikácie spolu s tým, čo sa používatelia snažia robiť. Tieto podrobnosti musia byť zaznamenané v:
- Rovnaké poradie, v akom sú vytvorené,
- Oddelené z hľadiska naliehavosti (analýza v reálnom čase alebo dávky údajov), a čo je najdôležitejšie,
- Samotný mechanizmus, pomocou ktorého sa zhromažďujú, musí byť distribuovaný a škálovateľný, inak nám zostáva jediný bod zlyhania. Niečo, čomu sa mal dizajn distribuovaného systému vyhnúť.
Prečo používať Kafku?
Apache Kafka má postavenie distribuovanej streamovacej platformy. V jazyku Kafka lingo, Výrobcovia nepretržite generovať údaje (potoky) a Spotrebitelia sú zodpovední za ich spracovanie, uchovávanie a analýzu. Kafka Sprostredkovatelia sú zodpovední za zabezpečenie toho, aby v distribuovanom scenári mohli údaje prichádzať od výrobcov k spotrebiteľom bez akýchkoľvek rozporov. Sada sprostredkovateľov Kafka a ďalší softvér nazvaný ošetrovateľ v zoo predstavuje typické nasadenie Kafky.
Je potrebné zhromaždiť, rozdeliť a odoslať tok údajov od mnohých výrobcov viacerým spotrebiteľom, je potrebné veľa miešania. Vyvarovanie sa nesúladu nie je ľahká úloha. Preto potrebujeme Kafku.
Scenáre, kde je možné použiť Kafku, sú pomerne rozmanité. Čokoľvek od zariadení IOT až po klaster virtuálnych počítačov až po vaše vlastné lokálne servery typu bare metal. Všade tam, kde veľa vecí vyžaduje vašu pozornosť .. .Nie je to príliš vedecké? Architektúra Kafka je samostatná králikáreň a zaslúži si nezávislé zaobchádzanie. Najprv sa pozrime na veľmi povrchové nasadenie softvéru.
Používanie Docker Compose
Nech už sa rozhodnete použiť Kafku akýmkoľvek nápaditým spôsobom, jedna vec je istá - nebudete ju používať ako jednu inštanciu. Nie je to myslené tak, že by sa to malo používať, a aj keď vaša distribuovaná aplikácia potrebuje zatiaľ iba jednu inštanciu (sprostredkovateľa), nakoniec sa rozrastie a musíte sa ubezpečiť, že Kafka dokáže držať krok.
Docker-compose je dokonalým partnerom pre tento druh škálovateľnosti. Namiesto spustenia sprostredkovateľov Kafka na rôznych virtuálnych počítačoch to kontajnerizujeme a využívame Docker Compose na automatizáciu nasadenia a škálovania. Kontajnery Docker sú vysoko škálovateľné na jednotlivých hostiteľoch Docker aj v rámci klastra, ak používame Docker Swarm alebo Kubernetes. Takže má zmysel využiť to, aby bola Kafka škálovateľná.
Začnime s jednou inštanciou sprostredkovateľa. Vytvorte adresár s názvom apache-kafka a v ňom vytvorte docker-compose.yml.
$ mkdir apache-kafka$ cd apache-kafka
$ vim docker-compose.yml
Nasledujúci obsah bude vložený do vášho docker-compose.yml súbor:
verzia: '3'služby:
ošetrovateľ v zoo:
obrázok: wurstmeister / zookeeper
kafka:
obrázok: wurstmeister / kafka
prístavy:
- „9092: 9092“
prostredie:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper: 2181
Po uložení vyššie uvedeného obsahu do komponovaného súboru z rovnakého adresára spustite:
$ docker-compose up -dDobre, tak čo sme tu robili?
Pochopenie Docker-Compose.yml
Program Compose spustí dve služby uvedené v súbore yml. Pozrime sa na súbor trochu zblízka. Prvý obrázok je zookeeper, ktorý Kafka vyžaduje na sledovanie rôznych sprostredkovateľov, topológie siete a tiež na synchronizáciu ďalších informácií. Pretože služby zookeeper aj kafka budú súčasťou rovnakej mostnej siete (vytvorí sa pri spustení docker-compose up), nemusíme vystavovať žiadne porty. Sprostredkovateľ spoločnosti Kafka môže hovoriť so zookeeperom a to je všetko, čo zo zootechnik potrebuje.
Druhá služba je samotná kafka a my práve prevádzkujeme jej jednu inštanciu, to znamená jedného sprostredkovateľa. V ideálnom prípade by ste chceli využiť viacerých sprostredkovateľov, aby ste využili distribuovanú architektúru Kafky. Služba počúva na porte 9092, ktorý je namapovaný na rovnaké číslo portu na Docker Host, a tak služba komunikuje s vonkajším svetom.
Druhá služba má tiež niekoľko premenných prostredia. Po prvé, je KAFKA_ADVERTISED_HOST_NAME nastavený na localhost. Toto je adresa, na ktorej Kafka beží, a kde ju môžu nájsť výrobcovia a spotrebitelia. Toto by malo byť opäť nastavenie na localhost, ale skôr na adresu IP alebo názov hostiteľa, vďaka čomu sú servery vo vašej sieti dostupné. Druhým je názov hostiteľa a číslo portu vašej služby zookeeper. Pretože sme pomenovali službu zookeeper ... no, zookeeper je to, čo bude názov hostiteľa, v rámci docker bridge siete, ktorú sme spomenuli.
Prebieha tok jednoduchých správ
Aby Kafka začal pracovať, musíme si v rámci neho vytvoriť tému. Produkční klienti potom môžu publikovať prúdy dát (správ) k uvedenej téme a spotrebitelia môžu čítať uvedený dátový tok, ak sú prihlásení na odber konkrétnej témy.
Aby sme to dosiahli, musíme spustiť interaktívny terminál s kontajnerom Kafka. Zoznam kontajnerov na získanie názvu kontajnera kafka. Napríklad v tomto prípade sa náš kontajner volá apache-kafka_kafka_1
$ docker psS menom kontajnera kafka teraz môžeme spadnúť do tohto kontajnera.
$ docker exec -it apache-kafka_kafka_1 bashbash-4.4 #
Otvorte dva rôzne terminály, aby ste mohli jeden používať ako spotrebiteľ a druhý ako producent.
Strana producenta
V jednej z výziev (v tej, ktorú ste vybrali ako producenta) zadajte nasledujúce príkazy:
## Vytvorenie novej témy s názvom testbash-4.4 # kafka-topic.sh --create --zookeeper zookeeper: 2181 --replikačný faktor 1
--skupiny 1 --topický test
## Naštartovanie producenta, ktorý zverejňuje dátový tok od štandardného vstupu po kafku
bash-4.4 # kafka-console-producent.sh --broker-list localhost: 9092 --topický test
>
Výrobca je teraz pripravený prevziať vstup z klávesnice a zverejniť ho.
Strana spotrebiteľa
Prejdite na druhý terminál pripojený k vášmu kontajneru kafka. Nasledujúci príkaz spustí spotrebiteľa, ktorý sa živí testovanou témou:
$ kafka-konzola-spotrebiteľ.sh --bootstrap-server localhost: 9092 --topický testSpäť na výrobcu
Teraz môžete do novej výzvy zadávať správy a vždy, keď kliknete na návrat, sa nový riadok vytlačí v spotrebiteľskej výzve. Napríklad:
> Toto je správa.Táto správa sa prenáša k spotrebiteľovi prostredníctvom služby Kafka a vy ju môžete vidieť vytlačenú na výzvu spotrebiteľa.
Skutočné nastavenia
Teraz máte približný obraz o tom, ako nastavenie Kafka funguje. Pre svoje vlastné použitie musíte nastaviť názov hostiteľa, ktorý nie je localhost, potrebujete viac takýchto sprostredkovateľov, aby boli súčasťou vášho kafka klastra a nakoniec musíte nastaviť klientov pre spotrebiteľov a producentov.
Tu je niekoľko užitočných odkazov:
- Confluent's Python Client
- Úradná dokumentácia
- Užitočný zoznam ukážok
Dúfam, že sa pri objavovaní Apache Kafky zabavíte.