¡Buen día!En este artículo, veremos cómo configurar un grupo de tres nodos ZooKeeper (servicio de coordinación del sistema distribuido), dos de los cuales son agentes de mensajes de Kafka y el tercero es el administrador.Como resultado, se implementará el siguiente esquema de componentes:
Todos los componentes en una máquina, por simplicidad, usaremos el editor de consola incorporado (productor) y los mensajes de suscriptor (consumidor).El módulo ZooKeeper está integrado en el paquete Kafka, lo usamos.Instalación y configuración
Instalación del paquete KafkaEn este caso, el sistema operativo es Ubuntu 16.04 LTS.Las versiones actuales y las instrucciones detalladas se encuentran en el sitio web oficial .wget http://mirror.linux-ia64.org/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar -xvzf kafka_2.12-2.4.1.tgz
Cree directorios de trabajo para los tres nodos servidor_1, servidor_2 y servidor_3.mv kafka_2.12-2.4.1 kafka_server_1
cp -r kafka_server_1/ kafka_server_2/
cp -r kafka_server_1/ kafka_server_3/
Configuración de nodosConfiguración de un agente Kafka(desde los directorios kafka_server_1, kafka_server_2 y kafka_server_3, respectivamente)vim config/server.properties
- ID del corredor (0, 1, 2 respectivamente)
- puerto del cliente (9092, 9093, 9094)
- Puerto ZooKeeper (2181, 2182, 2183)
- directorio de registro (/ tmp / kafka-logs-1, / tmp / kafka-logs-2, / tmp / kafka-logs-3)
broker.id=0
listeners=PLAINTEXT://:9092
zookeeper.connect=localhost:2181
log.dirs=/tmp/kafka-logs-1
Configuración de Znode:vim config/zookeeper.properties
- directorio para datos (/ tmp / zookeeper_1, / tmp / zookeeper_2, / tmp / zookeeper_3)
- puerto de cliente (2181, 2182, 2183)
- número máximo de conexiones de clientes y límites de conexión
- puertos para el intercambio de datos entre nodos (es decir, informamos a cada nodo sobre la existencia de otros)
dataDir=/tmp/zookeeper_1
clientPort=2181
maxClientCnxns=60
initLimit=10
syncLimit=5
tickTime=2000
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
Crear directorios para los nodos de ZooKeeper, escribir la identificación del nodo en los archivos de servicio:mkdir -p /tmp/zookeeper_[1..3]
echo "1" >> /tmp/zookeeper_1/myid
echo "2" >> /tmp/zookeeper_2/myid
echo "3" >> /tmp/zookeeper_3/myid
En caso de problemas con los derechos de acceso, cámbielos en directorios y archivos:sudo chmod 777 /tmp/zookeeper_1
Ejecución de nodos z y corredores
Para los dos primeros nodos (kafka_server_1 /, kafka_server_2 /), ejecute las secuencias de comandos de los servidores ZooKeeper y Kafka, los argumentos son los archivos de configuración correspondientes:sudo bin/zookeeper-server-start.sh config/zookeeper.properties
sudo bin/kafka-server-start.sh config/server.properties
Para el tercer nodo (kafka_server_3 /), solo ZooKeeper.Scripts para detener servidores:sudo bin/kafka-server-stop.sh
sudo bin/zookeeper-server-stop.sh
Crear un tema, productor y consumidor de consolas
Tema (tema): una secuencia de mensajes de cierto tipo, divididos en particiones (el número se especifica mediante la tecla --partición). Cada partición está duplicada en dos servidores (- factor de replicación). Después de la clave --bootstrap-server, especifique los puertos de los corredores Kafka, separados por comas. El modificador --topic especifica el nombre del tema.sudo bin/kafka-topics.sh --create --bootstrap-server localhost:9092,localhost:9093 --replication-factor 2 --partitions 2 --topic TestTopic
Descubra la lista de temas en el puerto, la información sobre cada tema se puede hacer con el comando:sudo bin/kafka-topics.sh --list --zookeeper localhost:2181
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic
Líder - un servidor con la instancia principal de la partición, réplica - el servidor en el que se duplica la información, ISR - servidores que asumen el papel de líderes en caso de falla del líder.Creamos el productor de la consola, el consumidor de la consola usando los scripts apropiados:sudo bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic TestTopic
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093 --from-beginning --topic TestTopic
Esto asegura la transmisión continua de mensajes al destinatario, en caso de falla de un agente de mensajes procesa el segundo.Servicios para zookeeper y kafka en systemctl
Para la comodidad de iniciar un clúster, puede crear servicios en systemctl: zookeeper_1.service, zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_2.service.Editamos el archivo /etc/systemd/system/zookeeper_1.service (cambie el directorio / home / user y user user por los necesarios).[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=user
ExecStart=home/user/kafka_server_1/bin/zookeeper-server-start.sh /home/user/kafka_server_1/config/zookeeper.properties
ExecStop=/home/user/kafka_server_1/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Para los servicios zookeeper_2.service y zookeeper_3.service es similar.Archivo /etc/systemd/system/kafka_1.service:[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=user
ExecStart=/bin/sh -c '/home/user/kafka_server_1/bin/kafka-server-start.sh /home/user/kafka_server_1/config/server.properties > /tmp/kafka-logs-1 2>&1'
ExecStop=/home/user/kafka_server_1/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
kafka_2.service es similar.Activación y verificación de servicios.systemctl daemon-reload
systemctl enable zookeeper_1.service
systemctl start zookeeper_1.service
sudo journalctl -u zookeeper_1.service
systemctl stop zookeeper_1.service
Lo mismo aplica para zookeeper_2.service, zookeeper_3.service, kafka_1.service, kafka_1.service.¡Gracias por la atención!