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:

Grupos CMAK

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:

Añadir clúster

Configuración del clúster

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:

Añadido con éxito un clúster

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:

Añadir tema de Apache Kafka

Haz clic en el número de Tema. Deberías ver tu tema recién creado en la siguiente pantalla:

Operaciones y temas

Ahora, haz clic en el nombre de tu Tema. Deberías ver toda la información de tu tema en la siguiente pantalla:

Tema Kafka

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.

También te podría gustar...