Apache Kafka mit CMAK auf CentOS installieren
Apache Kafka ist eine freie und quelloffene Streaming-Plattform, die für Streaming-Analysen, Datenintegration und unternehmenskritische Anwendungen verwendet wird. Im Vergleich zu ActiveMQ und RabbitMQ hat Kafka einen besseren Durchsatz, integrierte Partitionierung, Replikation und Fehlertoleranz. Kafka ist ein verteilter Nachrichtenagent, der große Mengen an Echtzeitinformationen effektiv verarbeiten kann.
CMAK, auch bekannt als „Cluster Manager“, wird zur Verwaltung des von Yahoo entwickelten Kafka-Clusters verwendet. Mit CMAK kannst du mehrere Cluster verwalten und den Cluster-Status einsehen, einschließlich Topics, Consumers, Offsets, Brokern, Replika-Verteilung, Partitions-Verteilung und vieles mehr.
In diesem Lernprogramm zeigen wir dir, wie du die Apache Kafka Streaming Plattform mit CMAK auf einem CentOS 8 Server installierst.
Voraussetzungen
- Ein Server, auf dem CentOS 8 läuft.
- Der Server ist mit einem Root-Passwort konfiguriert.
Erste Schritte
Zunächst wird empfohlen, die Systempakete auf die neueste Version zu aktualisieren. Du kannst alle mit dem folgenden Befehl aktualisieren:
dnf update -y
Sobald alle Pakete aktualisiert sind, installierst du die anderen erforderlichen Abhängigkeiten mit dem folgenden Befehl:
dnf install git unzip -y
Sobald du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Java installieren
Kafka basiert auf Java, daher muss Java auf deinem Server installiert sein. Wenn es nicht installiert ist, kannst du es mit dem folgenden Befehl installieren:
dnf install java-11-openjdk-devel -y
Sobald Java installiert ist, kannst du die installierte Version von Java mit dem folgenden Befehl überprüfen:
java --version
Du solltest die folgende Ausgabe erhalten:
openjdk 11.0.8 2020-07-14 OpenJDK Runtime Environment (build 11.0.8+10-post-CentOS-0centos8) OpenJDK 64-Bit Server VM (build 11.0.8+10-post-CentOS-0centos8, mixed mode, sharing)
Wenn du fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Kafka herunterladen
Bevor du Kafka herunterlädst, musst du ein Verzeichnis erstellen, in dem Kafka gespeichert wird. Du kannst es mit dem folgenden Befehl erstellen:
mkdir /usr/local/kafka-server
Als Nächstes änderst du das Verzeichnis in kafka-server und lädst die neueste Version von Kafka mit folgendem Befehl herunter:
cd /usr/local/kafka-server wget https://downloads.apache.org/kafka/2.6.0/kafka_2.13-2.6.0.tgz
Sobald der Download abgeschlossen ist, entpackst du die heruntergeladene Datei mit dem folgenden Befehl:
tar -xvzf kafka_2.13-2.6.0.tgz --strip 1
Sobald du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Erstelle eine Systemd-Datei für Kafka und Zookeeper
Als Nächstes musst du eine systemd-Dienstdatei erstellen, um den Zookeeper- und Kafka-Dienst zu verwalten.
Erstelle zunächst eine Zookeeper-Dienstdatei mit dem folgenden Befehl:
nano /etc/systemd/system/zookeeper.service
Füge die folgenden Zeilen hinzu:
[Unit] Description=Apache Zookeeper Server Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple ExecStart=/usr/local/kafka-server/bin/zookeeper-server-start.sh /usr/local/kafka-server/config/zookeeper.properties ExecStop=/usr/local/kafka-server/bin/zookeeper-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes erstellst du mit dem folgenden Befehl eine Kafka-Dienstdatei:
nano /etc/systemd/system/kafka.service
Füge die folgenden Zeilen hinzu:
[Unit] Description=Apache Kafka Server Documentation=http://kafka.apache.org/documentation.html Requires=zookeeper.service After=zookeeper.service [Service] Type=simple Environment="JAVA_HOME=/usr/lib/jvm/jre-11-openjdk" ExecStart=/usr/local/kafka-server/bin/kafka-server-start.sh /usr/local/kafka-server/config/server.properties ExecStop=/usr/local/kafka-server/bin/kafka-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
Speichere und schließe die Datei und lade den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reload
Starte beide Dienste und aktiviere sie mit folgendem Befehl, damit sie beim Booten starten:
systemctl enable --now zookeeper systemctl enable --now kafka systemctl start zookeeper systemctl start kafka
Überprüfe den Status der beiden Dienste mit folgendem Befehl:
systemctl status zookeeper kafka
Du solltest die folgende Ausgabe sehen:
? zookeeper.service - Apache Zookeeper Server Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-08-29 08:48:42 EDT; 30s ago Main PID: 26722 (java) Tasks: 31 (limit: 12523) Memory: 68.8M CGroup: /system.slice/zookeeper.service ??26722 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCIn> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,326] INFO maxSessionTimeout set to 60000 (org.apache.zookeeper.> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,327] INFO Created server with tickTime 3000 minSessionTimeout 6> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,344] INFO Using org.apache.zookeeper.server.NIOServerCnxnFactor> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,348] INFO Configuring NIO connection handler with 10s sessionle> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,355] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zook> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,391] INFO zookeeper.snapshotSizeFactor = 0.33 (org.apache.zooke> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,397] INFO Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapsho> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,401] INFO Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapsho> Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,431] INFO Using checkIntervalMs=60000 maxPerMinute=10000 (org.a> Aug 29 08:48:53 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:53,030] INFO Creating new log file: log.1 (org.apache.zookeeper.se> ? kafka.service - Apache Kafka Server Loaded: loaded (/etc/systemd/system/kafka.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-08-29 08:48:50 EDT; 22s ago Docs: http://kafka.apache.org/documentation.html Main PID: 27100 (java) Tasks: 66 (limit: 12523) Memory: 306.4M CGroup: /system.slice/kafka.service ??27100 /usr/lib/jvm/jre-11-openjdk/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancy> Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,733] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.c> Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,747] INFO [ExpirationReaper-0-AlterAcls]: Starting (kafka.server.De> Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,846] INFO [/config/changes-event-process-thread]: Starting (kafka.c> Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,877] INFO [SocketServer brokerId=0] Starting socket server acceptor> Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,236] INFO [SocketServer brokerId=0] Started data-plane acceptor and> Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,237] INFO [SocketServer brokerId=0] Started socket server acceptors> Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,246] INFO Kafka version: 2.6.0 (org.apache.kafka.common.utils.AppIn> Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,246] INFO Kafka commitId: 62abe01bee039651 (org.apache.kafka.common>
CMAK installieren und konfigurieren
Als Nächstes musst du CMAK für die Verwaltung des Apache Kafka-Clusters installieren. Du kannst es mit folgendem Befehl aus dem Git-Repository herunterladen:
cd /root git clone https://github.com/yahoo/CMAK.git
Nach dem Download musst du die Datei application.conf bearbeiten und die Zookeeper-Hosts definieren.
nano ~/CMAK/conf/application.conf
Ändere die folgenden Zeilen:
cmak.zkhosts="localhost:2181"
Speichere und schließe die Datei, wenn du fertig bist. Erstelle dann eine Zip-Datei, um die Anwendung zu verteilen.
cd ~/CMAK/ ./sbt clean dist
Du solltest die folgende Ausgabe sehen:
model contains 640 documentable templates [info] Main Scala API documentation successful. [info] LESS compiling on 1 source(s) [success] All package validations passed [info] Your package is ready in /root/CMAK/target/universal/cmak-3.0.0.5.zip [success] Total time: 150 s (02:30), completed 29-Aug-2020, 8:55:40 AM
Als Nächstes entpackst du die Zip-Datei, die du im vorherigen Schritt erstellt hast, mit dem folgenden Befehl:
cd ~/CMAK/target/universal unzip cmak-3.0.0.5.zip
Sobald du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.
CMAK-Dienste starten
Wechsle nun in das Verzeichnis ~/CMAK/target/universal/cmak-3.0.0.5 und starte den CMAK-Dienst mit dem folgenden Befehl:
cd ~/CMAK/target/universal/cmak-3.0.0.5 bin/cmak
Jetzt ist CMAK gestartet und lauscht auf Port 9000.
SELinux und Firewall konfigurieren
Standardmäßig ist SELinux in CentOS 8 aktiviert. Du musst also SELinux für CMAK konfigurieren. Du kannst es mit dem folgenden Befehl konfigurieren:
chcon -t httpd_sys_rw_content_t ~/CMAK/target/universal/cmak-3.0.0.5 -R setsebool -P httpd_can_network_connect 1
Als Nächstes musst du Port 9000 über Firewalld zulassen. Das kannst du mit dem folgenden Befehl tun:
firewall-cmd --permanent --zone public --add-port 9000/tcp firewall-cmd --reload
Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Zugriff auf die CMAK Web UI
Öffne nun deinen Webbrowser und rufe den CMAK über die URL http://your-server-ip:9000 auf. Du solltest die folgende Seite sehen:
Auf dem obigen Bildschirm solltest du sehen, dass kein Cluster verfügbar ist. Deshalb musst du zuerst einen neuen Cluster erstellen.
Klicke auf Cluster => CLuster hinzufügen. Du solltest den folgenden Bildschirm sehen:
Gib den Clusternamen, den Zookeeper-Host und andere erforderliche Informationen ein und klicke auf die Schaltfläche Speichern. Du solltest den folgenden Bildschirm sehen:
Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Füge dein erstes Thema auf Kafka hinzu
Als Nächstes musst du ein Topic auf Kafka erstellen, um die Funktionalität zu testen. Dazu öffnest du ein anderes Terminal, änderst die directoru in kafka-server und erstellst ein neues Topic, indem du einen Topic-Namen und einen Replikationsfaktor angibst, indem du den folgenden Befehl ausführst:
cd /usr/local/kafka-server bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic MyNewTopic
Gehe nun zum CMAK-Dashboard und klicke auf das Thema. Du solltest das Thema, das du zuvor erstellt hast, auf dem folgenden Bildschirm sehen:
Klicke auf die Themennummer. Du solltest dein neu erstelltes Thema auf dem folgenden Bildschirm sehen:
Klicke jetzt auf den Namen deines Themas. Auf dem folgenden Bildschirm werden alle Informationen zu deinem Thema angezeigt:
Fazit
Glückwunsch! Du hast Apache Kafka mit CMAK erfolgreich auf dem CentOS 8 Server installiert. Du kannst jetzt damit beginnen, CMAK für weitere Funktionen zu erforschen. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.