Toda empresa funciona con datos. Recibimos información, la analizamos, la manipulamos y creamos más como salida. Cada aplicación crea datos, ya sean mensajes de registro, métricas, actividad del usuario, mensajes salientes u otra cosa. Cada byte de datos tiene un historia para contar, algo de importancia que informará lo siguiente que se debe hacer. Para saber qué es eso, necesitamos obtener los datos desde donde se crean hasta donde se pueden analizar. Vemos esto todos los días en sitios web como Amazon, donde nuestros clics en elementos que nos interesan se convierten en recomendaciones que se nos muestran un poco más tarde.
Cuanto más rápido podamos hacer esto, más ágiles y receptivas podrán ser nuestras organizaciones.
Cuanto menos esfuerzo dediquemos a mover los datos, más podremos concentrarnos en el negocio principal en cuestión. Es por eso que la canalización es un componente crítico en la empresa basada en datos. La forma en que movemos los datos se vuelve casi tan importante como los datos mismos.
Antes de discutir los detalles de Apache Kafka, es importante que comprendamos el concepto de mensajería de publicación/suscripción y por qué es importante. La mensajería de publicación/suscripción es un patrón que se caracteriza porque el remitente (editor) de un dato (mensaje) no lo dirige específicamente a un receptor. En cambio, el editor clasifica el mensaje de alguna manera y ese receptor (suscriptor) se suscribe para recibir ciertas clases de mensajes. Los sistemas Pub/Sub suelen tener un intermediario, un punto central donde se publican los mensajes, para facilitar esto.
Apache Kafka es un sistema de mensajería de publicación/suscripción. A menudo se describe como un "registro de confirmación distribuido" o, más recientemente, como una "plataforma de distribución de transmisión". Un sistema de archivos o un registro de confirmación de la base de datos está diseñado para proporcionar un registro duradero de todas las transacciones, de modo que se puedan reproducir para construir de manera consistente el estado de un sistema. Del mismo modo, los datos de Kafka se almacenan de forma duradera, en orden, y se pueden leer de forma determinista. Además, los datos se pueden distribuir dentro del sistema para proporcionar protecciones adicionales contra fallas, así como oportunidades significativas para escalar el rendimiento.
La unidad de datos dentro de Kafka se llama mensaje. Si lo comparamos con una base de datos, puede pensar en esto como similar a una fila o un registro. Un mensaje es simplemente una matriz de bytes en lo que respecta a Kafka, por lo que los datos que contiene no tienen un formato o significado específico para Kafka. Un mensaje puede tener un bit opcional de metadatos, que se conoce como clave. La clave también es una matriz de bytes y, al igual que con el mensaje, no tiene un significado específico para Kafka. Las claves se utilizan cuando los mensajes deben escribirse en particiones de una manera más controlada. El esquema más simple de este tipo es generar un hash consistente de la clave y luego seleccionar el número de partición para ese mensaje tomando el resultado del módulo hash, el número total de particiones en el tema. Esto asegura que los mensajes con la misma clave siempre se escriban en la misma partición.
Para mayor eficiencia, los mensajes se escriben en Kafka en lotes. Un lote es solo una colección de mensajes, todos los cuales se producen en el mismo tema y partición. Un viaje de ida y vuelta individual a través de la red para cada mensaje daría como resultado un exceso head, y la recopilación de mensajes en un lote reduce esto. Por supuesto, esta es una compensación entre latencia y rendimiento: cuanto más grandes son los lotes, más mensajes se pueden manejar por unidad de tiempo, pero más tiempo tarda un mensaje individual en propagarse. Los lotes también suelen estar comprimidos, lo que proporciona una transferencia y almacenamiento de datos más eficientes a costa de cierta potencia de procesamiento.
Hasta acá por este post y vamos a seguir en próximos ...