Cómo instalar Apache Kafka con CMAK en CentOS
Apache Kafka es una plataforma de streaming gratuita y de código abierto que se utiliza para análisis de streaming, integración de datos y aplicaciones de misión crítica. En comparación con ActiveMQ y RabbitMQ, Kafka tiene mejor rendimiento, partición integrada, replicación y tolerancia a fallos. Kafka es un agente de mensajes distribuidos que puede gestionar con eficacia enormes volúmenes de información en tiempo real.
CMAK, también conocido como «Cluster Manager», se utiliza para gestionar el clúster de Kafka desarrollado por Yahoo. Con CMAK, puedes gestionar varios clústeres e inspeccionar el estado del clúster, incluyendo temas, consumidores, compensaciones, intermediarios, distribución de réplicas, distribución de particiones y mucho más.
En este tutorial, mostraremos cómo instalar la plataforma de streaming Apache Kafka con CMAK en un servidor CentOS 8.
Requisitos previos
- Un servidor que ejecute CentOS 8.
- Una contraseña de root está configurado el servidor.
Cómo empezar
En primer lugar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes actualizarlos todos con el siguiente comando:
dnf update -y
Una vez actualizados todos los paquetes, instala otras dependencias necesarias con el siguiente comando:
dnf install git unzip -y
Una vez que hayas terminado, puedes pasar al siguiente paso.
Instalar Java
Kafka se basa en Java, por lo que Java debe estar instalado en tu servidor. Si no está instalado, puedes instalarlo con el siguiente comando:
dnf install java-11-openjdk-devel -y
Una vez instalado Java, puedes verificar la versión instalada de Java con el siguiente comando:
java --version
Deberías obtener la siguiente salida:
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)
Una vez que hayas terminado, puedes pasar al siguiente paso.
Descargar Kafka
Antes de descargar Kafka, crea un directorio para almacenar Kafka. Puedes crearlo con el siguiente comando:
mkdir /usr/local/kafka-server
A continuación, cambia el directorio a kafka-server y descarga la última versión de Kafka con el siguiente comando:
cd /usr/local/kafka-server wget https://downloads.apache.org/kafka/2.6.0/kafka_2.13-2.6.0.tgz
Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:
tar -xvzf kafka_2.13-2.6.0.tgz --strip 1
Cuando hayas terminado, puedes pasar al siguiente paso.
Crear un archivo Systemd para Kafka y Zookeeper
A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio Zookeeper y Kafka.
En primer lugar, crea un archivo de servicio Zookeeper utilizando el siguiente comando:
nano /etc/systemd/system/zookeeper.service
Añade las siguientes líneas:
[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
Guarda y cierra el archivo cuando hayas terminado.
A continuación, crea un archivo de servicio Kafka con el siguiente comando:
nano /etc/systemd/system/kafka.service
Añade las siguientes líneas:
[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
Guarda y cierra el archivo y, a continuación, recarga el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicia ambos servicios y habilítalos para que se inicien al arrancar con el siguiente comando:
systemctl enable --now zookeeper systemctl enable --now kafka systemctl start zookeeper systemctl start kafka
A continuación, comprueba el estado de ambos servicios con el siguiente comando:
systemctl status zookeeper kafka
Deberías ver la siguiente salida:
? 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>
Instalar y configurar CMAK
A continuación, tendrás que instalar CMAK para gestionar el clúster de Apache Kafka. Puedes descargarlo del repositorio Git con el siguiente comando:
cd /root git clone https://github.com/yahoo/CMAK.git
Una vez descargado, tendrás que editar el archivo application.conf y definir los hosts de zookeeper.
nano ~/CMAK/conf/application.conf
Cambia las siguientes líneas:
cmak.zkhosts="localhost:2181"
Guarda y cierra el archivo cuando hayas terminado. A continuación, crea un archivo zip para desplegar la aplicación.
cd ~/CMAK/ ./sbt clean dist
Deberías ver la siguiente salida:
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
A continuación, descomprime el archivo zip creado en el paso anterior con el siguiente comando:
cd ~/CMAK/target/universal unzip cmak-3.0.0.5.zip
Cuando hayas terminado, puedes pasar al siguiente paso.
Iniciar los Servicios CMAK
Ahora, cambia el directorio a ~/CMAK/target/universal/cmak-3.0.0.5 e inicia el servicio CMAK con el siguiente comando:
cd ~/CMAK/target/universal/cmak-3.0.0.5 bin/cmak
En este punto, CMAK está iniciado y a la escucha en el puerto 9000.
Configurar SELinux y el cortafuegos
Por defecto, SELinux está activado en CentOS 8. Así que tendrás que configurar SELinux para CMAK. Puedes configurarlo con el siguiente comando:
chcon -t httpd_sys_rw_content_t ~/CMAK/target/universal/cmak-3.0.0.5 -R setsebool -P httpd_can_network_connect 1
A continuación, tendrás que permitir el puerto 9000 a través de firewalld. Puedes hacerlo con el siguiente comando:
firewall-cmd --permanent --zone public --add-port 9000/tcp firewall-cmd --reload
Una vez que hayas terminado, puedes pasar al siguiente paso.
Accede a la interfaz web de CMAK
Ahora, abre tu navegador web y accede al CMAK utilizando la URL http://your-server-ip:9000. Deberías ver la siguiente página:
En la pantalla anterior, deberías ver que no hay ningún cluster disponible. Así que primero tendrás que crear un nuevo cluster.
Haz clic en Cluster => Añadir Cluster. Deberías ver la siguiente pantalla:
Proporciona el nombre de tu cluster, el host zookeeper, otra información requerida y haz clic en el botón Guardar. Deberías ver la siguiente pantalla:
Una vez que hayas terminado, puedes continuar con el siguiente paso.
Añade tu primer tema en Kafka
A continuación, tendrás que crear un tema en Kafka para probar la funcionalidad. Para ello, abre otro terminal, cambia el directoru a kafka-server y crea un nuevo tema especificando un nombre de tema y un factor de replicación ejecutando el siguiente comando:
cd /usr/local/kafka-server bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic MyNewTopic
Ahora, ve al panel de control de CMAK y haz clic en el Tema. Deberías ver el Tema que has creado anteriormente en la siguiente pantalla:
Haz clic en el número de Tema. Deberías ver tu tema recién creado en la siguiente pantalla:
Ahora, haz clic en el nombre de tu Tema. Deberías ver toda la información de tu tema en la siguiente pantalla:
Conclusión
Enhorabuena! has instalado con éxito Apache Kafka con CMAK en el servidor CentOS 8. Ahora puedes empezar a explorar CMAK para obtener más funcionalidades. No dudes en preguntarme si tienes alguna duda.