One place for hosting & domains

      Cómo instalar Apache Kafka en Debian 10


      El autor seleccionó la Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Apache Kafka es un popular intermediario de mensajes distribuidos diseñado para gestionar grandes volúmenes de datos en tiempo real. Un clúster de Kafka es muy escalable y tolerante a fallos, y también tiene una capacidad mucho mayor 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.

      A través de este tutorial, instalará y configurará Apache Kafka 2.1.1 de forma segura en un servidor de Debian 10 y luego probará su configuración produciendo y consumiendo un mensaje Hello World. Luego instalará de forma opcional KafkaT para controlar Kafka y configurar un clúster con varios nodos de Kafka.

      Requisitos previos

      Para continuar, necesitará lo siguiente:

      Nota: En instalaciones que no cuenten con 4 GB de RAM, el servicio de Kafka puede fallar; la máquina virtual Java (JVM) puede mostrar una excepción de Out Of Memory durante el inicio.

      Paso 1: Creación de un usuario para Kafka

      Debido a que Kafka puede manejar solicitudes a través de una red, una práctica recomendada es crear un usuario específico para ello. Esto minimiza los daños a su máquina de Debian en caso de que el servidor de Kafka se vea comprometido. Debe crear el usuario específico kafka en este paso.

      Tras iniciar sesión como usuario sudo no root, cree un usuario llamado kafka con el comando de useradd:

      El indicador -m garantiza que se cree un directorio de inicio para el usuario. Este directorio de inicio, /home/kafka, actuará como su directorio de espacio de trabajo para ejecutar comandos más adelante.

      Establezca la contraseña usando passwd:

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

      A continuación, añada el usuario kafka al grupo sudo con el comando adduser, de modo que tenga los privilegios necesarios para instalar las dependencias de Kafka.

      Con esto, su usuario kafka estará listo. Inicie sesión en esta cuenta usando su:

      Ahora que ha creado el usuario específico de Kafka, puede descargar y extraer los binarios de Kafka.

      En este paso, descargará los archivos binarios de Kafka y extráigalos en carpetas específicas del directorio de inicio de su usuario kafka.

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

      A continuación, instale curl usando apt-get para poder 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 esté instalado, úselo 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 á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

      Especificó el indicador --strip 1 para garantizar que el contenido del archivo se extraiga en ~/kafka/ en sí y no en otro directorio dentro de este, como ~/kafka/kafka_2.12-2.1.1/​​​.

      Ahora que descargó y extrajo los binarios con éxito, podrá configurar Kafka para permitir la eliminación de temas.

      Paso 3: Configuración del servidor de Kafka

      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, debe 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 permita eliminar temas de Kafka. Añada la siguiente línea destacada a la parte inferior del archivo:

      ~/kafka/config/server.properties

      ...
      group.initial.rebalance.delay.ms
      
      delete.topic.enable = true
      

      Guarde el archivo y cierre nano. Ahora que configuró Kafka, puede crear archivos de unidad systemd para ejecutar y habilitar Kafka al inicio.

      Paso 4: Creación de archivos de unidad systemd e inicio del servidor de Kafka

      En esta sección, creará archivos de unidad systemd para el servicio de Kafka. Esto le permitirá 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 Kafka usa para administrar su estado de clúster y sus configuraciones. Se utiliza comúnmente en sistemas distribuidos como componente integral. En este tutorial, usará Zookeeper para administrar estos aspectos de Kafka. Si desea obtener más información sobre él, consulte los documentos oficiales de Zookeeper.

      Primero, cree el archivo de unidad para zookeeper:

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

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

      /etc/systemd/system/zookeeper.service

      [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 systemd 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 no se cierra de forma normal.

      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:

      /etc/systemd/system/kafka.service

      [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:

      Verá resultados similares al siguiente:

      Output

      Mar 23 13:31:48 kafka systemd[1]: Started kafka.service.

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

      Inició el servicio kafka. Sin embargo, si reinicia su servidor no se iniciará automáticamente. Para habilitar kafka en el arranque del servidor, ejecute lo siguiente:

      • sudo systemctl enable kafka

      Ahora que inició y habilitó los servicios, es hora de verificar la instalación.

      Paso 5: Pruebas de instalación

      Publicaremos y consumiremos un mensaje Hello World para asegurarnos de que el comportamiento del servidor de Kafka sea correcto. Para publicar mensajes en Kafka es necesario lo siguiente:

      • Un productor que permita la publicación de registros y datos en temas.
      • Un consumidor que lea 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 comando usando la secuencia de comandos 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

      El indicador --broker-list determina la lista de intermediarios de mensajes a los que se enviará el mensaje (en este caso, localhost:9092). --topic designa el tema como TutorialTopic.

      A continuación, puede crear un consumidor de Kafka usando la secuencia de comandos 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

      --bootstrap-server ofrece una lista de las entradas en el clúster Kafka. En este caso, utiliza localhost:9092.

      Verá Hello, World en su terminal:

      Output

      Hello, World

      La secuencia de comandos continuará ejecutándose y esperando 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. Si desea obtener más información sobre cómo usar Kafka, consulte la documentación oficial de Kafka.

      Cuando termine de realizar pruebas, presione CTRL+C para detener la secuencia de comandos de consumidor. Ahora que probó la instalación, puede instalar KafkaT para administrar mejor su clúster de Kafka.

      Paso 6: Instalar KafkaT (opcional)

      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 CFLAGS=-Wno-error=format-overflow gem install kafkat

      La opción CFLAGS=-Wno-error=format-overflow deshabilita las advertencias de sobreflujo de formato y es necesaria para la gema de ZooKeeper, que es una dependencia de 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:

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

      ~/.kafkatcfg

      {
        "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:

      Verá lo siguiente:

      Output

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

      En este resultado se muestran TutorialTopic y __consumer_offsets, un tema interno que Kafka usa 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.

      Ahora que instaló KafkaT, puede configurar de forma opcional Kafka en un clúster de servidores de Debian 10 para crear un clúster de varios nodos.

      Paso 7: Configuración de un clúster multinodo (opcional)

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

      • Cambie el valor de la propiedad broker.id para 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" y "server2", entre otros, serían identificadores útiles.

      • Cambie el valor de la propiedad de 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, utilizaría your_first_server_IP:2181, sustituyendo your_first_server_IP con la dirección IP del servidor de Debian 10 que ya configuró.

      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.

      Nota: Si hay un firewall activo en el servidor de Debian 10 con Zookeeper instalado, asegúrese de abrir el puerto 2181 para permitir solicitudes entrantes de los otros nodos del clúster.

      Paso 8: Restricción del usuario de Kafka

      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:

      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:

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

      Si desea desbloquearlo posteriormente, utilice passwd con la opción -u:

      De esta manera, ha restringido con éxito los privilegios de administrador del usuario kafka.

      Conclusión

      Ahora, tendrá Apache Kafka activo de forma segura en su servidor de Debian. 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 Apache Kafka.



      Source link


      Leave a Comment