Explicación detallada de los archivos de registro de mensajes en Kafka: clasificación de mensajes de temas, partición de partición, segmentación de segmentos, archivo de índice de compensación de compensación

1. Introducción a Kafka

Kafka es un sistema de mensajería de publicación y suscripción distribuido de alto rendimiento que se ejecuta en un clúster basado en la coordinación del cuidador del zoológico, admite particiones y múltiples réplicas y tiene muy buenas capacidades de equilibrio de carga, rendimiento de procesamiento y tolerancia a fallas. Kafka utiliza un modelo de publicación / suscripción: el productor del mensaje envía el mensaje al centro de mensajes de Kafka (corredor) y luego el consumidor lee el mensaje desde el centro. Su arquitectura lógica se muestra en la siguiente figura:
Insertar descripción de la imagen aquí
Broker es un nodo de servidor en el clúster de Kafka. Cada Broker es un servidor independiente que recibe mensajes de los productores y los almacena en la cola de mensajes. Al mismo tiempo, también maneja las solicitudes de los consumidores y les envía mensajes. El Broker únicamente almacena mensajes y notifica a los Consumidores registrados en el sistema. El consumidor extrae activamente mensajes del intermediario basándose en la supervisión y la configuración.

ZooKeeper se utiliza para administrar la configuración, el estado y la información de metadatos del clúster para garantizar el funcionamiento normal del sistema de mensajería distribuida.

2. Archivos de registro de mensajes en Kafka

1. Clasificación de mensajes

La unidad de datos de Kafka se llama mensaje, y un mensaje puede considerarse como una "fila de datos" o un "registro" en la base de datos. Kafka clasifica, organiza y gestiona mensajes según temas, y cada tema es independiente entre sí y no se afecta entre sí. Los temas son especificados por el sistema empresarial para distinguir los tipos de mensajes. Los productores y consumidores están conectados a través de temas. Los mensajes producidos por el Productor se colocan en un tema y los mensajes del tema son consumidos por el Consumidor o Grupo de Consumidores designado.

2. Almacenamiento particionado de mensajes.

Físicamente, los mensajes de diferentes temas se almacenan por separado. Los mensajes de cada tema se pueden dividir en particiones lógicas de múltiples particiones para su almacenamiento. Cada partición puede entenderse como un registro de mensajes independiente, que solo puede almacenar mensajes del mismo tema. pertenece a este tema El almacenamiento lógico más detallado. En Kafka, cada partición corresponde a un directorio de archivos independiente. La regla de nomenclatura del directorio de archivos es: nombre del tema + número de serie de la partición.

Cuando el productor envía mensajes bajo el mismo tema, Kafka asignará los mensajes a la partición correspondiente del tema de acuerdo con la estrategia de partición (como asignación de rango, asignación por turnos, asignación fija). El tema es completamente diferente.

3.El desplazamiento del identificador de identidad del mensaje.

En una única partición, los mensajes almacenados están ordenados. Cuando cada mensaje se agrega a la partición, se asigna un desplazamiento único de forma secuencial e incremental en la unidad de partición para distinguir cada mensaje diferente en la partición. El desplazamiento también se denomina desplazamiento. El número secuencial es equivalente al ID del mensaje. La longitud es de 20 dígitos. Si hay menos de 20 dígitos, se agrega 0. Es el número único del mensaje en esta partición. Kafka garantiza que los mensajes en la misma partición están ordenados, pero el mismo tema Los mensajes en diferentes particiones están desordenados.

4. Segmentación del registro de mensajes.

Para evitar que la adición continua de registros de mensajes haga que el archivo sea demasiado grande y resulte en una baja eficiencia de recuperación, una partición se divide en múltiples segmentos para organizar los datos. En el disco, cada segmento consta de un archivo de registro de mensajes que almacena mensajes y dos archivos de índice. Compuesto, cada archivo de registro contiene uno o más mensajes. La regla de nomenclatura para cada archivo de registro es "{baseOffset}.log", donde baseOffset es el desplazamiento del primer mensaje en el archivo de registro.

En un segmento, el registro de mensajes se escribe adicionalmente. Si el archivo de registro o el archivo de índice excede un cierto tamaño o el tiempo actual de creación del archivo de tiempo es mayor que el intervalo de tiempo especificado (las condiciones anteriores se establecen mediante parámetros), el registro dividir archivos y archivos de índice para generar un nuevo segmento. El nuevo segmento utiliza el último desplazamiento como nombre. El número de secuencia inicial del primer mensaje almacenado en el primer segmento es 0, por lo que el nombre del archivo se denomina con una longitud de 20 bits de 0.

5. La relación entre tema, partición y segmento.

El siguiente es el diagrama de relación lógica entre el tema, la partición, el segmento y los archivos de registro:
Insertar descripción de la imagen aquí

En la figura anterior, el desplazamiento del primer mensaje almacenado en el Segmento0 de la partición0 es 0, el desplazamiento del último mensaje es 123456788, el desplazamiento del mensaje inicial del segundo segmento es 123456789 y el desplazamiento del mensaje inicial del El último segmento es xxxxxxxxxxxxxxxxxxxxx.

3. Archivo de índice del archivo de registro de mensajes en Kafka

1. Archivo de índice Kafka

Los archivos de registro de Kafka suelen ser muy grandes y cada mensaje no tiene una longitud fija. La lectura y el procesamiento pueden consumir mucho tiempo y recursos. Para mejorar la velocidad de lectura y procesamiento, Kafka crea dos archivos de índice para cada archivo de registro, respectivamente. Son el archivo de índice de desplazamiento (sufijo de archivo ".index") y el archivo de índice de marca de tiempo (sufijo de archivo ".timeindex"). Ambos archivos de índice son índices dispersos, lo que no garantiza que cada mensaje tenga una entrada de índice correspondiente en el archivo de índice. Por lo tanto, el tamaño del archivo de índice se puede reducir considerablemente, lo que permite la carga en caché del archivo de índice y mejora la velocidad de consulta.

Los archivos de registro y los archivos de índice de diferentes versiones de Kafka son algo diferentes, pero la información básica registrada es similar y los mecanismos de implementación de los archivos de registro y los archivos de índice en diferentes versiones son similares.

2. archivo de índice de compensación

El archivo de índice de compensación ".index" se utiliza para establecer una relación de mapeo entre la compensación del mensaje y la dirección física del mensaje almacenado en el archivo de registro. Cuando la longitud del mensaje escrito excede una cierta cantidad (especificada por el parámetro) , el desplazamiento Al cambiar el archivo de índice se agregará una entrada de índice de desplazamiento, que incluye el desplazamiento del mensaje y su ubicación en el archivo físico.

Dado que el nombre del archivo de registro tiene como prefijo el desplazamiento base del mensaje almacenado, cuando el consumidor quiere leer el mensaje, primero obtiene la lista de nombres del archivo de registro en la partición y la clasifica, y utiliza el método de dicotomía para encontrar el registro correspondiente. archivo de acuerdo con el desplazamiento del mensaje (se supone que es x). Después de encontrar el archivo de registro correspondiente, puede usar la búsqueda binaria en el archivo de índice de desplazamiento correspondiente para ubicar rápidamente la entrada de índice más grande que no sea mayor que x (suponiendo que el desplazamiento es y), y obtiene la posición p donde se almacena y en el archivo de datos de registro. , escaneando el archivo de registro secuencialmente comenzando desde p hasta que se encuentre el mensaje con el desplazamiento x.

3.archivo de índice de marca de tiempo

El archivo ".timeindex" almacena la relación de mapeo entre la marca de tiempo del mensaje y el desplazamiento del mensaje, fragmenta el mensaje de acuerdo con la marca de tiempo y registra la marca de tiempo del último mensaje en cada fragmento y el desplazamiento correspondiente. para una búsqueda rápida de mensajes en orden cronológico. Cuando la longitud del mensaje escrito por Kafka excede una cierta cantidad (especificada por el parámetro) o la marca de tiempo del nuevo mensaje y la marca de tiempo de la entrada de índice anterior exceden una cierta longitud (especificada por el parámetro), se crea una entrada de índice de marca de tiempo. agregado al archivo de índice de marca de tiempo.

Cuando necesite consultar mensajes de registro con una marca de tiempo específica, use el método de dicotomía para encontrar primero el elemento de índice x más grande en el archivo de índice de marca de tiempo que no sea mayor que la marca de tiempo de destino, obtenga el desplazamiento y correspondiente al elemento de índice y luego consulte el desplazamiento basado en y Indexe el archivo para leer la ubicación del archivo de registro p donde se encuentra el mensaje.

4. Resumen del archivo de índice

El desplazamiento de mensajes en la misma partición Kafka aumenta en orden. Para mejorar el rendimiento, los archivos de registro en la misma partición se dividen en varios segmentos. Cada segmento guarda una cierta cantidad de datos de mensajes y cada segmento tiene archivos de índice de desplazamiento y un índice de marca de tiempo. archivos, estos dos tipos de archivos de índice son índices de coeficientes.

El archivo de índice de compensación almacena la relación de mapeo entre el desplazamiento del mensaje y la ubicación real del archivo de almacenamiento, que se utiliza para acceder al mensaje mediante el desplazamiento del mensaje. El archivo de índice de marca de tiempo almacena la relación de mapeo entre la marca de tiempo y el desplazamiento, que se utiliza para acceder al mensaje por tiempo. Cuando se usa, el índice de marca de tiempo debe combinarse con el índice de compensación para acceder realmente a los datos.

Dado que el archivo de índice es un índice escaso, en la mayoría de los casos solo se puede encontrar la ubicación aproximada de los datos del mensaje a través del índice. Al final, es necesario leer los mensajes secuencialmente comenzando desde la ubicación aproximada para encontrar el mensaje que está Buscando. Dado que el desplazamiento del mensaje se incrementa y se escribe secuencialmente en el archivo de registro, el registro de mensajes se divide y segmenta, y el archivo de índice es pequeño y se puede almacenar en caché, la eficiencia general de este mecanismo de indexación es bastante alta.

5. Resumen

Este artículo presenta en detalle los conceptos lógicos de los archivos de registro de mensajes, particiones de almacenamiento físico, segmentos de archivos de registro y archivos de índice de Kafka, así como sus relaciones relacionadas, y también presenta en detalle la estructura lógica y el mecanismo de indexación de los archivos de índice de desplazamiento y la marca de tiempo. archivos de índice. . Es útil comprender la clasificación de mensajes OPIC, la partición de partición, la segmentación de segmentos, el archivo de índice de compensación y otros conceptos relacionados.

6. Materiales de referencia

  1. La relación, diferencia y significado de la existencia entre tema, partición, corredor, grupo de consumidores y consumidor en Kafka.
  2. ¿Cómo localiza Kafka un mensaje mediante el desplazamiento?
  3. Mecanismo de sincronización de mensajes de almacenamiento de archivos Kafka.
  4. Cómo interpretar el mecanismo de indexación de Kafka
Escribir un blog no es fácil, por favor apoye :

Si has aprendido algo leyendo este artículo, dale me gusta, comenta y recógelo. ¡Gracias por tu apoyo!

Acerca de la columna paga de Lao Yuan

  1. La columna paga " https://blog.csdn.net/laoyuanpython/category_9607725.html Uso de PyQt para desarrollar aplicaciones Python de interfaz gráfica" presenta específicamente el tutorial básico del desarrollo de interfaz gráfica de PyQt basado en Python. El directorio del artículo correspondiente es " https: //blog.csdn" .net/LaoYuanPython/article/details/107580932 Uso de PyQt para desarrollar el directorio de columnas de la aplicación Python de la interfaz gráfica ";
  2. La columna paga " https://blog.csdn.net/laoyuanpython/category_10232926.html columna de desarrollo de audio y video moviepy " presenta en detalle los métodos relacionados con clases del procesamiento de síntesis de edición de audio y video moviepy y el uso de métodos relacionados para procesar escenas de edición y síntesis, artículos correspondientes El directorio es " https://blog.csdn.net/LaoYuanPython/article/details/107574583 directorio de artículos de la columna de desarrollo de audio y video moviepy ";
  3. La columna paga " https://blog.csdn.net/laoyuanpython/category_10581071.html Conjunto de problemas para principiantes de OpenCV-Python " es " https://blog.csdn.net/laoyuanpython/category_9979286.html Gráficos e imágenes de OpenCV-Python Procesamiento" "La columna adjunta es la reflexión personal del autor sobre algunos problemas encontrados al aprender el procesamiento de imágenes y gráficos de OpenCV-Python. La información relevante es básicamente el resultado de investigaciones repetidas por parte de viejos simios, que ayudarán a los principiantes de OpenCV-Python a aprender más profundamente. Para comprender OpenCV, el directorio de artículos correspondiente es " https://blog.csdn.net/LaoYuanPython/article/details/109713407 Directorio de columnas del conjunto de problemas para principiantes de OpenCV-Python "
  4. La columna paga " https://blog.csdn.net/laoyuanpython/category_10762553.html Getting Started with Python Crawler" presenta lo que necesita saber sobre el desarrollo de rastreadores desde la perspectiva de un desarrollador front-end de Internet novato, incluidos los conocimientos básicos. de comenzar con los rastreadores y rastrear Obtenga información de artículos CSDN, información de blogueros, como artículos, comentarios y otro contenido práctico.

Las dos primeras columnas son adecuadas para lectores novatos que tienen cierta base en Python pero no tienen conocimientos relevantes. Para la tercera columna, combine " https://blog.csdn.net/laoyuanpython/category_9979286.html Procesamiento de imágenes y gráficos OpenCV-Python "aprendiendo a usar.

Para los colegas que carecen de conocimientos básicos de Python, pueden aprender Python desde cero a través de la columna gratuita de Lao Yuan " https://blog.csdn.net/laoyuanpython/category_9831699.html Columna: Directorio de tutoriales básicos de Python ".

Los lectores que estén interesados ​​y dispuestos a apoyar a Lao Yuan pueden comprar la columna paga.

Lao Yuan Python, ¡aprende Python de Lao Yuan!

☞ ░ Vaya al directorio de blogs de LaoYuanPython https://blog.csdn.net/LaoYuanPython

Supongo que te gusta

Origin blog.csdn.net/LaoYuanPython/article/details/132911303
Recomendado
Clasificación