El autor seleccionó la Free and Open Source Fundpara recibir una donación como parte del programa Write for DOnations.
Apache Kafka es un intermediario de mensajes de distribución popular diseñado para gestionar de manera eficaz grandes volúmenes de datos en tiempo real. Un clúster Kafka no solo es escalable y tolerante a fallas, sino también tiene un rendimiento mucho más alto en comparación con otros intermediarios de mensajes como ActiveMQ y RabbitMQ. Aunque se utiliza generalmente como un sistema de mensajería de publicación y subscripción, muchas organizaciones también lo utilizan para la agregación de registros debido a que ofrece almacenamiento persistente para mensajes publicados.
Un sistema de mensajería de publicación y subscripción permite a uno o más productores publicar mensajes sin tener en cuenta el número de consumidores ni la forma en que procesarán los mensajes. Los clientes suscritos reciben una notificación automática sobre las actualizaciones y la creación de nuevos mensajes. Este sistema es más eficaz y escalable que sistemas en los cuales los clientes de tanto en tanto averiguan si hay nuevos mensajes disponibles.
En este tutorial, instalará y usará Apache Kafka 2.1.1 en Ubuntu 18.04.
Para continuar, necesitará lo siguiente:
Dado que Kafka puede gestionar las solicitudes a través de una red, debería crear un usuario dedicado para ella. Esto minimizará el daño al que se exponga su máquina con Ubuntu si el servidor Kafka se ve comprometido. En este paso, crearemos un usuario kafka dedicado. Sin embargo, debería crear un usuario no root diferente para realizar otras tareas en este servidor una vez que termine de configurar Kafka.
Tras iniciar sesión como usuario sudo no root, cree un usuario llamado kafka con el comando de useradd
:
- sudo useradd kafka -m
El indicador -m
garantiza que se cree un directorio de inicio para el usuario. Este directorio de inicio /home/kafka
actuará como nuestro directorio de espacios de trabajo para ejecutar comandos en las secciones que se muestran a continuación.
Establezca la contraseña usando passwd
:
- sudo passwd kafka
Añada el usuario kafka al grupo sudo
con el comando adduser
, de manera que tenga los privilegios necesarios para instalar las dependencias de Kafka.
- sudo adduser kafka sudo
Con esto, su usuario kafka estará listo. Inicie sesión en esta cuenta usando su
:
- su -l kafka
Ahora que creamos el usuario específico de Kafka, podemos descargar y extraer los archivos binarios de Kafka.
Procederemos a descargar los archivos binarios de Kafka y extraerlos en carpetas dedicadas, en el directorio de inicio de nuestro usuario kafka.
Para comenzar, cree un directorio en /home/kafka
llamado Downloads
para almacenar sus descargas:
- mkdir ~/Downloads
Utilice curl
para descargar los archivos binarios de Kafka:
- curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz
Cree un directorio llamado kafka
y ábralo. Este será el directorio de base de la instalación de Kafka:
- mkdir ~/kafka && cd ~/kafka
Extraiga el archivo que descargó usando el comando tar
:
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
Especificamos el indicador --strip 1
para asegurarnos de que los contenidos del archivo se extraigan en ~/kafka/
y no en otro directorio (como ~/kafka/kafka_2.11-2.1.1/
) dentro de él.
Ahora que descargamos y extrajimos los archivos binarios de forma correcta, podemos proceder con la configuración de Kafka para permitir la eliminación de temas.
El comportamiento predeterminado de Kafka no nos permitirá eliminar un __tema, la categoría, el grupo ni el nombre del feed en el cual pueden publicarse los mensajes. Para modificar esto, editemos 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 permita eliminar temas de Kafka. Añada lo siguiente a la parte inferior del archivo:
delete.topic.enable = true
Guarde el archivo y cierre nano
. Ahora que configuramos Kafka, podemos crear archivos de unidad systemd para ejecutarlo y habilitarlo en el inicio.
En esta sección, crearemos archivos de unidad systemd para el servicio Kafka. Esto nos ayudará a realizar acciones de servicio comunes como iniciar, detener y reiniciar Kafka con un método compatible con otros servicios de Linux.
Zookeeper es un servicio que utiliza Kafka para administrar el estado de sus clústeres y sus configuraciones. Se utiliza comúnmente en muchos sistemas distribuidos como componente integral. Si desea obtener más información más sobre él, consulte los documentos oficiales de Zookeeper.
Cree el archivo de unidad para zookeeper
:
- sudo nano /etc/systemd/system/zookeeper.service
Introduzca 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
En la sección [Unit]
, se especifica que para el inicio de Zookeeper la interconexión y el sistema de archivos deben estar listos.
En la sección [Service]
se especifica que sistemd debe usar los archivos de shell zookeeper-server-start.sh
y zookeeper-server-stop.sh
para iniciar y detener el servicio. También se especifica que Zookeeper debe reiniciarse automáticamente si se cierra de forma anormal.
A continuación, cree el archivo de servicio de systemd para kafka
:
- sudo nano /etc/systemd/system/kafka.service
Introduzca 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
En la sección [Unit]
se especifica que este archivo de unidad depende de zookeeper.service
. Esto garantizará que zookeeper
se inicie de forma automática al iniciarse el servicio Kafka
.
En la sección [Service]
se especifica que systemd debe usar los archivos de shell kafka-server-start.sh
y kafka-server-stop.sh
para iniciar y detener el servicio. También se especifica que Kafka debe reiniciarse de automáticamente si se cierra de forma anormal.
Ahora que se definieron las unidades, inicie Kafka con el siguiente comando:
- sudo systemctl start kafka
Para asegurarse de que el servidor se haya iniciado de forma correcta, consulte los registros de diario para la unidad kafka
:
- sudo journalctl -u kafka
El resultado debe ser similar al siguiente:
OutputJul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.
Ahora tiene un servidor Kafka que escucha en el puerto 9092
.
Aunque iniciamos el servicio kafka
, si reiniciáramos nuestro servidor este no se iniciaría de forma automática. Para habilitar kafka
en el arranque del servidor, ejecute lo siguiente:
- sudo systemctl enable kafka
Ahora que iniciamos y habilitamos los servicios, revisemos la instalación.
Publicaremos y consumiremos un mensaje “Hello World” para asegurarnos de que el comportamiento del servidor Kafka sea correcto. Para publicar mensajes en Kafka es necesario lo siguiente:
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 comando usando el script kafka-console-producer.sh
. Se necesitan el nombre de host y el puerto del servidor de Kafka, y un nombre de tema como argumentos.
Publique la cadena “Hello, World”
en el tema TutorialTopic
escribiendo lo siguiente:
- echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
A continuación, puede crear un consumidor de Kafka usando el script kafka-console-consumer.sh
. Como argumentos se necesitan el nombre de host y puerto del servidor de ZooKeeper, y un nombre de tema.
El siguiente comando consume mensajes de TutorialTopic
. Tenga en cuenta el uso del indicador de --from-beginning
, que permite el consumo de mensajes publicados antes de iniciar el consumidor:
- ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
Si no hay problemas de configuración, verá Hello, World
en su terminal:
OutputHello, World
El script continuará ejecutándose y esperando a que se publiquen más mensajes en el tema. Siéntase libre de abrir un terminal nuevo e iniciar un productor para publicar algunos mensajes más. Debería poder verlos a todos en el resultado del consumidor.
Cuando termine de realizar pruebas, presione CTRL+C
para detener el script de consumidor. Ahora que probamos la instalación, procederemos a instalar KafkaT.
KafkaT es una herramienta de Airbnb que le permite ver fácilmente detalles sobre su clúster Kafka y realizar algunas tareas administrativas desde la línea de comandos. Debido a que es un gem joya de Ruby, necesitará Ruby para usarlo. También necesitará el paquete build-essential
para poder compilar otros gem de los que depende. Realice la instalación usando apt
:
- sudo apt install ruby ruby-dev build-essential
Ahora podrá instalar KafkaT usando el comando gem:
- sudo gem install kafkat
KafkaT utiliza .kafkatcfg
como archivo de configuración para determinar los directorios de instalación y registro de su servidor de Kafka. También debe tener una entrada que apunte a KafkaT en su 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 de Kafka y su instancia de Zookeeper:
{
"kafka_path": "~/kafka",
"log_path": "/tmp/kafka-logs",
"zk_path": "localhost:2181"
}
Con esto, estará listo para usar KafkaT. Para comenzar, esta es la forma en que lo utilizaría para ver información sobre todas las particiones de Kafka:
- kafkat partitions
Verá lo siguiente:
OutputTopic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
__consumer_offsets 0 0 [0] [0]
...
...
Verá TutorialTopic
, así como __consumer_offsets
, un tema interno que Kafka utiliza para almacenar información relacionada con el cliente. Puede ignorar líneas de forma segura comenzando con __consumer_offsets
.
Para obtener más información sobre KafkaT, consulte su repositorio de GitHub.
Si desea crear un clúster multibroker usando más máquinas Ubuntu 18.04, debe repetir los pasos 1, 4 y 5 en cada una de los nuevas máquinas. Además, debe realizar los siguientes cambios en el archivo server.properties
para cada una:
El valor de la propiedad broker.id
debe cambiarse de modo que sea único en todo el clúster. Esta propiedad identifica de forma única cada servidor en el clúster y puede tener cualquier cadena como valor. Por ejemplo, “server1”
, “server2”
, etc.
El valor de la propiedad de zookeeper.connect
debe cambiarse de forma que todos los nodos apunten a la misma instancia de ZooKeeper. Esta propiedad especifica la dirección de la instancia de Zookeeper y sigue formato :<PORT>
. Por ejemplo, "203.0.113.0:2181"
, "203.0.113.1:2181"
, etc.
Si desea tener varias instancias de ZooKeeper para su clúster, el valor de la propiedad zookeeper.connect
de cada nodo debe ser una cadena idéntica y separada por comas que enumere las direcciones IP y los números de puerto de todas las instancias de ZooKeeper.
Ahora que todas las instalaciones están listas, puede eliminar los privilegios de administración del usuario kafka. Antes de hacerlo, cierre sesión y vuelva a iniciarla como cualquier otro usuario sudo no root. Si aún ejecuta la misma sesión de shell con la que inició este tutorial , simplemente escriba exit
.
Elimine el usuario kafka del grupo sudo:
- sudo deluser kafka sudo
Para mejorar aún más la seguridad de su servidor, bloquee la contraseña del usuario kafka usando el comando passwd
. Esto garantiza que nadie pueda iniciar sesión directamente en el servidor usando esta cuenta:
- sudo passwd kafka -l
En este momento, solo un usuario root o sudo puede iniciar sesión como kafka
escribiendo el siguiente comando:
- sudo su - kafka
Si desea desbloquearlo posteriormente, utilice passwd
con la opción -u
:
- sudo passwd kafka -u
De esta manera, ha restringido con éxito los privilegios de administrador del usuario kafka.
Con esto, ha logrado hacer funcionar Apache Kafka de forma segura en su servidor Ubuntu. Puede usarlo en sus proyectos creando productores y consumidores de Kafka usando clientes de Kafka, que están 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 sobre este.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!