Almacenamiento de Kafka (¿Por qué Kafka usa el disco como medio de almacenamiento?)

1. Descripción general de la estructura de almacenamiento

  • Cada partición (carpeta) es equivalente a un archivo enorme que se distribuye uniformemente en varios archivos de datos de segmento (segmento) de igual tamaño. Sin embargo, el número de mensajes en cada archivo de segmento no es necesariamente igual, esta característica facilita la eliminación rápida de archivos de segmento antiguos. (Por defecto, el tamaño de cada archivo es 1G)
  • Cada partiton solo necesita apoyar la lectura y escritura secuencial. El ciclo de vida del archivo de segmento está determinado por los parámetros de configuración del servidor.

1. Estructura de almacenamiento de archivos de segmentos en partiton

Composición del archivo de segmentos: consta de 2 partes. Son archivo de índice y archivo de datos respectivamente Estos dos archivos se corresponden uno a uno y aparecen en pares Los sufijos ”.index”y sufijos “.log”respectivamente representan el segmentarchivo de índice y el archivo de datos .

Reglas de nomenclatura de archivos de segmento: el primer segmento de la partición global comienza desde 0, y el nombre de cada archivo de segmento puede ser el valor de compensación del último mensaje del archivo de segmento anterior.

El valor máximo es de 64 bits. La longitud de 19 dígitos se rellena con ceros.

itcast@Server-node:/mnt/d/kafka_2.12-2.2.1$ ll /tmp/kafka/log/heima-0/ 
total 20480 
drwxr-xr-x 1 itcast sudo 		512 Aug 29 09:38 ./ 
drwxrwxrwx 1 dayuan dayuan 		512 Aug 29 09:41 ../ 
-rw-r--r-- 1 itcast sudo 10485760 Aug 29 09:38 00000000000000000000.index 
-rw-r--r-- 1 itcast sudo 			0 Aug 29 09:38 00000000000000000000.log 
-rw-r--r-- 1 itcast sudo 10485756 Aug 29 09:38 00000000000000000000.timeindex 
-rw-r--r-- 1 itcast sudo 			8 Aug 29 09:38 leader-epoch-checkpoint 
itcast@Server-node:/mnt/d/kafka_2.12-2.2.1$

Dos, índice de registro

1. Segmentación de archivos de datos

Uno de los métodos de Kafka para resolver la eficiencia de las consultas es segmentar archivos de datos. Por ejemplo, hay 100 mensajes y su desplazamiento es de 0 a 99. Suponga que el archivo de datos está dividido en 5 segmentos, el primer segmento es 0-19, el segundo segmento es 20-39, y así sucesivamente, cada segmento se coloca en un archivo de datos separado y el archivo de datos recibe el nombre del desplazamiento más pequeño del segmento. De esta manera, al buscar un mensaje con un desplazamiento específico, la búsqueda binaria se puede utilizar para localizar en qué segmento se encuentra el mensaje.

2. Índice de compensación

La segmentación del archivo de datos hace posible encontrar el mensaje correspondiente al desplazamiento en un archivo de datos más pequeño, pero esto aún requiere un escaneo secuencial para encontrar el mensaje correspondiente al desplazamiento. Para mejorar aún más la eficiencia de la búsqueda, Kafka crea un archivo de índice para cada archivo de datos segmentado. El nombre del archivo es el mismo que el nombre del archivo de datos, pero la extensión del archivo es .index.

Por ejemplo: para encontrar un mensaje con un desplazamiento absoluto de 7:

La primera es utilizar la búsqueda binaria para determinar en qué segmento de registro se encuentra, que naturalmente se encuentra en el primer segmento. Abra el archivo de índice de este segmento y también utilice la búsqueda binaria para encontrar el desplazamiento más grande entre las entradas de índice cuyo desplazamiento es menor o igual que el desplazamiento especificado. Naturalmente, lo que buscamos es el índice con desplazamiento 6. A través del archivo de índice, sabemos que la posición del Mensaje con desplazamiento 6 en el archivo de datos es 9807.

Abra el archivo de datos y escanee secuencialmente desde el lugar en 9807 hasta que se encuentre el mensaje con el desplazamiento 7.

Este conjunto de mecanismos se basa en el desplazamiento ordenado. El archivo de índice se asigna a la memoria, por lo que la velocidad de búsqueda sigue siendo muy rápida.

Word, Kafka utiliza la partición de almacenamiento de mensajes (Partition) , el segmento (logsegment) y el índice disperso estos medios para lograr una alta eficiencia.

Tres, limpieza de troncos

1. Eliminación de registros

El administrador de registros de Kafka permite estrategias de eliminación personalizadas . La estrategia actual es borrar los logs cuyo tiempo de modificación es de N días atrás (borrar por tiempo) También se puede utilizar otra estrategia: la estrategia de retener los últimos datos NGB (borrar por tamaño). Para evitar bloquear la operación de lectura durante la eliminación, se adopta una implementación de copia en escritura . Cuando la operación de eliminación está en curso, la función de búsqueda binaria de la operación de lectura se realiza en una copia instantánea estática, que es similar a Java CopyOnWriteArrayList. Pensamiento de eliminación del registro de consumo de Kafka: Kafka divide un archivo de partición grande en un tema en varios segmentos de archivo pequeños. A través de varios segmentos de archivo pequeños, es fácil borrar o eliminar periódicamente los archivos que se han consumido para reducir el uso del disco .

log.cleanup.policy=delete 启用删除策略 
直接删除,删除后的消息不可恢复。可配置以下两个策略: 
清理超过指定时间清理: 
log.retention.hours=16 
超过指定大小后,删除旧的消息: 
log.retention.bytes=1073741824

2. Compresión de registros

Comprime los datos y conserva solo los datos de la última versión de cada clave. Primero, configure el log.cleaner.enable=truelimpiador habilitado en la configuración del corredor , que está deshabilitado de forma predeterminada. Establezca la log.cleanup.policy=compactestrategia de habilitación de compresión en la configuración del tema .

El offset comprimido puede ser discontinuo. Por ejemplo, no hay 5 y 7 en la figura anterior, porque los mensajes de estos offsets se han fusionado. Cuando se consumen mensajes de estos offsets, se obtendrán los mensajes correspondientes a los offsets mayores que este offset. Por ejemplo, al intentar obtener un mensaje con un desplazamiento de 5, en realidad obtendrá un mensaje con un desplazamiento de 6 y comenzará el consumo desde esta posición.

Esta estrategia solo es adecuada para escenarios especiales. Por ejemplo, la clave del mensaje es el ID de usuario y el cuerpo del mensaje es la información del usuario. A través de esta estrategia de compresión, la información más reciente de todos los usuarios se guarda en todo el conjunto de mensajes.

La estrategia de compresión admite la eliminación. Cuando la última versión de una clave no tiene contenido, la clave se eliminará, lo que también se ajusta a la lógica anterior.

Cuarto, las ventajas del almacenamiento en disco

Cuando se diseñó Kafka, utilizaba un método de adición de archivos para escribir mensajes, es decir, los mensajes nuevos solo se pueden agregar al final del archivo de registro y no se permite modificar los mensajes que se han escrito. Este método es una escritura secuencial típica Operación de juicio, por lo que incluso si Kafka usa el disco como medio de almacenamiento, el rendimiento que se puede lograr es muy impresionante.

Kafka utiliza una gran cantidad de cachés de página , que también es uno de los factores importantes para que Kafka logre un alto rendimiento .

Además de la adición de secuencias de mensajes , el almacenamiento en caché de páginas y otras tecnologías, Kafka también utiliza la tecnología de copia cero para mejorar aún más el rendimiento. La " tecnología de copia cero " solo necesita copiar los datos del archivo de disco al caché de la página una vez, y luego enviar los datos del caché de la página directamente a la red (cuando se envía a diferentes suscriptores, se puede usar el mismo caché de página), evitando Repita la operación de copia. Si hay 10 consumidores, con el método tradicional, el número de copias de datos es 4 * 10 = 40 veces, mientras que el uso de la "tecnología de copia cero" solo necesita 1 + 10 = 11 veces, una vez se copia del disco a la caché de la página, 10 veces significa 10 consumidores cada uno lee la caché de la página una vez.

para resumir

En este capítulo se describe principalmente los puntos de conocimiento relacionadas con el almacenamiento en Kafka, incluyendo propia de Kafka formato de registro , el índice de registro , limpieza de registro, etc., y también implica el conocimiento del almacenamiento físico subyacente. Mediante el estudio de este capítulo, puede tener una comprensión más profunda del mecanismo central de Kafka.


Gestión de particiones Kafka (elección de copia de prioridad, redistribución de particiones) los estudiantes interesados ​​pueden hacer clic en el enlace para leer mi último artículo, que también contiene el método para obtener este artículo.

Supongo que te gusta

Origin blog.csdn.net/Java_Caiyo/article/details/112794377
Recomendado
Clasificación