Clúster Zookeeper + Clúster Kafka

Tabla de contenido

1. Descripción general del cuidador del zoológico

Mecanismo de trabajo del cuidador del zoológico

Características del cuidador del zoológico

2. Escenarios de aplicación de Zookeeper

Servicio de nombres unificado

Gestión de configuración unificada

Gestión de clústeres unificada

Servidor dinámico en línea y fuera de línea

Equilibrio de carga suave

3. Mecanismo de elección de cuidadores del zoológico

Lanzamiento del mecanismo electoral por primera vez

No poner en marcha el mecanismo electoral por primera vez

4. Implementar el clúster Zookeeper

El primer paso es apagar el firewall y el mecanismo de seguridad.

El segundo paso es instalar el entorno JDK.

El tercer paso es importar el paquete de software y optimizar la ruta.

Paso 4: hacer una copia de seguridad de los archivos de configuración

Paso 5 Modificar el archivo de configuración

Paso 6: copiar archivos de configuración de forma remota

Paso 7: crear un directorio de datos y un directorio de registro

Paso 8 Configurar el Myid de cada servidor

Paso 9: escriba el script de inicio del cuidador del zoológico

Paso 10: Si el nombre del archivo se ingresa incorrectamente, es necesario cambiarle el nombre.

Paso 11: autorice el archivo de secuencia de comandos y agregue los servicios del sistema

Paso 12: inicie zookeeper en todos los servidores

5. Implementación de Zookeeper + Kafka

El primer paso es importar el paquete de software y descomprimir la ruta de optimización.

Paso 2: hacer una copia de seguridad de los archivos de configuración

El tercer paso es modificar el archivo de configuración.

Paso 4: cambiar las variables de entorno

Paso 5: actualice el archivo de configuración

Paso 6: configurar el script de inicio del cuidador del zoológico

Paso 7: copie de forma remota el archivo de secuencia de comandos a todos los servidores

Paso 8: potenciar y agregar identificación del sistema

Paso 9: inicie el servicio Kafka de todos los servidores de nodo

Paso 10: crea un tema y nómbralo

Paso 11 Ver el tema del servicio actual

Paso 12 Ver los detalles del Tema

Paso 13: Publicar la noticia

Paso 14 Modificar el número de particiones

Paso 15: Cómo eliminar el tema especificado


1. Descripción general del cuidador del zoológico

Zookeeper es un proyecto Apache distribuido de código abierto que proporciona servicios de coordinación para marcos distribuidos.

Mecanismo de trabajo del cuidador del zoológico

Zookeeper se entiende desde la perspectiva del patrón de diseño: es un marco de gestión de servicios distribuidos diseñado en base al patrón de observador, es responsable de almacenar y administrar los datos que interesan a todos y luego acepta el registro de los observadores. Una vez que se conoce el estado de estos cambios de datos, Zookeeper Será responsable de notificar a los observadores registrados en Zookeeper para que reaccionen en consecuencia. En otras palabras, Zookeeper = sistema de archivos + mecanismo de notificación.

Características del cuidador del zoológico

① Zookeeper: un grupo compuesto por un líder y varios seguidores.

② Siempre que sobrevivan más de la mitad de los nodos del clúster Zookeeper, el clúster Zookeeper puede funcionar normalmente. Por tanto, Zookeeper es adecuado para instalar un número impar de servidores.

③ Coherencia de datos global: cada servidor guarda una copia de los mismos datos. No importa a qué servidor se conecte el cliente, los datos son consistentes.

④ Las solicitudes de actualización se ejecutan en secuencia. Las solicitudes de actualización del mismo Cliente se ejecutan en el orden en que se envían, es decir, primero en entrar, primero en salir.

⑤ Atomicidad de la actualización de datos, una actualización de datos tiene éxito o falla.

⑥ En tiempo real, dentro de un cierto rango de tiempo, el Cliente puede leer los datos más recientes.

Estructura de datos de ZooKeeper

La estructura del modelo de datos de ZooKeeper es muy similar a la del sistema de archivos de Linux: puede considerarse como un árbol en su conjunto y cada nodo se denomina ZNode. Cada ZNode puede almacenar 1 MB de datos de forma predeterminada y cada ZNode puede identificarse de forma única por su ruta.

2. Escenarios de aplicación de Zookeeper

Servicio de nombres unificado

En un entorno distribuido, a menudo es necesario nombrar las aplicaciones/servicios de manera uniforme para una fácil identificación. Por ejemplo: la IP no es fácil de recordar, pero el nombre de dominio es fácil de recordar.

Gestión de configuración unificada

① En un entorno distribuido, la sincronización de archivos de configuración es muy común. Generalmente se requiere que la información de configuración de todos los nodos en un clúster sea consistente, como un clúster de Kafka. Después de modificar el archivo de configuración, espero que se pueda sincronizar rápidamente con cada nodo.

② ZooKeeper puede implementar la gestión de la configuración. La información de configuración se puede escribir en un Znode en ZooKeeper. Cada servidor cliente escucha este Znode. Una vez que se modifican los datos en Znode, ZooKeeper notificará a cada servidor cliente.

Gestión de clústeres unificada

① En un entorno distribuido, es necesario conocer el estado de cada nodo en tiempo real. Se pueden realizar algunos ajustes según el estado en tiempo real del nodo.

② ZooKeeper puede monitorear los cambios de estado del nodo en tiempo real. La información del nodo se puede escribir en un ZNode en ZooKeeper. Supervise este ZNode para obtener sus cambios de estado en tiempo real.

Servidor dinámico en línea y fuera de línea

El cliente puede obtener información en tiempo real sobre los cambios en línea y fuera de línea del servidor.

Equilibrio de carga suave

Registre la cantidad de visitas a cada servidor en Zookeeper y deje que el servidor con la menor cantidad de visitas maneje la última solicitud del cliente.

3. Mecanismo de elección de cuidadores del zoológico

Lanzamiento del mecanismo electoral por primera vez

① El servidor 1 se inicia e inicia una elección. El servidor 1 emite su voto. En este momento, el servidor 1 tiene un voto, que no es suficiente para más de la mitad (3 votos), la elección no se puede completar y el estado del servidor 1 permanece MIRANDO;

② El servidor 2 se inicia e inicia otra elección. Los servidores 1 y 2 votan por sí mismos e intercambian información de voto: en este momento, el servidor 1 encuentra que el myid del servidor 2 es mayor que el que está votando actualmente (servidor 1) y cambia el voto para recomendar el servidor 2. En este momento, el servidor 1 tiene 0 votos, el servidor 2 tiene 2 votos y no hay más de la mitad de los resultados, la elección no se puede completar y el estado de los servidores 1 y 2 sigue MIRANDO.

③ El servidor 3 se inicia e inicia una elección. En este momento, tanto el servidor 1 como el 2 cambiarán los votos al servidor 3. Los resultados de esta votación: el servidor 1 tiene 0 votos, el servidor 2 tiene 0 votos y el servidor 3 tiene 3 votos. En este momento, el servidor 3 tiene más de la mitad de los votos y el servidor 3 es elegido líder. Los servidores 1 y 2 cambian el estado a SIGUIENTE y el servidor 3 cambia el estado a LÍDER;

④ El servidor 4 se inicia e inicia una elección. En este momento, los servidores 1, 2 y 3 ya no están en estado MIRANDO y no cambiarán la información de votación. El resultado del intercambio de información de voto: el servidor 3 tiene 3 votos y el servidor 4 tiene 1 voto. En este momento, el servidor 4 obedece a la mayoría, cambia la información de votación al servidor 3 y cambia el estado a SIGUIENTE

No poner en marcha el mecanismo electoral por primera vez

① Cuando un servidor en el clúster ZooKeeper encuentra una de las dos situaciones siguientes, comenzará a ingresar a la elección de Líder:

Comienza la inicialización del servidor.

No se puede mantener la conexión con Leader mientras el servidor está en ejecución.

② Cuando una máquina ingresa al proceso de elección de Líder, el grupo actual también puede estar en los dos estados siguientes:

Ya existe un líder en el clúster.

Para situaciones donde ya existe un líder, cuando la máquina intenta elegir un líder, se le informará la información del líder del servidor actual. Para esta máquina, solo necesita establecer una conexión con la máquina líder y sincronizar el estado.

③ De hecho, no hay ningún líder en el grupo.

Supongamos que ZooKeeper consta de 5 servidores, con SID 1, 2, 3, 4 y 5, y ZXID 8, 8, 8, 7 y 7. En este momento, el servidor con SID 3 es el líder. En algún momento, los servidores 3 y 5 fallaron, por lo que comenzó la elección de líder.

Reglas de elección de líder:
1. El que tiene el EPOCH más grande gana directamente.
2. El que tiene el mismo EPOCH y el ID de transacción más grande gana.
3. El que tiene el mismo ID de transacción y el ID de servidor más grande gana.

SID: ID del servidor. Se utiliza para identificar de forma única una máquina en el clúster de ZooKeeper. Cada máquina no se puede repetir y es coherente con myid.

ZXID: ID de transacción. ZXID es un ID de transacción que se utiliza para identificar un cambio en el estado del servidor. En un momento determinado, el valor ZXID de cada máquina en el clúster puede no ser exactamente el mismo, esto está relacionado con la velocidad lógica de procesamiento por parte del servidor ZooKeeper de la "solicitud de actualización" del cliente.

Época: el nombre en clave de cada término líder. Cuando no hay líder, el valor del reloj lógico en la misma ronda de votación es el mismo. Estos datos aumentarán cada vez que se emita un voto.

4. Implementar el clúster Zookeeper

El primer paso es apagar el firewall y el mecanismo de seguridad.

Instrucción: systemctl detener firewalld

setenforce 0

El segundo paso es instalar el entorno JDK.

Ejemplo:yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

El tercer paso es importar el paquete de software y optimizar la ruta.

Comando: tar xf apache-zookeeper-3.5.7-bin.tar.gz

mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

Paso 4: hacer una copia de seguridad de los archivos de configuración

Comando: cp -a /usr/local/zookeeper-3.5.7/conf/zoo_sample /usr/local/zookeeper-3.5.7/conf/zoo.cfg

Paso 5 Modificar el archivo de configuración

Comando: vim /usr/local/zookeeper-3.5.7/conf/zoo.cfg

Paso 6: copiar archivos de configuración de forma remota

Comando: scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.8.130:/usr/local/zookeeper-3.5.7/conf

scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.8.140:/usr/local/zookeeper-3.5.7/conf

Paso 7: crear un directorio de datos y un directorio de registro

Comando: mkdir /usr/local/zookeeper-3.5.7/data

mkdir /usr/local/zookeeper-3.5.7/logs

Paso 8 Configurar el Myid de cada servidor

Comando: eco 1 >> /usr/local/zookeeper-3.5.7/data/myid

eco 2 >> /usr/local/zookeeper-3.5.7/data/myid

eco 3 >> /usr/local/zookeeper-3.5.7/data/myid

Paso 9: escriba el script de inicio del cuidador del zoológico

Comando: vim /etc/init.d/zookeeper

Paso 10: Si el nombre del archivo se ingresa incorrectamente, es necesario cambiarle el nombre.

Comando: mv /etc/init.d/zookeeper.sh /etc/init.d/zookeeper

Paso 11: autorice el archivo de secuencia de comandos y agregue los servicios del sistema

Comando: chmod 777 /etc/init.d/zookeeper

chkconfig --añadir cuidador del zoológico

Paso 12: inicie zookeeper en todos los servidores

Instrucción: inicio del cuidador del zoológico

estado del cuidador del zoológico del servicio

5. Implementación de Zookeeper + Kafka

El primer paso es importar el paquete de software y descomprimir la ruta de optimización.

comando: tar xf kafka_2.13-2.7.1.tgz

mv kafka_2.13-2.7.1 /usr/local/kafka

Paso 2: hacer una copia de seguridad de los archivos de configuración

cp /usr/local/kafka/config/server.properties /usr/local/kafka/config/server.properties.bak

El tercer paso es modificar el archivo de configuración.

Comando: vim /usr/local/kafka/config/server.properties

Paso 4: cambiar las variables de entorno

Comando: vim /etc/perfil 

Paso 5: actualice el archivo de configuración

Instrucción: fuente /etc/profile

Contenido: export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

Paso 6: configurar el script de inicio del cuidador del zoológico

Comando: vim /etc/init.d/kafka

内容:#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
    echo "---------- Kafka 启动------------"
    ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
    echo "---------- Kafka 停止 ------------"
    ${KAFKA_HOME}/bin/kafka-server-stop.
sh ;;
reiniciar)
    $0 detener
    $0 iniciar
;;
status)
    echo "---------- Kafka 状态 ------------"
    count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
    if [ "$count" -eq 0 ]; entonces
        echo "kafka no se está ejecutando"
    else
        echo "kafka se está ejecutando"
    fi
;;
*)
    echo "Uso: $0 {inicio|detener|reiniciar|estado}"
esac

Paso 7: copie de forma remota el archivo de secuencia de comandos a todos los servidores

Comando: scp /etc/init.d/kafka 192.168.8.130:/etc/init.d/

scp /etc/init.d/kafka 192.168.8.140:/etc/init.d/

Paso 8: potenciar y agregar identificación del sistema

Comando: chmod 777 /etc/init.d/kafka

chkconfig --añadir kafka

Paso 9: inicie el servicio Kafka de todos los servidores de nodo

Instrucción: inicio del servicio kafka

Paso 10: crea un tema y nómbralo

Instrucción: kafka-topics.sh --create --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --replication-factor 2 --partitions 3 --topic [nombre]

Paso 11 Ver el tema del servicio actual

Comando: kafka-topics.sh --list --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181

Paso 12 Ver los detalles del Tema

Instrucción: kafka-topics.sh --describe --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181

Paso 13: Publicar la noticia

Comando: kafka-console-producer.sh --broker-list 192.168.8.200:9092,192.168.8.130:9092,192.168.8.140:9092 --prueba de tema

Mensajes del consumidor: kafka-console-consumer.sh --bootstrap-server 192.168.8.200:9092,192.168.8.130:9092,192.168.8.140:9092 --prueba de tema --desde el principio

Paso 14 Modificar el número de particiones

Comando: kafka-topics.sh --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --alter --topic test --partitions [número]

Paso 15: Cómo eliminar el tema especificado

Comando: kafka-topics.sh --delete --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --topic [nombre del tema]

Supongo que te gusta

Origin blog.csdn.net/Liu_Fang_Hong/article/details/132147387
Recomendado
Clasificación