Ko govorimo o porazdeljenih sistemih, kot smo zgoraj, naletimo na problem analitike in spremljanja. Vsako vozlišče ustvari veliko informacij o svojem lastnem zdravju (poraba procesorja, pomnilnik itd.) In o stanju aplikacije, skupaj s tem, kar uporabniki skušajo narediti. Te podrobnosti je treba zabeležiti v:
- Isti vrstni red, v katerem so ustvarjeni,
- Ločeno glede na nujnost (sprotna analitika ali serije podatkov) in kar je najpomembnejše,
- Mehanizem, s katerim se zbirajo, mora biti sam porazdeljen in razširljiv, sicer nam ostane ena sama točka okvare. Nekaj, čemur naj bi se izognila zasnova porazdeljenega sistema.
Zakaj uporabljati Kafko?
Apache Kafka je postavljen kot porazdeljena pretočna platforma. V kafkaškem jeziku, Proizvajalci neprekinjeno generirati podatke (potoki) in Potrošniki so odgovorni za njegovo obdelavo, shranjevanje in analizo. Kafka Posredniki so odgovorni za zagotavljanje, da lahko v porazdeljenem scenariju podatki pridejo od proizvajalcev do potrošnikov brez kakršne koli nedoslednosti. Nabor posrednikov Kafka in še en del programske opreme oskrbnik živalskega vrta predstavljajo tipično uporabo Kafke.
Tok podatkov mnogih proizvajalcev je treba združiti, razdeliti in poslati več potrošnikom, vpletenih je veliko premeščanja. Izogibanje nedoslednosti ni lahka naloga. Zato potrebujemo Kafko.
Scenariji, kjer je mogoče uporabiti Kafko, so precej raznoliki. Vse od naprav IOT do gruče VM-jev do vaših lastnih golo kovinskih strežnikov. Kjer koli, kjer veliko "stvari" hkrati želi vašo pozornost .. .To ni zelo znanstveno, kajne? No, arhitektura Kafke je zajčja luknja zase in si zasluži neodvisno obravnavo. Najprej si oglejmo uvedbo programske opreme na zelo površinskem nivoju.
Uporaba Docker Compose
Na kakršen koli domiseln način se boste odločili za uporabo Kafke, eno je gotovo - ne boste ga uporabljali kot en primerek. Ni namenjen za uporabo na ta način, in četudi vaša distribuirana aplikacija za zdaj potrebuje le en primerek (posrednik), bo sčasoma rasla in morate zagotoviti, da Kafka lahko sledi.
Docker-compose je popoln partner za tovrstno razširljivost. Namesto da bi zagnali posrednike Kafka na različnih VM, ga hranimo in uporabimo Docker Compose za avtomatizacijo uvajanja in spreminjanja velikosti. Zabojniki Docker so zelo razširljivi tako na posameznih gostiteljih Docker kot tudi v celotni gruči, če uporabljamo Docker Swarm ali Kubernetes. Zato ga je smiselno izkoristiti, da bo Kafka prilagodljiv.
Začnimo z enim primerkom posrednika. Ustvarite imenik z imenom apache-kafka in v njem ustvarite svoj docker-compose.yml.
$ mkdir apache-kafka$ cd apache-kafka
$ vim docker-compose.yml
Naslednja vsebina bo vnesena v vaš docker-compose.yml datoteka:
različica: '3'storitve:
oskrbnik živalskega vrta:
slika: wurstmeister / čuvaj živalskega vrta
kafka:
slika: wurstmeister / kafka
vrata:
- "9092: 9092"
okolje:
KAFKA_ADVERTISED_HOST_NAME: lokalni gostitelj
KAFKA_ZOOKEEPER_CONNECT: skrbnik živalskega vrta: 2181
Ko shranite zgornjo vsebino v datoteko za sestavljanje, iz istega imenika zaženite:
$ docker-compose up -dV redu, kaj smo torej počeli tukaj?
Razumevanje Docker-Compose.yml
Sestavljanje bo zagnalo dve storitvi, kot sta navedeni v datoteki yml. Poglejmo si datoteko nekoliko natančneje. Prva slika je skrbnik živalskega vrta, ki ga Kafka potrebuje za spremljanje različnih posrednikov, topologijo omrežja in sinhronizacijo drugih informacij. Ker bosta tako storilca zoo in kafka del istega mostnega omrežja (to se ustvari, ko zaženemo docker-compose up), nam ni treba izpostaviti nobenih vrat. Posrednik Kafka se lahko pogovori z skrbnikom živalskega vrta in to je vse, kar potrebuje skrbnik živalskega vrta.
Druga storitev je kafka sama in izvajamo samo en primerek, to je en posrednik. V idealnem primeru bi radi uporabili več posrednikov, da bi izkoristili porazdeljeno arhitekturo Kafke. Storitev posluša na vrati 9092, ki je preslikana na isto številko vrat na gostitelju Docker in tako storitev komunicira z zunanjim svetom.
Druga storitev ima tudi nekaj spremenljivk okolja. Najprej je KAFKA_ADVERTISED_HOST_NAME nastavljen na localhost. To je naslov, na katerem deluje Kafka in kjer ga lahko najdejo proizvajalci in potrošniki. Še enkrat bi to morali nastaviti na localhost, temveč na naslov IP ali ime gostitelja, s katerim je strežnike mogoče doseči v vašem omrežju. Drugič je ime gostitelja in številka vrat vaše storitve čuvaja živalskega vrta. Ker smo poimenovali storitev zookeeper ... no, zookeeper to bo tisto ime gostitelja, znotraj omrežja docker bridge, ki smo ga omenili.
Zagon preprostega sporočila
Da bi Kafka začel delovati, moramo v njem ustvariti temo. Nato lahko odjemalci proizvajalca objavijo tokove podatkov (sporočil) na omenjeno temo, potrošniki pa lahko preberejo omenjeni podatkovni tok, če so naročeni na to temo.
Za to moramo z vsebnikom Kafka zagnati interaktivni terminal. Navedite vsebnike, da pridobite ime vsebnika kafka. Na primer, v tem primeru se naš vsebnik imenuje apache-kafka_kafka_1
$ docker psZ imenom kafka vsebnika lahko zdaj spustimo v ta vsebnik.
$ docker exec -it apache-kafka_kafka_1 bashbash-4.4 #
Odprite dva tako različna terminala, če želite enega uporabiti kot drugega kot proizvajalca.
Producentska stran
V enega od pozivov (tistega, ki ste ga izbrali za producenta) vnesite naslednje ukaze:
## Ustvariti novo temo z imenom testbash-4.4 # kafka-teme.sh --create --zookeeper čuvaj živalskega vrta: 2181 - faktor replikacije 1
--particije 1 - tematski test
## Za zagon proizvajalca, ki objavlja tok podatkov od standardnega vnosa do kafke
bash-4.4 # kafka-proizvajalec konzole.sh --broker-list localhost: 9092 --top test
>
Producent je zdaj pripravljen sprejeti vnos s tipkovnice in ga objaviti.
Potrošniška stran
Pomaknite se do drugega terminala, priključenega na vaš zabojnik kafka. Naslednji ukaz zažene potrošnika, ki se hrani s testno temo:
$ kafka-konzola-potrošnik.sh --bootstrap-server localhost: 9092 --preizkus temeNazaj na proizvajalca
Zdaj lahko v novi poziv vtipkate sporočila in vsakič, ko pritisnete return, se nova vrstica natisne v poziv za potrošnika. Na primer:
> To je sporočilo.To sporočilo se pošlje potrošniku prek Kafke in ga lahko vidite natisnjenega v pozivu potrošnika.
Nastavitve v resničnem svetu
Zdaj imate približno sliko o tem, kako deluje nastavitev Kafke. Za lastno uporabo morate nastaviti ime gostitelja, ki ni localhost, več takšnih posrednikov potrebujete, da so del vašega grozda kafka, na koncu pa morate nastaviti odjemalce potrošnikov in proizvajalcev.
Tu je nekaj uporabnih povezav:
- Naročnik Python Confluent
- Uradna dokumentacija
- Koristni seznam predstavitev
Upam, da se boste zabavali z raziskovanjem Apacheja Kafke.