Cómo instalar Apache Kafka en Debian 10 Buster

1 mar 2021 9 min di lettura
Cómo instalar Apache Kafka en Debian 10 Buster
Indice dei contenuti

Introducción

Apache Kafka es un popular intermediario de mensajes distribuidos diseñado para manejar grandes volúmenes de datos en tiempo real. Un clúster de Kafka es altamente escalable y tolerante a fallas y también tiene un rendimiento mucho mayor que otros agentes de mensajes como ActiveMQ y RabbitMQ. Si bien generalmente se usa como un sistema de mensajería de publicación /suscripción, muchas organizaciones también lo usan para la agregación de registros porque ofrece almacenamiento persistente para los mensajes publicados.

Un sistema de mensajería de publicación /suscripción permite que uno o más productores publiquen mensajes independientemente del número de consumidores o de cómo procesarán los mensajes. Los clientes suscritos son notificados automáticamente de las actualizaciones y la creación de nuevos mensajes.

En este tutorial, instalará y configurará Apache Kafka 2.1.1 en un servidor Debian 10. Opcionalmente, instalará KafkaT para monitorear Kafka y configurar un clúster de múltiples nodos de Kafka.

Prerrequisitos

Para seguir este tutorial, necesitará:

  • Un servidor Debian 10 con al menos 4 GB de RAM y un usuario no root con privilegios sudo.
  • OpenJDK 11 instalado en su servidor. Para instalar esta versión, siga las instrucciones Cómo instalar Java en Debian 10. Kafka está escrito en Java, por lo que requiere una JVM.
Nota: LasOut Of Memory

Si desea instalar Apache Kafka en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:

ssh root@IP_DEL_SERVER

A continuación, deberá ingresar la contraseña del usuario root.

Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:

ssh nome_utente@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Paso 1: cree un usuario para Kafka

Dado que Kafka puede manejar solicitudes a través de una red, se recomienda que cree un usuario dedicado. Esto minimiza el daño a la computadora Debian en caso de que el servidor Kafka se vea comprometido. En este paso, creará el usuario dedicado kafka.

Inicie sesión como un usuario sudo no root, cree un usuario llamado kafka con el comando useradd

sudo useradd kafka -m

La -m asegura que se creará un directorio de inicio para el usuario. Este directorio de inicio, /home/kafka, servirá como directorio del espacio de trabajo para ejecutar comandos más adelante.

Establecer contraseña usando passwd:

sudo passwd kafka

Ingrese la contraseña que desea usar para este usuario.

A continuación, agregue el usuario de kafka sudo con el adduser, de modo que tenga los privilegios necesarios para instalar las dependencias de Kafka:

sudo adduser kafka sudo

Su usuario de kafka ya está listo. Inicie sesión en esta cuenta usando su:

su -l kafka

Ahora que ha creado el usuario específico de Kafka, puede continuar con la descarga y extracción de los binarios de Kafka.

Paso 2: descargue y extraiga los binarios de Kafka

En este paso, va a descargar y extraer los archivos binarios de Kafka en carpetas específicas en el directorio personal del usuario kafka.

Para comenzar, cree un directorio llamado Downloads en /home/kafka para almacenar sus descargas:

mkdir ~/Downloads

Luego, instale curl usando apt-get para que pueda descargar archivos remotos:

sudo apt-get update && sudo apt-get install curl

Cuando se le solicite, escriba Y para confirmar la descarga de curl

Una vez que curl instalado, utilícelo para descargar los binarios de Kafka:

curl "https://archive.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

Cree un directorio llamado kafka y cambie a este directorio. Este será el directorio base de la instalación de Kafka:

mkdir ~/kafka && cd ~/kafka

Extraiga el archivo descargado usando el comando tar

tar -xvzf ~/Downloads/kafka.tgz --strip 1

--strip 1 se especificó para garantizar que el contenido del archivo se extraiga en ~/kafka/ y no en otro directorio dentro de él, por ejemplo ~/kafka/kafka_2.12-2.1.1/.

Ahora que ha descargado y extraído correctamente los archivos binarios, puede continuar con la configuración de Kafka para permitir que se elimine el tema.

Paso 3: configurar el servidor Kafka

El comportamiento predeterminado de Kafka no nos permitirá eliminar un tema, categoría, grupo o nombre de fuente donde se pueden publicar mensajes. Para cambiar esto, editará el archivo de configuración.

Las opciones de configuración de Kafka se especifican en server.properties. Abra este archivo con nano o su editor favorito:

nano ~/kafka/config/server.properties

Agreguemos una configuración que nos permitirá eliminar los argumentos de Kafka. Agregue la siguiente línea resaltada al final del archivo:

 ...
 group.initial.rebalance.delay.ms

 delete.topic.enable = true

Guarde el archivo y salga de nano. Ahora que ha configurado Kafka, puede crear un systemd para que Kafka lo ejecute y lo habilite al inicio.

Paso 4: cree un archivo de unidad Systemd e inicie el servidor Kafka

En esta sección, creará un systemd para el servicio Kafka. Esto le ayudará a realizar acciones de servicio comunes, como iniciar, detener y reiniciar Kafka de forma coherente con otros servicios de Linux.

ZooKeeper es un servicio que Kafka usa para administrar el estado y las configuraciones del clúster. Se usa comúnmente en sistemas distribuidos como un componente integral. En este tutorial, utilizará Zookeeper para gestionar estos aspectos de Kafka. Si desea obtener más información, visite los documentos oficiales de ZooKeeper.

Primero, cree el archivo de unidad para el zookeeper del zoológico:

sudo nano /etc/systemd/system/zookeeper.service

Ingrese la siguiente definición de unidad en el archivo:

[Unit]
 Requires=network.target remote-fs.target
 After=network.target remote-fs.target

 [Service]
 Type=simple
 User=kafka
 ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
 ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
 Restart=on-abnormal

 [Install]
 WantedBy=multi-user.target

La [Unit] especifica que ZooKeeper requiere conexión en red y que el sistema de archivos está listo antes de que pueda iniciarse.

La [Service] especifica que systemd debe usar los zookeeper-server-start.sh y zookeeper-server-stop.sh para iniciar y detener el servicio. También especifica que ZooKeeper debe reiniciarse automáticamente si sale de forma anormal.

A continuación, cree el archivo de servicio systemd kafka:

sudo nano /etc/systemd/system/kafka.service

Ingrese la siguiente definición de unidad en el archivo:

[Unit]
 Requires=zookeeper.service
 After=zookeeper.service

 [Service]
 Type=simple
 User=kafka
 ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
 ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
 Restart=on-abnormal

 [Install]
 WantedBy=multi-user.target

La [Unit] especifica que este archivo de unidad depende de zookeeper.service. Esto asegurará que zookeeper inicie automáticamente cuando se inicie el servicio kafka

La [Service] especifica que systemd debe usar los kafka-server-start.sh y kafka-server-stop.sh para iniciar y detener el servicio. También especifica que Kafka debe reiniciarse automáticamente si sale de forma anormal.

Ahora que se han definido las unidades, inicie Kafka con el siguiente comando:

sudo systemctl start kafka

Para asegurarse de que el servidor se haya iniciado correctamente, consulte los registros de diario de la unidad kafka

sudo journalctl -u kafka

Verá un resultado similar al siguiente:

-- Logs begin at Tue 2020-03-03 19:48:52 CET, end at Tue 2020-03-03 20:51:40 CET. --
 Mar 03 20:51:37 TEST-SERVER-1 systemd[1]: Started kafka.service.

Ahora tiene un servidor Kafka escuchando en el puerto 9092, que es el puerto predeterminado para Kafka.

Inició el kafka, pero si reiniciara su servidor, no se iniciaría automáticamente. Para habilitar kafka al iniciar el servidor, ejecute:

sudo systemctl enable kafka

Ahora que ha iniciado y habilitado los servicios, es hora de verificar la instalación.

Paso 5: prueba la instalación

Publicamos un mensaje Hello World para asegurarnos de que el servidor de Kafka se está comportando correctamente. La publicación de mensajes en Kafka requiere:

  • Un productor, que permite la publicación de registros y datos sobre temas.
  • Un consumidor, que lee mensajes y datos de temas.

Primero, cree un tema llamado TutorialTopic escribiendo:

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

Puede crear un productor desde la línea de comandos utilizando el script kafka-console-producer.sh Espere el nombre de host, el puerto y el nombre como argumento del servidor de Kafka.

Publique la cadena Hello, World en el TutorialTopic escribiendo:

echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

La --broker-list determina la lista de agentes de mensajes a los que enviar el mensaje, en este caso localhost:9092. --topic designa el tema como TutorialTopic.

A continuación, puede crear un consumidor de Kafka utilizando el script kafka-console-consumer.sh Espere el nombre de host y el puerto del servidor de ZooKeeper y un nombre como argumentos.

El siguiente comando consume mensajes de TutorialTopic. Tenga en cuenta el uso de la --from-beginning, que permite el consumo de mensajes publicados antes de que comience el consumidor:

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

--bootstrap-server proporciona una lista de entradas al clúster de Kafka. En este caso, está utilizando localhost:9092.

Verá Hello, World en su terminal:

Hello, World

El script seguirá ejecutándose, esperando que se publiquen más mensajes sobre el tema. Siéntase libre de abrir una nueva terminal y comenzar un productor para publicar algunos mensajes más. Debería poder verlos todos en la salida del consumidor. Si desea saber más sobre cómo usar Kafka, consulte la documentación oficial de Kafka.

Cuando finalice la prueba, presione CTRL+C para detener la secuencia de comandos del consumidor. Ahora que ha probado la instalación, puede continuar con la instalación de KafkaT para administrar mejor su clúster de Kafka.

Paso 6: Instale KafkaT (opcional)

KafkaT es una herramienta de Airbnb que facilita la visualización de detalles sobre el clúster de Kafka y la realización de determinadas tareas administrativas desde la línea de comandos. Debido a que es una gema de Ruby, necesitará Ruby para usarla. También necesitará el build-essential para poder construir las otras gemas de las que depende. Instálelos usando apt:

sudo apt install ruby ruby-dev build-essential

Ahora puede instalar KafkaT usando el comando gem

sudo CFLAGS=-Wno-error=format-overflow gem install kafkat

La CFLAGS=-Wno-error=format-overflow deshabilita las advertencias de desbordamiento de formato y es necesaria para la gema ZooKeeper, que es una dependencia de KafkaT.

KafkaT utiliza .kafkatcfg como archivo de configuración para determinar los directorios de instalación y registro del servidor Kafka. También debe tener una entrada que indique KafkaT para la instancia de ZooKeeper.

Cree un nuevo archivo llamado .kafkatcfg:

nano ~/.kafkatcfg

Agregue las siguientes líneas para especificar la información requerida sobre su servidor Kafka y la instancia de Zookeeper:

{
 "kafka_path": "~/kafka",
 "log_path": "/tmp/kafka-logs",
 "zk_path": "localhost:2181"
 }

Ahora está listo para usar KafkaT. Para comenzar, así es como lo usaría para ver detalles sobre todas las particiones de Kafka:

kafkat partitions

Verá el siguiente resultado:

OutputTopic Partition Leader Replicas ISRs
 TutorialTopic 0 0 [0] [0]
 __consumer_offsets 0 0 [0] [0]...

Esta salida muestra TutorialTopic, así como __consumer_offsets, un argumento interno utilizado por Kafka para almacenar información del cliente. Puede ignorar con seguridad las líneas que comienzan con __consumer_offsets.

Para obtener más información sobre KafkaT, consulte el repositorio de GitHub.

Ahora que tiene KafkaT instalado, opcionalmente puede configurar Kafka en un clúster de servidores Debian 10 para crear un clúster de varios nodos.

Paso 7: configurar un clúster de varios nodos (opcional)

Si desea crear un clúster de agentes múltiples utilizando varios servidores Debian 10, repita los pasos 1, 4 y 5 en cada una de las nuevas máquinas. Además, realice los siguientes cambios en el ~/kafka/config/server.properties para cada nuevo servidor:

  • Cambie el valor de la broker.id para que sea único en todo el clúster. Esta propiedad identifica de forma única a cada servidor del clúster y puede tener cualquier cadena como valor. Por ejemplo, "server1", "server2", etc. serían útiles como identificadores.
  • Cambie el valor de la zookeeper.connect para que todos los nodos apunten a la misma instancia de ZooKeeper. Esta propiedad especifica la dirección de la instancia de ZooKeeper y sigue el formato <HOSTNAME/IP_ADDRESS>:<PORT>. Para este tutorial, usaría your_first_server_IP:2181 reemplazando your_first_server_IP con la dirección IP del servidor Debian 10 que ya ha configurado.

Si desea tener varias instancias de ZooKeeper para el clúster, el valor de la zookeeper.connect en cada nodo debe ser una cadena idéntica, separada por comas, que enumere las direcciones IP y los números de puerto de todas las instancias de ZooKeeper.

Nota:2181

Paso 8: restringir al usuario de Kafka

Ahora que se han completado todas las instalaciones, puede eliminar los privilegios de administrador de usuario de kafka Antes de continuar, cierre la sesión y vuelva a iniciarla como cualquier otro usuario de sudo que no sea root. Si todavía está ejecutando la misma sesión de shell con la que comenzó este tutorial, simplemente escriba exit.

Elimine al usuario kafka del grupo sudo:

sudo deluser kafka sudo

Para mejorar aún más la seguridad de su servidor Kafka, bloquee la contraseña del kafka con el comando passwd Esto asegura que nadie pueda acceder directamente al servidor usando esta cuenta:

sudo passwd kafka -l

En este punto, solo el usuario root o sudo puede iniciar sesión como kafka escribiendo el siguiente comando:

sudo su - kafka

En el futuro, si desea desbloquearlo, use el passwd con la opción -u

sudo passwd kafka -u

Ahora ha restringido con éxito los privilegios de administrador del usuario de kafka

Conclusión

Apache Kafka ahora funciona de forma segura en su servidor Debian. Se puede utilizar en sus proyectos mediante la creación de Kafka productores y consumidores que utilizan los clientes Kafka, disponibles para la mayoría de los lenguajes de programación. Para obtener más información sobre Kafka, también puede consultar la documentación de Apache Kafka.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.