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:

CMAK Clusters

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:

Cluster hinzufügen

Cluster-Einstellungen

Gib den Clusternamen, den Zookeeper-Host und andere erforderliche Informationen ein und klicke auf die Schaltfläche Speichern. Du solltest den folgenden Bildschirm sehen:

Erfolgreich einen Cluster hinzugefügt

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:

Apache Kafka Thema hinzufügen

Klicke auf die Themennummer. Du solltest dein neu erstelltes Thema auf dem folgenden Bildschirm sehen:

Operationen und Themen

Klicke jetzt auf den Namen deines Themas. Auf dem folgenden Bildschirm werden alle Informationen zu deinem Thema angezeigt:

Kafka Thema

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.

Das könnte dich auch interessieren …