Když mluvíme o distribuovaných systémech, jak je uvedeno výše, narazíme na problém analytiky a monitorování. Každý uzel generuje spoustu informací o svém zdraví (využití CPU, paměti atd.) A o stavu aplikace spolu s tím, co se uživatelé snaží dělat. Tyto údaje musí být zaznamenány v:
- Ve stejném pořadí, v jakém jsou vytvořeny,
- Odděleny z hlediska naléhavosti (analýza v reálném čase nebo dávky dat), a co je nejdůležitější,
- Mechanismus, s nímž jsou shromažďovány, musí být sám distribuovaný a škálovatelný, jinak nám zbývá jediný bod selhání. Něco, čemu se měl design distribuovaného systému vyhnout.
Proč používat Kafku?
Apache Kafka je považován za platformu distribuovaného streamování. V Kafkově žargonu, Producenti průběžně generovat data (proudy) a Spotřebitelé jsou odpovědní za jeho zpracování, ukládání a analýzu. Kafka Zprostředkovatelé zodpovídají za zajištění toho, že v distribuovaném scénáři mohou data dosáhnout od producentů ke spotřebitelům bez jakýchkoli nesrovnalostí. Sada makléřů Kafka a další software nazvaný zookeeper představují typické nasazení Kafky.
Tok dat od mnoha výrobců je třeba agregovat, rozdělit a odeslat více spotřebitelům, je zde spousta míchání. Vyhnout se nekonzistenci není snadný úkol. Proto potřebujeme Kafku.
Scénáře, kde lze použít Kafku, jsou velmi rozmanité. Cokoli od zařízení IOT až po klastr virtuálních počítačů až po vaše vlastní místní bare metal servery. Kdekoli, kde mnoho „věcí“ současně vyžaduje vaši pozornost .. .To není příliš vědecké, že? Architektura Kafka je vlastní králičí nora a zaslouží si nezávislé zacházení. Nejprve se podívejme na velmi povrchové nasazení softwaru.
Používání Docker Compose
Ať už se rozhodnete použít Kafku jakýmkoli nápaditým způsobem, jedna věc je jistá - nebudete ji používat jako jednu instanci. Tímto způsobem to není zamýšleno, ai když vaše distribuovaná aplikace prozatím potřebuje pouze jednu instanci (zprostředkovatele), nakonec poroste a musíte zajistit, aby Kafka mohla.
Docker-compose je dokonalým partnerem pro tento druh škálovatelnosti. Místo toho, abychom provozovali makléře Kafka na různých virtuálních počítačích, jsme to kontejnerizovali a využíváme Docker Compose k automatizaci nasazení a škálování. Kontejnery Docker jsou vysoce škálovatelné jak na jednotlivých hostitelích Dockeru, tak i napříč clusterem, pokud používáme Docker Swarm nebo Kubernetes. Má tedy smysl ho využít, aby byla Kafka škálovatelná.
Začněme s jednou instancí zprostředkovatele. Vytvořte adresář s názvem apache-kafka a uvnitř vytvořte docker-compose.yml.
$ mkdir apache-kafka$ cd apache-kafka
$ vim docker-compose.yml
Následující obsah bude vložen do vašeho docker-compose.yml soubor:
verze: '3'služby:
zookeeper:
obrázek: wurstmeister / zookeeper
kafka:
obrázek: wurstmeister / kafka
porty:
- „9092: 9092“
životní prostředí:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper: 2181
Jakmile uložíte výše uvedený obsah do souboru pro psaní, spusťte ze stejného adresáře:
$ docker-compose up -dDobře, tak co jsme tady udělali?
Porozumění Docker-Compose.yml
Compose spustí dvě služby uvedené v souboru yml. Podívejme se na soubor trochu zblízka. První obrázek je zookeeper, který Kafka vyžaduje ke sledování různých brokerů, topologie sítě a synchronizaci dalších informací. Vzhledem k tomu, že služby zookeeper i kafka budou součástí stejné mostní sítě (to se vytvoří, když spustíme docker-compose up), nemusíme vystavovat žádné porty. Zprostředkovatel Kafka může mluvit se zookeeperem a to je vše, co komunikační zookeeper potřebuje.
Druhá služba je sama kafka a my právě provozujeme její jedinou instanci, to znamená jednoho brokera. V ideálním případě byste chtěli použít více makléřů, abyste využili distribuovanou architekturu Kafky. Služba naslouchá na portu 9092, který je mapován na stejné číslo portu na hostiteli Docker, a tak služba komunikuje s vnějším světem.
Druhá služba má také několik proměnných prostředí. Nejprve je KAFKA_ADVERTISED_HOST_NAME nastaven na localhost. Toto je adresa, na které Kafka běží, a kde ji mohou najít výrobci a spotřebitelé. Znovu by to mělo být nastaveno na localhost, ale spíše na IP adresu nebo název hostitele s tím, na které lze servery dosáhnout ve vaší síti. Druhým je název hostitele a číslo portu vaší služby zookeeper. Vzhledem k tomu, že jsme pojmenovali službu zookeeper ... no, zookeeper je to, co bude název hostitele, v rámci Docker Bridge Network, kterou jsme zmínili.
Spuštění toku jednoduchých zpráv
Aby mohla Kafka začít pracovat, musíme v ní vytvořit téma. Producentští klienti pak mohou publikovat datové proudy (zprávy) k uvedenému tématu a spotřebitelé mohou číst uvedený datový tok, pokud jsou přihlášeni k odběru konkrétního tématu.
K tomu musíme spustit interaktivní terminál s kontejnerem Kafka. Seznam kontejnerů a načtěte název kontejneru kafka. Například v tomto případě se náš kontejner jmenuje apache-kafka_kafka_1
$ docker psDíky názvu kontejneru kafka nyní můžeme spadnout dovnitř tohoto kontejneru.
$ docker exec -it apache-kafka_kafka_1 bashbash-4.4 #
Otevřete dva různé terminály, abyste mohli jeden používat jako spotřebitel a druhý jako producent.
Strana výrobce
V jedné z výzev (v té, kterou jste zvolili jako producenta) zadejte následující příkazy:
## Chcete-li vytvořit nové téma s názvem testbash-4.4 # kafka-topic.sh --create --zookeeper zookeeper: 2181 --replikační faktor 1
--oddíly 1 - topický test
## Chcete-li spustit producenta, který publikuje datový tok od standardního vstupu po kafku
bash-4.4 # výrobce kafka-console.sh --broker-list localhost: 9092 --topický test
>
Výrobce je nyní připraven převzít vstup z klávesnice a publikovat jej.
Spotřebitelská stránka
Přejděte na druhý terminál připojený k vašemu kontejneru kafka. Následující příkaz spustí spotřebitele, který se živí testovacím tématem:
$ kafka-konzole-spotřebitel.sh --bootstrap-server localhost: 9092 --topický testZpět na producenta
Nyní můžete do nové výzvy psát zprávy a pokaždé, když se vrátíte, nový řádek se vytiskne ve spotřebitelské výzvě. Například:
> Toto je zpráva.Tato zpráva se přenáší na spotřebitele prostřednictvím služby Kafka a můžete ji vidět vytištěnou na výzvu spotřebitele.
Skutečná nastavení
Nyní máte hrubý obrázek o tom, jak nastavení Kafky funguje. Pro vlastní případ použití musíte nastavit název hostitele, který není localhost, potřebujete více takových makléřů, aby byli součástí vašeho kafka clusteru a nakonec musíte nastavit klienty spotřebitelů a producentů.
Zde je několik užitečných odkazů:
- Confluent's Python Client
- Úřední dokumentace
- Užitečný seznam ukázek
Doufám, že se při zkoumání Apache Kafky bavíte.