Amikor a fentiekhez hasonló elosztott rendszerekről beszélünk, az elemzés és a monitorozás problémájába ütközünk. Minden csomópont rengeteg információt generál saját állapotáról (CPU-használat, memória stb.) És az alkalmazás állapotáról, valamint arról, hogy a felhasználók mit próbálnak megtenni. Ezeket a részleteket a következő helyen kell rögzíteni:
- Ugyanabban a sorrendben, amelyben létrejönnek,
- Külön a sürgősség szempontjából (valós idejű elemzés vagy adatcsomagok), és ami a legfontosabb,
- A begyűjtés mechanizmusának önmagában elosztottnak és skálázhatónak kell lennie, különben egyetlen hibapont marad. Valamit el kellett kerülni az elosztott rendszer tervezésétől.
Miért használja a Kafkát??
Az Apache Kafka elosztott streaming platformként szerepel. Kafka nyelven, Producerek folyamatosan adatokat generál (patakok) és Fogyasztók felelősek annak feldolgozásáért, tárolásáért és elemzéséért. Kafka Brókerek felelősek annak biztosításáért, hogy egy elosztott forgatókönyv esetén az adatok minden következetlenség nélkül eljuthassanak a gyártóktól a fogyasztókig. Egy sor Kafka bróker és egy másik szoftver állatgondozó tipikus Kafka-bevetést jelentenek.
A sok gyártó adatfolyamát összesíteni kell, fel kell osztani és több fogyasztónak kell elküldeni, sok a keverés. A következetlenség elkerülése nem könnyű feladat. Ezért van szükségünk Kafkára.
A forgatókönyvek, ahol a Kafka használható, meglehetősen változatos. Bármi, az IOT-eszközöktől kezdve a virtuális gépek klaszterén át a saját helyszíni, csupasz fém szerverekig. Bárhol, ahol egyszerre sok „dolog” szeretné felhívni a figyelmet .. .Ez nem túl tudományos? Nos, a Kafka építészet egy saját nyúllyuk, és önálló kezelést érdemel. Először nézzük meg a szoftver nagyon felszíni telepítését.
A Docker Compose használata
Bármilyen fantáziadús módon dönt a Kafka használata mellett, egy biztos: nem fogja egyetlen példányként használni. Nem ezt a célt szolgálják, és még akkor is, ha az elosztott alkalmazásnak egyelőre csak egy példányra (brókerre) van szüksége, végül növekedni fog, és meg kell győződnie arról, hogy a Kafka képes lépést tartani.
A Docker-compose tökéletes partner az ilyen méretezhetőséghez. Ahelyett, hogy különböző virtuális gépeken futtatnánk a Kafka brókereket, konténerezzük, és a Docker Compose-t felhasználjuk a telepítés és a méretezés automatizálásához. A Docker konténerek nagyon skálázhatók mind az egyes Docker gazdagépeken, mind a fürtön, ha Docker Swarmot vagy Kubernetes-t használunk. Tehát van értelme kihasználni, hogy a Kafka méretezhető legyen.
Kezdjük egyetlen bróker példánnyal. Hozzon létre egy Apache-kafka nevű könyvtárat, és benne hozza létre a dokkoló-írást.yml.
$ mkdir apache-kafka$ cd apache-kafka
$ vim dokkoló-ír.yml
A következő tartalmak kerülnek a dokkoló-íróba.yml fájl:
verzió: '3'szolgáltatások:
állatgondozó:
kép: wurstmeister / zookeeper
kafka:
kép: wurstmeister / kafka
portok:
- "9092: 9092"
környezet:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: állattartó: 2181
Miután elmentette a fenti tartalmat az írási fájlba, ugyanabból a könyvtárból futtassa:
$ docker-compose up -dOké, akkor mit csináltunk itt?
A Docker-Compose megértése.yml
A Compose két szolgáltatást indít, az yml fájlban felsoroltak szerint. Nézzük meg egy kicsit alaposan a fájlt. Az első kép az állattartó, amelyet a Kafka megkövetel a különféle brókerek, a hálózati topológia, valamint az egyéb információk szinkronizálásához. Mivel a zookeeper és a kafka szolgáltatások is ugyanazon hídhálózat részei lesznek (ez akkor jön létre, amikor a docker-compose-t futtatjuk), nem kell feltennünk egyetlen portot sem. A Kafka bróker tud beszélni az állattartóval, és csak erre van szüksége a zookeepernek.
A második szolgáltatás maga a kafka, és mi csak egyetlen példányt futtatunk, vagyis egy brókert. Ideális esetben több brókert szeretne használni a Kafka elosztott architektúrájának kihasználása érdekében. A szolgáltatás meghallgatja a 9092-es portot, amely a Docker Host ugyanazon portszámára van leképezve, és így kommunikál a szolgáltatás a külvilággal.
A második szolgáltatásnak van néhány környezeti változója is. Először: a KAFKA_ADVERTISED_HOST_NAME beállítása localhost. Ez az a cím, ahol a Kafka fut, és ahol a gyártók és a fogyasztók megtalálhatják. Ismét ennek a localhost-nak kell lennie, inkább IP-címre vagy hosztnévre kell állítani ezzel a szerverek elérhetők a hálózaton. A második az állattartó szolgáltatás hosztneve és portszáma. Mivel elneveztük a zookeeper szolgáltatást ... Nos, a zookeeper az, ami a hosztnév lesz, az említett docker bridge hálózatban.
Egyszerű üzenetfolyam lefuttatása
Ahhoz, hogy Kafka dolgozni kezdjen, létre kell hoznunk benne egy témát. A termelő ügyfelek ezután közzétehetik az adatfolyamokat (üzeneteket) az említett témában, a fogyasztók pedig elolvashatják az említett adatfolyamot, ha feliratkoztak az adott témára.
Ehhez el kell indítanunk egy interaktív terminált a Kafka konténerrel. Sorolja fel a konténereket a kafka konténer nevének lekéréséhez. Például ebben az esetben a tárolónk neve apache-kafka_kafka_1
$ dokkoló psA kafka konténer nevével most bele tudunk esni ebbe a konténerbe.
$ docker exec -it apache-kafka_kafka_1 bashbash-4.4 #
Nyisson meg két ilyen különböző terminált, hogy az egyiket fogyasztóként és másik gyártóként használja.
Gyártói oldal
Írja be a következő parancsokat az egyik kérésbe (amelyet producerként választ):
## Új teszt nevű témakör létrehozásabash-4.4 # kafka-topic.sh --create --zookeeper zookeeper: 2181 - replikációs tényező 1
--partíciók 1 - témakör teszt
## Olyan gyártó indítása, amely adatfolyamot közöl a standard bemenettől a kafkáig
bash-4.4 # kafka-konzol-producer.sh - broker-list localhost: 9092 --téma teszt
>
A producer készen áll arra, hogy bevegye a billentyűzetet és közzétegye.
Fogyasztói oldal
Lépjen a kafka-tárolóhoz csatlakoztatott második terminálra. A következő parancs elindítja a fogyasztót, amely a teszt témájáról táplálkozik:
$ kafka-konzol-fogyasztó.sh --bootstrap-server localhost: 9092 --téma tesztVissza a Producerhez
Mostantól beírhatja az üzeneteket az új promptba, és bármikor visszatérhet, az új sor pedig kinyomtatásra kerül a fogyasztói üzenetben. Például:
> Ez egy üzenet.Ezt az üzenetet a Kafka-n keresztül továbbítja a fogyasztóhoz, és a fogyasztói üzenetben kinyomtathatja.
Valós világ beállításai
Most durván képet kaphat arról, hogyan működik a Kafka telepítése. Saját használatra be kell állítania egy hostnevet, amely nem localhost, több ilyen közvetítőre van szüksége, hogy részt vegyen a kafka-fürtben, végül pedig fel kell állítania fogyasztói és termelői ügyfeleket.
Íme néhány hasznos link:
- Confluent Python kliense
- Hivatalos dokumentáció
- A demók hasznos listája
Remélem, jól érzi magát Apache Kafka felfedezésében.