Construcción del clúster de Kafka y debe saber

Construcción del clúster de Kafka y debe saber

Implementación e inicio del clúster de Kafka

En este artículo, demostraré cómo crear un clúster de Kafka y luego presentaré brevemente algunos puntos de conocimiento básico sobre el clúster de Kafka. Sin embargo, este artículo solo presenta el clúster y no explica demasiado los conceptos básicos de Kafka, se asume que el lector tiene ciertos conocimientos básicos de Kafka.

Primero, necesitamos comprender algunos mecanismos del clúster de Kafka:

  • Kafka, naturalmente, admite clústeres, incluso un nodo es en realidad un modo de clúster
  • El clúster de Kafka se basa en Zookeeper para la coordinación, y en las primeras versiones de Kafka, muchos datos se almacenan en Zookeeper.
  • Siempre que los nodos de Kafka estén registrados en el mismo Zookeeper, significa que están en el mismo clúster.
  • Kafka usa brokerId para distinguir diferentes nodos en el clúster

La topología del clúster de Kafka es la siguiente:

Construcción del clúster de Kafka y debe saber

Varios roles en el clúster de Kafka:

  • Broker: generalmente se refiere al nodo de implementación de Kafka
  • Líder: se utiliza para procesar solicitudes de recepción y consumo de mensajes, lo que significa que el productor empuja el mensaje al líder y el consumidor sondea el mensaje del líder.
  • Seguidor: se utiliza principalmente para hacer una copia de seguridad de los datos de los mensajes, un líder tendrá varios seguidores

En este ejemplo, para acercarse a la situación de implementación real, se utilizan cuatro máquinas virtuales para la demostración:

IP de la máquina efecto Roles brokerId
192.168.99.1 Implementar nodos de Kafka servidor de broker 0
192.168.99.2 Implementar nodos de Kafka servidor de broker 1
192.168.99.3 Implementar nodos de Kafka servidor de broker 2
192.168.99.4 Implementar nodos de Zookeeper Coordinador de clúster

Instalación de Zookeeper

Kafka se basa en Zookeeper para lograr una coordinación distribuida, por lo que debe crear un nodo Zookeeper antes de crear un nodo Kafka. Tanto Zookeeper como Kafka dependen del JDK. Ya instalé el JDK aquí:

[[email protected] ~]# java --version
java 11.0.5 2019-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)
[root@txy-server2 ~]#

Después de preparar el entorno JDK, vaya a la dirección de descarga del sitio web oficial de Zookeeper y copie el enlace de descarga:

Luego use el comando wget para descargar en Linux, de la siguiente manera:

[[email protected] ~]# cd /usr/local/src
[[email protected] /usr/local/src]# wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz

Descomprima el paquete comprimido descargado, mueva y cambie el nombre del directorio descomprimido:

[[email protected] /usr/local/src]# tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
[[email protected] /usr/local/src]# mv apache-zookeeper-3.6.1-bin ../zookeeper

Vaya al directorio del archivo de configuración de Zookeeper, copie el archivo de configuración de muestra zoo_sample.cfg y asígnele el nombre zoo.cfg, que es el nombre del archivo de configuración predeterminado de Zookeeper:

[[email protected] /usr/local/src]# cd ../zookeeper/conf/
[[email protected] /usr/local/zookeeper/conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[[email protected] /usr/local/zookeeper/conf]# cp zoo_sample.cfg zoo.cfg

Modifique el elemento de configuración dataDir en el archivo de configuración para especificar un directorio con un espacio de disco más grande:

[[email protected] /usr/local/zookeeper/conf]# vim zoo.cfg
# 指定Zookeeper的数据存储目录,类比于MySQL的dataDir
dataDir=/data/zookeeper
[[email protected] /usr/local/zookeeper/conf]# mkdir -p /data/zookeeper

Si recién está aprendiendo a usar, este paso puede ignorarse.
Puede ingresar al directorio bin con la configuración predeterminada y usar el script de inicio para iniciar Zookeeper, como se muestra en el siguiente ejemplo:

[[email protected] /usr/local/zookeeper/conf]# cd ../bin/
[[email protected] /usr/local/zookeeper/bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] /usr/local/zookeeper/bin]#

Una vez que se completa el inicio, puede juzgar si el inicio es exitoso al verificar si el número de puerto se monitorea normalmente. El inicio es exitoso de la siguiente manera:

[[email protected] ~]# netstat -lntp |grep 2181
tcp6       0      0 :::2181       :::*         LISTEN      7825/java
[[email protected] ~]#

Si su máquina tiene un firewall activado, necesita abrir el puerto Zookeeper, de lo contrario, no se pueden registrar otros nodos:

[[email protected] ~]# firewall-cmd --zone=public --add-port=2181/tcp --permanent
[[email protected] ~]# firwall-cmd --reload

Kafka

Después de instalar Zookeeper, puede instalar Kafka. Para la misma rutina, primero vaya al sitio web oficial de Kafka para descargar la dirección y copie el enlace de descarga:

Luego use el comando wget para descargar en Linux, de la siguiente manera:

[[email protected] ~]# cd /usr/local/src
[[email protected] /usr/local/src]# wget https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.13-2.5.0.tgz

Descomprima el paquete comprimido descargado, mueva y cambie el nombre del directorio descomprimido:

[[email protected] /usr/local/src]# tar -xvf kafka_2.13-2.5.0.tgz
[[email protected] /usr/local/src]# mv kafka_2.13-2.5.0 ../kafka

Ingrese al directorio del archivo de configuración de Kafka y modifique el archivo de configuración:

[[email protected] /usr/local/src]# cd ../kafka/config/
[[email protected] /usr/local/kafka/config]# vim server.properties
# 指定该节点的brokerId,同一集群中的brokerId需要唯一
broker.id=0
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.1:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.1:9092
# 指定kafka日志文件的存储目录
log.dirs=/usr/local/kafka/kafka-logs
# 指定zookeeper的连接地址,若有多个地址则用逗号分隔
zookeeper.connect=192.168.99.4:2181
[[email protected] /usr/local/kafka/config]# mkdir /usr/local/kafka/kafka-logs

Después de completar la modificación del archivo de configuración, para facilitar el uso de los scripts de comandos de Kafka, podemos configurar el directorio bin de Kafka a las variables de entorno:

[[email protected] ~]# vim /etc/profile
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[[email protected] ~]# source /etc/profile  # 让配置生效

Entonces puede iniciar Kafka con el siguiente comando:

[[email protected] ~]# kafka-server-start.sh /usr/local/kafka/config/server.properties &

Después de ejecutar el comando anterior, el registro de inicio se enviará a la consola. Puede juzgar si el inicio fue exitoso a través del registro, o puede juzgar si el inicio fue exitoso al verificar si el puerto 9092 está monitoreado:

[[email protected] ~]# netstat -lntp |grep 9092
tcp6    0     0 192.168.99.1:9092     :::*      LISTEN     31943/java
[[email protected] ~]#

Del mismo modo, si el firewall está encendido, también debe abrir el número de puerto correspondiente:

[[email protected] ~]# firewall-cmd --zone=public --add-port=9092/tcp --permanent
[[email protected] ~]# firwall-cmd --reload

Hasta ahora, hemos completado la instalación del primer nodo Kafka. Los pasos de instalación de los otros dos nodos también son los mismos. Solo necesita modificar el brokerId y la ip de monitoreo en el archivo de configuración. Entonces copie directamente el directorio de Kafka en el nodo a las otras dos máquinas:

[[email protected] ~]# rsync -av /usr/local/kafka 192.168.99.2:/usr/local/kafka
[[email protected] ~]# rsync -av /usr/local/kafka 192.168.99.3:/usr/local/kafka

Luego modifique el brokerId y la ip de escucha de estos dos nodos:

[[email protected] /usr/local/kafka/config]# vim server.properties
# 修改brokerId
broker.id=1
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.2:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.2:9092
[[email protected] /usr/local/kafka/config]# 
[[email protected] /usr/local/kafka/config]# vim server.properties
# 修改brokerId
broker.id=2
# 指定监听的地址及端口号,该配置项是指定内网ip
listeners=PLAINTEXT://192.168.99.3:9092
# 如果需要开放外网访问,则在该配置项指定外网ip
advertised.listeners=PLAINTEXT://192.168.99.3:9092
[[email protected] /usr/local/kafka/config]# 

Una vez completada la modificación de la configuración, inicie los dos nodos de acuerdo con los pasos descritos anteriormente. Después de que el inicio sea exitoso, ingrese Zookeeper y los datos de brokerId correspondientes en / brokers / ids indican que el clúster se construyó correctamente:

[[email protected] ~]# /usr/local/zookeeper/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 4] ls /brokers/ids
[0, 1, 2]
[zk: localhost:2181(CONNECTED) 5]

Colección de libros duplicados de Kafka

Acerca del conjunto de réplicas de Kafka:

  • El conjunto de réplicas de Kafka se refiere a la copia de varias copias del registro. Sabemos que los datos de Kafka se almacenan en archivos de registro, lo que equivale a la copia de seguridad y la redundancia de datos.
  • Kafka puede establecer el número predeterminado de conjuntos de réplicas mediante la configuración
  • Kafka puede establecer un conjunto de réplicas para cada tema, por lo que el conjunto de réplicas es relativo al tema
  • El conjunto de réplicas de un tema se puede distribuir entre varios corredores. Cuando un corredor falla, todavía hay datos sobre los otros corredores, lo que mejora la confiabilidad de los datos, que también es la función principal del conjunto de réplicas.

Todos sabemos que Topic en Kafka es solo un concepto lógico. Los datos de almacenamiento reales son Partición, por lo que es la Partición la que realmente se copia. Como se muestra abajo:

Construcción del clúster de Kafka y debe saber

Sobre el factor de copia:

  • El factor de copia determina realmente el número de copias de una partición. Por ejemplo, si el factor de copia es 1, significa que todas las particiones del tema se copiarán de acuerdo con el número de agentes y se distribuirán a cada agente.

El algoritmo de asignación de copias es el siguiente:

  • Ordene todos los N Brokers y las particiones i que se asignarán
  • Asignar la i-ésima partición al (i mod n) Broker
  • Asigne la j-ésima copia de la i-ésima partición al ((i + j) mod n) Broker

Motivos de falla del nodo de Kafka y métodos de tratamiento.

Dos situaciones de falla del nodo Kafka (Broker):

  • El latido del nodo Kafka y Zookeeper no se mantiene como una falla del nodo
  • Cuando el mensaje del seguidor está demasiado por detrás del líder, se considerará una falla del nodo.

Manejo de Kafka de fallas en los nodos:

  • Kafka eliminará el nodo fallido, por lo que básicamente no hay pérdida de datos debido a la falla del nodo
  • La garantía semántica de Kafka también evita en gran medida la pérdida de datos
  • Kafka equilibra los mensajes dentro del clúster para reducir el sobrecalentamiento de los mensajes en algunos nodos.

Introducción al mecanismo de elección de Kafka Leader

Elección de líder del grupo de Kafka:

  • Si ha estado en contacto con algunos otros componentes distribuidos, sabrá que la mayoría de los componentes se eligen votando para elegir un líder entre muchos nodos, pero en Kafka, la votación no se usa para elegir al líder.
  • Kafka mantendrá dinámicamente un conjunto de copias de los datos del líder (ISR)
  • Kafka elegirá a uno más rápido en el ISR como líder

Construcción del clúster de Kafka y debe saber

"Es difícil para una mujer inteligente cocinar sin arroz": Kafka tiene una situación de desamparo, es decir, todos los ejemplares del ISR están caídos. En este caso, Kafka llevará a cabo una elección de líder impuro por defecto. Kafka ofrece dos formas diferentes de procesamiento:

  1. Espere a que se recupere cualquier réplica en el ISR y selecciónela como líder

    • El tiempo de espera prolongado reducirá la disponibilidad, o todas las réplicas en el ISR no se pueden recuperar o los datos se pierden, entonces la partición nunca estará disponible
  2. Seleccione la primera réplica restaurada como el nuevo líder, independientemente de si está en el ISR
    • No contiene todos los mensajes que han sido comprometidos previamente por Leader, por lo que provocará pérdida de datos, pero la disponibilidad es alta

Recomendaciones de configuración de elección de líder:

  • Deshabilitar la elección de líder impuro
  • Establezca manualmente el ISR mínimo

Para obtener un contenido más detallado de ISR, consulte:

Enlace original: https://www.jianshu.com/p/cc0b90636715 Autor: Duanwan Chit-Chat

Supongo que te gusta

Origin blog.51cto.com/mageedu/2547655
Recomendado
Clasificación