Kafka 01——Instalación de Kafka y uso básico sencillo
1. Descargar e instalar
1.1 instalación de JDK
- Debido a que el lenguaje de desarrollo de Kafka se basa en jdk ,
Scala
primero se debe instalar jdk. Para la instalación de jdk, puede leer los dos artículos siguientes, de la siguiente manera:Scala
1.2 Instalación de Zookeeper
1.2.1 Selección de la versión de Zookeeper
- Puede seleccionar la versión de Zookeeper correspondiente según la versión de Kafaka descargada a continuación. La forma de elegir es la siguiente:
- Método 1: mire directamente el paquete jar en libs en Kafka, de la siguiente manera:
- Método 2: también puede consultar el código fuente para ver la información de la versión, de la siguiente manera:
- Método 1: mire directamente el paquete jar en libs en Kafka, de la siguiente manera:
1.2.2 Descargar e instalar Zookeeper
- Vaya al sitio web oficial y descargue la versión correspondiente según sea necesario, de la siguiente manera:
- Con respecto a la instalación de Zookeeper, puedes leer el siguiente artículo
Instalación y uso de Zookeeper (win+linux) .
1.3 Instalación de Kafka
1.3.1 Descargar
- Vaya al sitio web oficial para descargar la versión requerida, dirección del sitio web oficial:
https://kafka.apache.org/downloads .
1.3.2 Descompresión
- Luego descomprímelo de la siguiente manera:
tar -zxvf kafka_2.12-2.8.2.tgz
1.3.3 Modificar archivo de configuración
-
Modifique el archivo de configuración
server.properties
de la siguiente manera:
-
La información de configuración es la siguiente:
# The id of the broker. This must be set to a unique integer for each broker. broker.id=0 listeners=PLAINTEXT://内网IP:9092 advertised.listeners=PLAINTEXT://公网IP:9092 zookeeper.connect=zk的公网IP:2181 # …… 其他配置,先默认即可
2. Iniciar Kafka
2.1 Inicio de Kafka
-
El comando de inicio es el siguiente:
./kafka-server-start.sh ../config/server.properties &
-
Después de un inicio exitoso, muestra:
-
Comprueba el progreso:
ps -ef | grep kafka
2.2 Problemas encontrados al iniciar kafka
2.2.1 Pregunta 1
- Descripción del problema,como sigue:
org.apache.kafka.common.KafkaException: Socket server failed to bind to XXX:9092: Cannot assign requested address.
- causas del problema
- La IP de la red pública del servidor (IP expuesta al mundo exterior) y la IP real (IP mostrada por ifconfig) solo pueden ser una relación de mapeo. Cuando un usuario accede a una IP externa, OpenStack la reenviará a la IP real correspondiente para acceder.
- Pero en este momento, si la
server.properties
configuración en el archivo de configuración eslisteners=PLAINTEXT://公网IP:9092
, no se puede iniciar porque no se puede vincular el socket para escuchar y se informará el error anterior. - La solución también es muy simple, simplemente cambie la configuración anterior
listeners=PLAINTEXT://内网IP:9092
a y use la IP de la red pública normalmente para otros usos, y no tiene nada que ver con la IP real de la intranet.
- Resolver el problema
-
Ver primeroIP de intranet
ifconfig
-
Luego modifique el archivo de configuración
server.properties
de la siguiente manera:listeners=PLAINTEXT://内网IP:9092 advertised.listeners=PLAINTEXT://公网IP:9092
-
- Luego simplemente reinicie.
2.2.2 Pregunta 2
3. Sencillo y práctico
3.1 crear tema
- como sigue:
./kafka-topics.sh --create --zookeeper zookeeper服务的IP:2181 --replication-factor 1 --partitions 1 --topic susu-topic
3.2 Ver temas creados
- como sigue:
./kafka-topics.sh -list --zookeeper zookeeper服务的IP:2181
3.3 Enviar mensaje
3.3.1 Enviar comando de mensaje
- como sigue:
./kafka-console-producer.sh --broker-list 内网IP:9092 --topic susu-topic 或者 ./kafka-console-producer.sh --broker-list 公网IP:9092 --topic susu-topic
3.3.2 Problemas encontrados
3.3.2.1 Pregunta 1
- La descripción del problema es la siguiente:
[2023-08-10 09:01:57,758] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:15,979] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:49,538] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:50,562] ERROR Error when sending message to topic susu-topic with key: null, value: 4 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.TimeoutException: Topic susu-topic not present in metadata after 60000 ms. >[2023-08-10 09:03:18,069] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:03:47,001] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
- Resuelva el problema:
Mi solución aquí es abrir el puerto 9092. Con respecto a los problemas de puerto abierto y firewall, puede leer los siguientes artículos:
Verifique el estado del firewall, cierre el firewall, abra y cierre puertos, etc. en Linux .
3.3.2.2 Pregunta 2
- Los problemas después de abrir el puerto son los siguientes, descripción del problema:
WARN [Producer clientId=console-producer] Connection to node -1 (/XXX:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
- Resuelva el problema:
aquí hay que reiniciar el servicio, reiniciar Kafka y el problema se resolverá. No sé cuál es el problema. En resumen, ¡reiniciar puede resolver el 99% de los problemas! ! !
3.4 Recibir mensajes
3.4.1 Recibir demostración de mensaje
- como sigue:
./kafka-console-consumer.sh --bootstrap-server 外网IP或内网IP:9092 --topic susu-topic --from-beginning
3.4.2 Consejos para recibir mensajes
- como sigue:
- Método de consumo 1:consumir desde cero
./kafka-console-consumer.sh --bootstrap-server IP:9092 --topic susu-topic --from-beginning
- Método de consumo 2: comenzar a consumir desde el desplazamiento + 1 del último mensaje
./kafka-console-consumer.sh --bootstrap-server IP:9092 --topic susu-topic
- Método de consumo 1:consumir desde cero
- detalles de la siguiente manera:
3.5 Ver zk
- como sigue:
4. Resumen
4.1 Conceptos básicos de Kafka
- Kafka es una cola de mensajes que se utiliza principalmente para procesar colas de mensajes con una gran cantidad de datos y generalmente se utiliza para el procesamiento de registros. Dado que es una cola de mensajes, Kafka también tiene las características correspondientes de la cola de mensajes.
- Al igual que otros MQ, Kafka también tiene su propia infraestructura, que incluye principalmente Productor, Broker de clúster de Kafka, Consumidor y mensaje de registro Zookeeper.
- Tema : El tema, un concepto virtual que consta de 1 a varias particiones, puede entenderse como una cola, y tanto los productores como los consumidores están orientados a un tema.
- Partición : partición, la unidad de almacenamiento de mensajes real. Para lograr escalabilidad, un tema muy grande se puede distribuir a varios corredores y un tema se puede dividir en varias particiones, cada partición es una cola ordenada (las particiones están ordenadas y no se puede garantizar el orden global).
- Productor : Productor de mensajes, el rol que publica mensajes en Kafka.
- Consumidor : Consumidor de mensajes, un cliente que extrae mensajes de Kafka para su consumo.
- Broker : Broker, un servidor Kafka es un Broker, un clúster consta de varios Brokers y un Broker puede acomodar varios temas.
4.2 Comandos comunes
4.2.1 Comandos básicos de uso común
- Comando de inicio:
./kafka-server-start.sh ../config/server.properties &
- Comando de parada:
./kafka-server-stop.sh
- Lugar
4.2.2 Comandos sencillos y prácticos
- Crear tema
# 创建topic ./kafka-topics.sh --create --zookeeper zookeeper的IP:2181 --replication-factor 1 --partitions 1 --topic susu-topic
- Ver información del tema creado
# 查看已经创建的topic信息 ./kafka-topics.sh -list --zookeeper zookeeper的IP:2181
- Enviar un mensaje
./kafka-console-producer.sh --broker-list 内网IP:9092 --topic susu-topic 或者 ./kafka-console-producer.sh --broker-list 公网IP:9092 --topic susu-topic
- recibir mensajes
./kafka-console-consumer.sh --bootstrap-server 外网IP或内网IP:9092 --topic susu-topic --from-beginning
4.3 Registro de datos
- Verifique el registro de datos, la ruta de almacenamiento y vea qué ruta está configurada en el archivo de configuración
log.dirs
, de la siguiente manera:
4.4 Diagrama de estructura
- como sigue: