Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo realizar tareas básicas de administración para dispositivos de almacenamiento en Linux

marzo 4, 2020

 

El autor ha seleccionado el Fondo de código abierto y de recibir una donación como parte del programa de escritura de donaciones.

Introducción

Apache Kafka es un intermediario de mensajes distribuido popular diseñado para manejar eficientemente grandes volúmenes de datos en tiempo real. clúster A Kafka no sólo es altamente escalable y tolerante a fallos, pero también tiene un mucho mayor rendimiento en comparación con otros intermediarios de mensajes tales como ActiveMQ y RabbitMQ. A pesar de que se utiliza generalmente como un publicación / suscripción de sistema de mensajería , muchas organizaciones también lo utilizan para la agregación de registro, ya que ofrece un almacenamiento persistente para los mensajes publicados.

Una publicación / suscripción de sistema de mensajería permite que uno o más productores para publicar mensajes sin tener en cuenta el número de consumidores o cómo van a procesar los mensajes. clientes suscritos son notificados automáticamente sobre las actualizaciones y la creación de nuevos mensajes. Este sistema es más eficiente y escalable que los sistemas donde los clientes sondean periódicamente para determinar si los nuevos mensajes están disponibles.

En este tutorial, instalar y utilizar Apache Kafka 2.1.1 en Ubuntu 18.04.

Requisitos previos

Para seguir a lo largo, se necesita:

  • Una Ubuntu 18.04 servidor y un usuario no root con privilegios sudo. Siga los pasos que se especifican en esta guía, si usted no tiene un usuario no root para este compromiso.
  • Al menos 4 GB de RAM en el servidor. Instalaciones sin esta cantidad de memoria RAM pueden provocar que el servicio falle Kafka, con la máquina virtual de Java (JVM) lanzar una excepción de “memoria” durante el inicio.
  • OpenJDK 8 instalado en su servidor. Para instalar esta versión, siga estas instrucciones sobre la instalación de versiones específicas de OpenJDK. Kafka está escrito en Java, por lo que requiere una JVM; sin embargo, su script de inicio tiene un error de detección de la versión que hace que no se inicie con las versiones anteriores de JVM 8.

Paso 1 – Creación de un usuario de Kafka

Desde Kafka puede manejar peticiones sobre una red, se debe crear una de usuario dedicada para ella. Este daño se minimiza en su máquina Ubuntu se debe comprometer el servidor Kafka. Vamos a crear un usuario kafka dedicado en esta etapa, pero se debe crear un usuario no root diferente para realizar otras tareas en este servidor una vez que tenga configuración de acabado hacia arriba Kafka.

Conectado como el usuario no root sudo, crear un usuario llamado kafka con el comando useradd:

sudo useradd kafka -m

  • sudo useradd -m kafka

Los -m asegura bandera que se creará un directorio de un supuesto usuario. Este directorio de inicio, / home / kafka, actuará como nuestro directorio espacio de trabajo para la ejecución de comandos en las siguientes secciones.

Configuración de la contraseña usando passwd:

sudo passwd kafka

  • sudo passwd kafka

Añadir el usuario kafka al grupo sudo con el comando adduser, de modo que tenga los privilegios necesarios para instalar las dependencias de Kafka:

sudo adduser kafka sudo

  • sudo adduser kafka sudo

Su kafka usuario ya está listo. Entrar en esta cuenta usando su:

su -l kafka

  • su -l kafka

Ahora que hemos creado el usuario Kafka-específica, podemos pasar a descargar y extraer los archivos binarios de Kafka.

Paso 2 – Descarga y extracción de la descarga Kafka binarios

Vamos y extraer los archivos binarios de Kafka en carpetas específicas en el directorio home de nuestro usuario kafka .

Para empezar, cree un directorio en / home / kafka llamada Descargas para almacenar sus descargas:

mkdir ~/Downloads

  • mkdir ~ / Descargas

Uso curl para descargar los binarios de Kafka:

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

  • enrollamiento «https: // www .apache.org / dist / kafka / 2.1.1 / kafka_2.11-2.1.1.tgz» -o ~ / Descargas / kafka.tgz

Crear un directorio llamado Kafka y el cambio a este directorio. Este será el directorio base de la instalación de Kafka:

mkdir ~/kafka && cd ~/kafka

  • mkdir ~ / kafka && cd ~ / kafka

extraer el archivo que descargó con el comando tar:

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

  • alquitrán -xvzf ~ / Descargas / kafka. TGZ –strip 1

especificamos el –strip 1 pabellón para garantizar que el contenido del archivo se extraen en ~ / kafka / sí mismo y no en otro directorio (por ejemplo ~ / kafka / kafka_2.11-2.1.1 / ) en el interior de la misma.

Ahora que hemos descargado y extraído los archivos binarios con éxito, que puede moverse sobre la configuración de Kafka para permitir la eliminación tema.

Paso 3 – Configuración del comportamiento predeterminado del servidor de Kafka

de Kafka no nos permitirá borrar un tema , la categoría, grupo o nombre de alimentación a la que los mensajes pueden ser publicados. Para modificar esto, vamos a editar el archivo de configuración. opciones de configuración de

Kafka se especifican en server.properties. Abrir este archivo con nano o su editor favorito:

nano ~/kafka/config/server.properties

  • nano ~ / kafka / config / server.properties complemento de

Let una configuración que nos permitirá eliminar temas Kafka. Añadir lo siguiente al final del archivo:

delete.topic.enable = true

Guardar el archivo y nano salida. Ahora que hemos configurado Kafka, podemos pasar a la creación de archivos de unidades systemd para correr y lo que le permite al inicio.

Paso 4 – Creación de archivos Systemd Unidad e inicio del

Kafka servidor En esta sección, vamos a crear archivos de unidades systemd para el servicio de Kafka. Esto ayudará a ejecutar acciones de servicio comunes, tales como iniciar, detener y reiniciar Kafka de una manera consistente con otros servicios Linux.

Zookeeper es un servicio que Kafka utiliza para gestionar su estado del clúster y configuraciones. Se utiliza comúnmente en muchos sistemas distribuidos como un componente integral. Si desea saber más sobre él, visite los documentos oficiales del guardián.

Crear el archivo de la unidad de empleado del zoológico:

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

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

Escribe 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

Los [Unidad] sección especifica que requiere la creación de redes Zookeeper y el sistema de archivos que esté listo antes de que pueda comenzar.

El [Servicio] sección especifica que systemd debe utilizar los archivos de concha 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 para kafka:

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

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

Escribe 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

Los [Unidad] sección especifica que este archivo unidad depende de zookeeper.service. Esto asegurará que el cuidador del zoológico se inicia automáticamente cuando se inicia el servicio kafka.

El [Servicio] sección especifica que systemd debe utilizar el kafka-server-start.sh y archivos de concha kafka-server-stop.sh para iniciar y detener el servicio. También especifica que Kafka se debe reiniciar automáticamente si sale de forma anormal.

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

sudo systemctl start kafka

  • sudo systemctl empezar kafka

Para garantizar que el servidor se ha iniciado correctamente, compruebe los registros de diario para la unidad de kafka:

sudo journalctl -u kafka

  • sudo -u journalctl kafka

debería ver una salida similar a la siguiente:

OutputJul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

ahora tiene un servidor escucha en el puerto 9092. Kafka

Si bien hemos iniciado el servicio de kafka, si tuviéramos que reiniciar nuestro servidor, no se inicia automáticamente. Para habilitar kafka en el arranque del servidor, ejecute:

sudo systemctl enable kafka

  • sudo systemctl permiten kafka

Ahora que hemos empezado y ha permitido a los servicios, vamos a ver la instalación.

Paso 5 – Comprobación de la instalación

vamos a publicar y consumir un mensaje “Hello World” para asegurarse 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 los registros y los datos a los temas.
  • Un consumidor, que lee los mensajes y los datos de los temas.

En primer lugar, crear un tema llamado TutorialTopic escribiendo:

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

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

puede crear un productor de la línea de comandos usando la secuencia de comandos kafka-console-producer.sh. Se espera que el nombre de host, el puerto y un nombre del tema del servidor de Kafka como argumentos.

Publicar la cadena «Hola, mundo» con el tema TutorialTopic escribiendo:

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

  • echo «Hola, mundo» | ~ / Kafka / bin / kafka-console-producer.sh –broker lista localhost: 9092 –topic TutorialTopic > / dev / null

A continuación, puede crear un consumidor Kafka utilizando el kafka-console-consumer.sh guión. Se espera que el nombre de host y el puerto del servidor ZooKeeper, junto con el nombre de un tema como argumentos.

El siguiente comando consume mensajes de TutorialTopic. Tenga en cuenta el uso de la bandera –de-principio, lo que permite que el consumo de los mensajes que fueron publicados antes de iniciar el consumidor:

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

  • ~ / kafka / bin / kafka-console-consumer.sh localhost –bootstrap-servidor : 9092 –topic TutorialTopic –de-comenzando

Si no hay problemas de configuración, debería ver Hola mundo en su terminal:

OutputHello, World

el guión continuará funcionando, a la espera de más mensajes que se publicará en el tema. Siéntase libre para abrir una nueva terminal y comenzar un productor de publicar unos cuantos mensajes. Usted debe ser capaz de ver a todos en la salida del consumidor.

Cuando haya terminado la prueba, presione CTRL + C para detener la secuencia de comandos del consumidor. Ahora que hemos probado la instalación, vamos a pasar a la instalación de KafkaT.

Paso 6 – Instalar KafkaT (Opcional)

KafkaT es una herramienta de Airbnb que hace que sea más fácil para usted para ver detalles sobre el clúster de Kafka y llevar a cabo determinadas tareas administrativas desde la línea de comandos. Debido a que es una gema de rubíes, tendrá que Ruby a utilizarlo. También se necesita el paquete build-essential para poder construir las otras gemas de los que depende. Instalarlos usando apt:

sudo apt install ruby ruby-dev build-essential

  • sudo apt instalar ruby ​​ruby-dev build-essential

Ahora puede instalar KafkaT usando el comando joya:

sudo gem install kafkat

  • sudo gem install kafkat usos

KafkaT .kafkatcfg como la configuración archivo para determinar la instalación y directorios de su servidor de registro Kafka. También debe tener una entrada que apunta a la instancia KafkaT ZooKeeper.

Crear un nuevo archivo llamado .kafkatcfg:

nano ~/.kafkatcfg

  • nano ~ / .kafkatcfg

Añadir las siguientes líneas para especificar la información necesaria acerca del servidor y la instancia Kafka Zookeeper:

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

Ahora está listo para usar KafkaT. Para empezar, he aquí cómo lo usaría para ver los detalles de todas las particiones de Kafka:

kafkat partitions

  • kafkat particiones

Usted verá el siguiente resultado:

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 utilizado por Kafka para almacenar información relacionada con clientes. Puede ignorar las líneas que comienzan con __consumer_offsets.

Para obtener más información sobre KafkaT, consulte a su repositorio GitHub.

Paso 7 – Configuración de una multi-nodo de clúster (Opcional)

Si desea crear un clúster de varios corredor de la utilización de más de Ubuntu 18.04 máquinas, se debe repetir el paso 1, paso 4 y el paso 5 en cada uno de los nuevos máquinas. Además, debe realizar los siguientes cambios en el archivo para cada server.properties:

  • El valor de la propiedad broker.id debe ser cambiado de tal manera que es único en todo el clúster. Esta propiedad identifica de forma única cada servidor del clúster y puede tener cualquier cadena como su valor. Por ejemplo, «server1», «server2», etc.
  • El valor de la propiedad zookeeper.connect debe ser cambiado de tal manera que todos los nodos apuntan a la misma instancia ZooKeeper. Esta propiedad especifica la dirección de la instancia Zookeeper y sigue el : formato. Por ejemplo, «203.0.113.0:2181», «203.0.113.1:2181», etc.

El valor de la propiedad broker.id debe ser cambiado de tal manera que es único en todo el clúster. Esta propiedad identifica de forma única cada servidor del clúster y puede tener cualquier cadena como su valor. Por ejemplo, «server1», «server2», etc.

El valor de la propiedad zookeeper.connect debe ser cambiado de tal manera que todos los nodos apuntan a la misma instancia ZooKeeper. Esta propiedad especifica la dirección de la instancia Zookeeper y sigue el : formato. Por ejemplo, «203.0.113.0:2181», «203.0.113.1:2181», etc.

Si usted quiere tener varias instancias ZOOKEEPER para el clúster, el valor de la propiedad zookeeper.connect en cada nodo debe ser un idénticos, cadena separada por comas lista de las direcciones IP y números de puerto de todos los casos ZOOKEEPER.

Paso 8 – Restringir el usuario Kafka

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

eliminar el usuario kafka del grupo sudo:

sudo deluser kafka sudo

  • sudo sudo deluser kafka

Para mejorar aún más la seguridad de su servidor Kafka, bloquear la contraseña del usuario kafka usando el comando passwd. Esto garantiza que nadie puede entrar directamente en el servidor utilizando esta cuenta:

sudo passwd kafka -l

  • sudo passwd -l kafka

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

sudo su - kafka

  • sudo su – kafka

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

sudo passwd kafka -u

  • sudo passwd -u kafka

ahora ha restringido el éxito del kafka privilegios de administrador del usuario.

Conclusión

Ahora tiene Apache Kafka funcionando de forma segura en el servidor de Ubuntu. Puede hacer uso de ella en sus proyectos mediante la creación de productores y consumidores que utilizan Kafka Kafka clientes, 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 su documentación.