Apache Kafka je distribuovaná streamovací platforma. S jeho bohatou sadou API (Application Programming Interface) můžeme ke Kafkovi jako zdroji dat připojit většinou cokoli a na druhé straně můžeme nastavit velké množství spotřebitelů, kteří budou dostávat páru záznamů ke zpracování. Kafka je vysoce škálovatelný a ukládá toky dat spolehlivým a odolným způsobem. Z hlediska konektivity může Kafka sloužit jako most mezi mnoha heterogenními systémy, které se zase mohou spolehnout na své schopnosti přenášet a uchovávat poskytovaná data.
V tomto tutoriálu nainstalujeme Apache Kafka na Red Hat Enterprise Linux 8, vytvoříme systemd
jednotkové soubory pro snadnou správu a otestujte funkčnost pomocí dodaných nástrojů příkazového řádku.
V tomto tutoriálu se naučíte:
- Jak nainstalovat Apache Kafka
- Jak vytvořit systémové služby pro Kafku a Zookeeper
- Jak otestovat Kafku pomocí klientů příkazového řádku
Konzumace zpráv na téma Kafka z příkazového řádku.
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Red Hat Enterprise Linux 8 |
Software | Apache Kafka 2.11 |
Jiné | Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Jak nainstalovat kafka na Redhat 8 krok za krokem
Apache Kafka je napsán v Javě, takže vše, co potřebujeme, je nainstalovat OpenJDK 8, abychom mohli pokračovat v instalaci. Kafka spoléhá na Apache Zookeeper, distribuovanou koordinační službu, která je také napsána v Javě a je dodávána s balíčkem, který si stáhneme. Instalace služeb HA (High Availability) do jednoho uzlu sice ničí jejich účel, ale kvůli Kafkovi nainstalujeme a spustíme Zookeeper.
- Chcete-li stáhnout Kafku z nejbližšího zrcadla, musíme se podívat na oficiální stránku pro stahování. Můžeme zkopírovat URL z
.tar.gz
soubor odtud. Použijemewget
a vloženou URL pro stažení balíčku do cílového počítače:# wget https://www-eu.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz -O /opt/kafka_2.11-2.1.0.tgz
- Zadáme
/opt
adresář a rozbalte archiv:# cd /opt # tar -xvf kafka_2.11-2.1.0.tgz
A vytvořte symbolický odkaz s názvem
/opt/kafka
který ukazuje na nyní vytvořený/opt/kafka_2_11-2.1.0
adresář, který nám usnadní život.ln -s /opt/kafka_2.11-2.1.0 /opt/kafka
- Vytváříme neprivilegovaného uživatele, který bude spouštět oba
zookeeper
akafka
služby.# useradd kafka
- A nastavte nového uživatele jako vlastníka celého adresáře, který jsme extrahovali, rekurzivně:
# chown -R kafka:kafka /opt/kafka*
- Vytváříme soubor jednotky
/etc/systemd/system/zookeeper.service
s následujícím obsahem:[Unit] Description=zookeeper After=syslog.target network.target [Service] Type=simple User=kafka Group=kafka ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh [Install] WantedBy=multi-user.target
Všimněte si, že kvůli symbolickému odkazu, který jsme vytvořili, nemusíme psát číslo verze třikrát. Totéž platí pro další soubor jednotky pro Kafku,
/etc/systemd/system/kafka.service
, který obsahuje následující řádky konfigurace:[Unit] Description=Apache Kafka Requires=zookeeper.service After=zookeeper.service [Service] Type=simple User=kafka Group=kafka ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties ExecStop=/opt/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target
- Musíme znovu načíst
systemd
aby si přečetl nové soubory jednotek:# systemctl daemon-reload
- Nyní můžeme spustit naše nové služby (v tomto pořadí):
# systemctl start zookeeper # systemctl start kafka
Pokud vše půjde dobře,
systemd
by měl hlásit provozní stav o stavu obou služeb, podobně jako níže uvedené výstupy:# systemctl status zookeeper.service zookeeper.service - zookeeper Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-01-10 20:44:37 CET; 6s ago Main PID: 11628 (java) Tasks: 23 (limit: 12544) Memory: 57.0M CGroup: /system.slice/zookeeper.service 11628 java -Xmx512M -Xms512M -server [...] # systemctl status kafka.service kafka.service - Apache Kafka Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-01-10 20:45:11 CET; 11s ago Main PID: 11949 (java) Tasks: 64 (limit: 12544) Memory: 322.2M CGroup: /system.slice/kafka.service 11949 java -Xmx1G -Xms1G -server [...]
- Volitelně můžeme povolit automatické spouštění při spouštění pro obě služby:
# systemctl enable zookeeper.service # systemctl enable kafka.service
- Abychom otestovali funkčnost, připojíme se ke Kafkovi s jedním produkčním a jedním spotřebitelským klientem. Zprávy poskytnuté výrobcem by se měly objevit na konzole spotřebitele. Ale předtím potřebujeme médium, na kterém si tyto dvě zprávy vyměňují. Vytváříme nový kanál dat s názvem
topic
v podmínkách Kafky, kde bude poskytovatel zveřejňovat a kde se spotřebitel přihlásí k odběru. Téma nazvemeFirstKafkaTopic
. Použijemekafka
uživatel k vytvoření tématu:$ /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic FirstKafkaTopic
- Spustíme spotřebitelského klienta z příkazového řádku, který se přihlásí k odběru (v tomto okamžiku prázdného) tématu vytvořeného v předchozím kroku:
$ /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning
Konzolu a v ní spuštěného klienta necháme otevřenou. Tato konzole je místo, kde obdržíme zprávu, kterou zveřejníme s produkčním klientem.
- Na jiném terminálu spustíme produkčního klienta a publikujeme nějaké zprávy k tématu, které jsme vytvořili. Můžeme se zeptat Kafky na dostupná témata:
$ /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181 FirstKafkaTopic
A připojte se k tomu, ke kterému je spotřebitel přihlášen, a poté odešlete zprávu:
$ /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic FirstKafkaTopic > new message published by producer from console #2
Na spotřebitelském terminálu by se měla zakrátko objevit zpráva:
$ /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning new message published by producer from console #2
Pokud se zpráva objeví, náš test je úspěšný a naše instalace Kafka funguje podle očekávání. Mnoho klientů by mohlo poskytovat a využívat jeden nebo více záznamů tématu stejným způsobem, dokonce i s nastavením jednoho uzlu, které jsme vytvořili v tomto tutoriálu.