Im letzten Artikel habe ich gezeigt wie man Kafka mit Zookeeper auf einem Raspberry Pi installiert. Will man Kafak nicht nur zum Testen verwenden ist es sinnvoll, sowohl Kafka wie Zookeeper über systemctl verfügbar zu machen. Dafür werden wir für beide Anwendungen einen eigenen User auf dem Raspberry Pi (Affiliate Link) anlegen und anschließend ein Startskript für Systemctl erstellen.
Inhaltsverzeichnis
Anlegen des Kafka und Zookeeper Users
Kafka und Zookeeper sollen jeweils unter einem eigenen User gestartet werden. Diese beiden User müssen mit dem Befehl adduser angelegt werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | adduser kafka Adding user `kafka' ... Adding new group `kafka' (1001) ... Adding new user `kafka' (1001) with group `kafka' ... Creating home directory `/home/kafka' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for kafka Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y adduser zookeeper Adding user `zookeeper' ... Adding new group `zookeeper' (1002) ... Adding new user `zookeeper' (1002) with group `zookeeper' ... Creating home directory `/home/zookeeper' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for zookeeper Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y |
Anschließend müssen den Anwendungsordnern die neuen User als Besitzter hinterlegt werden. Dies kann man mit den folgenden beiden Befehlen realisieren:
1 2 | chown kafka:kafka -R /usr/local/kafka/ chown zookeeper:zookeeper -R /usr/local/zookeeper |
Damit sind die Vorbereitungen für die Startscripte abgeschlossen
Erstellen des Zookeper systemctl Startskriptes
Für das Zookeeper Startskript legt man als erstes eine Datei unter /etc/systemd/system/ mit dem Namen zookeeper.service an. Diese Datei wird dann mit dem folgenden Inhalt befüllt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [Unit] Description=ZooKeeper Service Documentation=http://zookeeper.apache.org Requires=network.target After=network.target [Service] Type=forking User=zookeeper Group=zookeeper ExecStart=/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop /usr/local/zookeeper/conf/zoo.cfg ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart /usr/local/zookeeper/conf/zoo.cfg WorkingDirectory=/usr/local/zookeeper [Install] WantedBy=default.target |
Nach dem anlegen einer systemctl Datei müssen wir einen daemon-reload machen, damit die Datei unter systemctl zur Verfügung steht. Dieser sieht wie folgt aus:
1 | systemctl daemon-reload |
Nun kann man Zookeeper über systemctl starten und anschließend prüfen, ob Zookeeper ohne Fehler gestatet ist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | systemctl start zookeeper systemctl status zookeeper ● zookeeper.service - ZooKeeper Service Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled) Active: active (running) since Sat 2018-09-15 10:03:01 UTC; 6s ago Docs: http://zookeeper.apache.org Process: 5018 ExecStart=/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS) Main PID: 5027 (java) CGroup: /system.slice/zookeeper.service └─5027 java -Dzookeeper.log.dir=/usr/local/zookeeper/logs -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/.... Sep 15 10:03:00 devpi zkServer.sh[5018]: ZooKeeper JMX enabled by default Sep 15 10:03:00 devpi zkServer.sh[5018]: Using config: /usr/local/zookeeper/conf/zoo.cfg Sep 15 10:03:01 devpi zkServer.sh[5018]: Starting zookeeper ... STARTED Sep 15 10:03:01 devpi systemd[1]: Started ZooKeeper Service. |
Erstellen des Kafka systemctl Startskriptes
Für das Kafka Startskript legt man als erstes eine Datei unter /etc/systemd/system/ mit dem Namen kafka.service an. Diese wird dann mit folgendem Inhalt befüllt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [Unit] Description=Apache Kafka server (broker) Documentation=http://kafka.apache.org/documentation.html Requires=network.target remote-fs.target After=network.target remote-fs.target zookeeper.service [Service] Type=simple User=kafka Group=kafka Environment=JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target |
Auch hier muss man nach dem anlegen der systemctl Datei einen daemon-reload machen.
1 | systemctl daemon-reload |
Anschließend kann Kafka gestartet werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | systemctl start kafka systemctl status kafka ● kafka.service - Apache Kafka server (broker) Loaded: loaded (/etc/systemd/system/kafka.service; disabled) Active: active (running) since Sat 2018-09-15 10:09:29 UTC; 14s ago Docs: http://kafka.apache.org/documentation.html Main PID: 5049 (java) CGroup: /system.slice/kafka.service └─5049 /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/bin/java -Xmx256M -Xms128M -client -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScave... Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,535] INFO [GroupMetadataManager brokerId=0] Removed 0 expired offsets in 34 milliseconds. (kafka...taManager) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,580] INFO [ProducerId Manager 0]: Acquired new producerId block (brokerId:0,blockStartProducerId...IdManager) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,682] INFO [TransactionCoordinator id=0] Starting up. (kafka.coordinator.transaction.TransactionCoordinator) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,688] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.coordinator.transaction.Transa...elManager) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,690] INFO [TransactionCoordinator id=0] Startup complete. (kafka.coordinator.transaction.Transac...ordinator) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,890] INFO [/config/changes-event-process-thread]: Starting (kafka.common.ZkNodeChangeNotificatio...essThread) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,931] INFO [SocketServer brokerId=0] Started processors for 1 acceptors (kafka.network.SocketServer) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,946] INFO Kafka version : 2.0.0 (org.apache.kafka.common.utils.AppInfoParser) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,947] INFO Kafka commitId : 3402a8361b734732 (org.apache.kafka.common.utils.AppInfoParser) Sep 15 10:09:40 devpi kafka-server-start.sh[5049]: [2018-09-15 10:09:40,953] INFO [KafkaServer id=0] started (kafka.server.KafkaServer) Hint: Some lines were ellipsized, use -l to show in full. |
Schreibe einen Kommentar