¿Cómo logra Kafka cientos de miles de escrituras simultáneas?

Apertura

Cuando conocí por primera vez kafka, hablé sobre los beneficios de usar MQ (cola de mensajes) para diseñar el sistema: desacoplamiento comercial, reducción de picos de tráfico y expansión flexible.

Hay muchos MQ populares, porque nuestra empresa eligió utilizar Kafka en la selección de tecnología, por lo que he recopilado un conocimiento introductorio sobre Kafka. A través de la selección de tecnología, hemos comparado el MQ convencional en la industria. La mayor ventaja de Kakfa es su alto rendimiento  .

Kafka es un middleware de mensajería de alto rendimiento, baja latencia, alta concurrencia y alto rendimiento, que se utiliza de forma muy generalizada en el campo de los macrodatos. Un clúster de Kafka bien configurado puede incluso lograr escrituras simultáneas ultra altas de cientos de miles o millones de escrituras por segundo.

Entonces, ¿cómo logra Kafka un rendimiento y un rendimiento tan altos? Después de comenzar, echemos un vistazo más de cerca a los principios de diseño de arquitectura de Kafka. Dominar estos principios tendrá una ventaja en las entrevistas por Internet.

Resistencia

Kafka se basa en el sistema de archivos para el almacenamiento de mensajes y el almacenamiento en caché. Cada vez que se reciben datos, se escribirán en el disco. La impresión general de "velocidad de disco lenta" hace que la gente dude de que la arquitectura de persistencia pueda proporcionar un rendimiento sólido.

De hecho, la velocidad de los discos es mucho más lenta y rápida de lo que la gente esperaba, dependiendo de cómo la gente use los discos. Y una estructura de disco correctamente diseñada puede ser, por lo general, tan rápida como una red.

 

 

A través de la comparación de la figura anterior, podemos ver que el acceso secuencial al disco es en realidad más rápido que el acceso aleatorio a la memoria en algunos casos.De hecho, Kafka usa esta ventaja para lograr escrituras en disco de alto rendimiento.

 

Tecnología de almacenamiento en caché de página + escritura secuencial en disco

Para garantizar el rendimiento de escritura en disco, Kafka primero implementa la escritura de archivos en función de la caché de página del sistema operativo.

El propio sistema operativo tiene una capa de caché, llamada page cache, que es una caché en la memoria, también podemos llamarla os cache, que significa la caché administrada por el propio sistema operativo.

Cuando escribe un archivo de disco, puede escribirlo directamente en la caché del sistema operativo, es decir, simplemente escribirlo en la memoria. Luego, el sistema operativo decide cuándo vaciar los datos de la caché del sistema operativo en el disco.

 

 

A través de la figura anterior, se puede mejorar mucho el rendimiento de escritura del archivo de disco, de hecho, este método es equivalente a escribir en la memoria, no en el disco.

Escritura secuencial en disco

Además, hay un punto muy importante. Cuando Kafka escribe datos, usa el modo de escritura secuencial de disco para colocar el disco, es decir, solo agrega los datos al final del archivo (agregar), en lugar de en una ubicación aleatoria en el archivo .cambiar los datos.

Para los discos duros mecánicos ordinarios, si escribe al azar, el rendimiento es realmente muy bajo, lo que implica el problema del direccionamiento del disco. Pero si simplemente agrega el final del archivo para escribir datos de manera secuencial, entonces el rendimiento de esta escritura secuencial en disco puede ser básicamente el mismo que el rendimiento de la escritura en la propia memoria.

Para resumir:  Kafka se basa en la tecnología de almacenamiento en caché de páginas + tecnología de escritura secuencial en disco para lograr un rendimiento ultra alto en la escritura de datos.
Por lo tanto, para garantizar que el punto central de la escritura de decenas de miles o incluso cientos de miles de datos por segundo sea mejorar el rendimiento de cada escritura de datos tanto como sea posible, de modo que se puedan escribir más datos por unidad de tiempo y se pueda generar el rendimiento. mejorado.

Tecnología de copia cero (copia cero)

Después de terminar de escribir este artículo, hablemos de consumo.

Todos deben saber que a menudo consumimos datos de Kafka, por lo que cuando consumimos datos, en realidad leemos un dato del archivo de disco de Kafka y lo enviamos a los consumidores posteriores, como se muestra en la siguiente figura:

 

 

Si Kafka lee datos del disco y los envía a los consumidores posteriores de la manera anterior, el proceso aproximado es:

  1. Primero vea si los datos que se van a leer están en la caché del sistema operativo, si no, lea los datos del archivo de disco y colóquelos en la caché del sistema operativo
  2. Luego copie los datos del caché del sistema operativo al caché del proceso de la aplicación, luego copie los datos del caché del proceso de la aplicación al caché de Socket a nivel del sistema operativo y finalmente extraiga los datos del caché de Soket y enviarlo a la tarjeta de red, y finalmente enviarlo a los consumidores intermedios

Todo el proceso es el siguiente:

 

 

Como se puede ver en la figura anterior, hay dos copias innecesarias en todo este proceso.
Una es de la caché del sistema operativo a la caché del proceso de la aplicación, y luego de la caché de la aplicación a la caché de Socket de El sistema operativo.
Y para hacer estas dos copias, se produjeron varios cambios de contexto en el medio, durante un tiempo la aplicación se estaba ejecutando y luego el contexto se cambiaba al sistema operativo para su ejecución.
Por lo tanto, leer datos de esta manera consume rendimiento.

Para resolver este problema, Kafka introduce la tecnología de copia cero al leer datos.

En otras palabras, los datos en la caché del sistema operativo se envían directamente a la tarjeta de red y luego se transmiten a los consumidores descendentes. El paso de copiar datos se omite dos veces en el medio. Solo se copiará un descriptor en la caché de Socket, y no se copiará Los datos se almacenan en la caché de Socket.

 

 

Pruebe este exquisito proceso
mediante la tecnología de copia cero, no hay necesidad de copiar la caché del sistema operativo en la caché de datos a la aplicación y luego copie la aplicación de la caché a la caché Socket, se omiten dos copias, lo que se denomina copia cero.
La caché de socket es solo el descriptor de los datos de copia, y luego los datos se envían directamente desde la caché del sistema operativo a la tarjeta de red. Este proceso mejora en gran medida el rendimiento de lectura de datos de archivos durante el consumo de datos.
Y todos notarán que al leer datos del disco, primero verificará si hay alguno en la memoria caché del sistema operativo. Si es así, los datos se leen directamente desde la memoria.
Si el clúster de Kafka está bien ajustado, encontrará que una gran cantidad de datos se escribe directamente en la caché del sistema operativo, y luego, cuando se leen los datos, también se leen desde la caché del sistema operativo.
Es equivalente a que Kafka proporcione escritura y lectura de datos completamente basada en la memoria, por lo que el rendimiento general será extremadamente alto.

para resumir

Al aprender el excelente diseño de Kafka, comprendemos el uso de la tecnología de almacenamiento en caché de página subyacente de Kafka, la idea de escritura secuencial en disco y el uso de tecnología de copia cero, de modo que Kafka pueda tener un rendimiento tan alto y lograr un rendimiento de cientos de miles por segundo la cantidad.

Glosario

  • Rendimiento (TPS): El rendimiento se refiere a la cantidad de datos transmitidos con éxito por unidad de tiempo (medidos en bits, bytes, paquetes, etc.) para una red, dispositivo, puerto, circuito virtual u otra instalación.

Supongo que te gusta

Origin blog.csdn.net/qq_17010193/article/details/114560250
Recomendado
Clasificación