¿Por qué Apache Kafka es tan rápido?

Apache Kafka es una conocida plataforma de procesamiento de flujo de código abierto que tiene como objetivo proporcionar una plataforma de alto rendimiento, baja latencia y tolerante a fallas que es capaz de manejar la entrada de datos en tiempo real. 

Kafka cluster

Entonces, ¿qué es lo que convierte a Apache Kafka en la plataforma preferida cuando se trata de procesamiento de datos en tiempo real? Además de todas las demás ventajas que ofrece Kafka, la velocidad es una de las más importantes. Veamos cómo se construye Kafka para ser tan rápido.

1. E/S de baja latencia: hay dos lugares posibles que se pueden usar para almacenar y almacenar en caché los datos: memoria de acceso aleatorio (RAM) y disco .

  • Una forma ortodoxa de lograr una baja latencia al entregar mensajes es usar la memoria RAM. Se prefiere sobre el disco porque los discos tienen un alto tiempo de búsqueda, lo que los hace más lentos.
  • La desventaja de este enfoque es que puede ser costoso usar la RAM cuando los datos que fluyen a través de su sistema son de alrededor de 10 a 500 GB por segundo o incluso más.

Por lo tanto, Kafka se basa en el sistema de archivos para el almacenamiento y el almacenamiento en caché de los mensajes. Aunque utiliza el enfoque de disco y no el enfoque de RAM, ¡se las arregla para lograr una baja latencia! Quizás se pregunte cómo es esto posible, dado el alto tiempo de búsqueda. Vamos a averiguar.

2. Kafka evita el tiempo de búsqueda : ¡Sí! Kafka evita inteligentemente el tiempo de búsqueda mediante el uso de un concepto llamado E/S secuencial .

  • Utiliza una estructura de datos llamada ‘registro’ que es una secuencia de registros de solo agregar, ordenados por tiempo. El registro es básicamente una cola y el productor puede agregarlo al final y los suscriptores pueden procesar los mensajes por su cuenta manteniendo punteros.
  • El primer registro publicado obtiene un desplazamiento de 0, el segundo obtiene un desplazamiento de 1 y así sucesivamente.
  • Los consumidores consumen los datos accediendo a la posición especificada por un desplazamiento. Los consumidores guardan su posición en un registro periódicamente.
  • Esto también convierte a Kafka en un sistema tolerante a fallas, ya que otros consumidores pueden usar las compensaciones almacenadas para leer los nuevos registros en caso de que falle la instancia actual del consumidor. Este enfoque elimina la necesidad de realizar búsquedas en el disco, ya que los datos están presentes de manera secuencial, como se muestra a continuación:
    Kafka producers and consumers approach

3. Principio de copia cero: la forma más común de enviar datos a través de una red requiere múltiples cambios de contexto entre el modo Kernel y el modo Usuario, lo que resulta en el consumo de ancho de banda de memoria y ciclos de CPU. El principio de copia cero tiene como objetivo reducir esto solicitando al kernel que mueva los datos directamente al socket de respuesta en lugar de moverlos a través de la aplicación. La velocidad de Kafka mejora enormemente con la implementación del principio de copia cero.

4. Estructura de datos óptima: árbol frente a cola: el árbol parece ser la estructura de datos preferida cuando se trata de almacenamiento de datos. La mayoría de las bases de datos modernas utilizan alguna forma de estructura de datos de árbol. P.ej. MongoDB usa BTree.

  • Kafka, por otro lado, no es una base de datos sino un sistema de mensajería y, por lo tanto, experimenta más operaciones de lectura/escritura en comparación con una base de datos.
  • El uso de un árbol para esto puede conducir a E/S aleatorias, lo que eventualmente resulta en una búsqueda de disco, lo cual es catastrófico en términos de rendimiento.

Por lo tanto, utiliza una cola ya que todos los datos se agregan al final y las lecturas son muy simples mediante el uso de punteros. Estas operaciones son O(1), lo que confirma la eficiencia de la estructura de datos de la cola para Kafka.

5. Escalado horizontal: Kafka tiene la capacidad de tener múltiples particiones para un solo tema que se puede distribuir en miles de máquinas. Esto le permite mantener el alto rendimiento y proporcionar baja latencia.

6. Compresión y procesamiento por lotes de datos: Kafka procesa los datos en lotes, lo que ayuda a reducir las llamadas de red y convierte la mayoría de las escrituras aleatorias en secuenciales. Es más eficiente comprimir un lote de datos que comprimir mensajes individuales.

Por lo tanto, Kafka comprime un lote de mensajes y los envía al servidor donde se escriben en la forma comprimida. Se descomprimen cuando los consume el suscriptor. Los protocolos de compresión GZIP y Snappy son compatibles con Kafka.

Publicación traducida automáticamente

Artículo escrito por preritpathak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *