Introducción¶
Autor Olivera Lucas.¶
Apache Kafka® es una plataforma de transmisión de eventos. ¿Qué significa eso?¶
Kafka combina tres capacidades clave para que pueda implementar sus casos de uso para la transmisión de eventos de un extremo a otro con una única solución probada en batalla:
- Para publicar (escribir) y suscribirse a (leer) flujos de eventos, incluida la importación / exportación continua de sus datos desde otros sistemas.
- Para almacenar transmisiones de eventos de manera duradera y confiable durante el tiempo que desee.
- Para proceso de flujos de eventos a medida que ocurren o retrospectivamente.
Y toda esta funcionalidad se proporciona de manera distribuida, altamente escalable, elástica, tolerante a fallas y segura. Kafka se puede implementar en hardware bare-metal, máquinas virtuales y contenedores, tanto en las instalaciones como en la nube. Puede elegir entre la autogestión de sus entornos Kafka y el uso de servicios totalmente gestionados ofrecidos por una variedad de proveedores.
¿Cómo funciona Kafka en pocas palabras?¶
Kafka es un sistema distribuido que consta de servidores y clientes que se comunican a través de un protocolo de red TCP de alto rendimiento. Se puede implementar en hardware bare-metal, máquinas virtuales y contenedores en entornos locales y en la nube.
-
Servidores : Kafka se ejecuta como un clúster de uno o más servidores que pueden abarcar varios centros de datos o regiones de la nube. Algunos de estos servidores forman la capa de almacenamiento, denominados intermediarios. Otros servidores ejecutan Kafka Connect para importar y exportar datos continuamente como flujos de eventos para integrar Kafka con sus sistemas existentes, como bases de datos relacionales y otros clústeres de Kafka. Para permitirle implementar casos de uso de misión crítica, un clúster de Kafka es altamente escalable y tolerante a fallas: si alguno de sus servidores falla, los otros servidores se harán cargo de su trabajo para garantizar operaciones continuas sin pérdida de datos.
-
Clientes : le permiten escribir aplicaciones distribuidas y microservicios que leen, escriben y procesan flujos de eventos en paralelo, a escala y de manera tolerante a fallas, incluso en el caso de problemas de red o fallas de la máquina. Kafka incluye algunos de estos clientes, que se complementan con docenas de clientes proporcionados por la comunidad de Kafka: los clientes están disponibles para Java y Scala, incluida la biblioteca Kafka Streams de nivel superior , para Go, Python, C / C ++ y muchas otras programaciones. idiomas y API REST.
Conceptos y terminología principales¶
Un evento registra el hecho de que "algo sucedió" en el mundo o en su negocio. También se denomina registro o mensaje en la documentación. Cuando lee o escribe datos en Kafka, lo hace en forma de eventos. Conceptualmente, un evento tiene una clave, un valor, una marca de tiempo y encabezados de metadatos opcionales. Aquí hay un evento de ejemplo:
Clave de evento: "Alice"
Valor del evento: "Hizo un pago de $ 200 a Bob"
Marca de tiempo del evento: "25 de junio de 2020 a las 2:06 p.m."
Los productores son aquellas aplicaciones cliente que publican (escriben) eventos en Kafka, y los consumidores son aquellos que se suscriben (leen y procesan) estos eventos. En Kafka, los productores y los consumidores están completamente desacoplados y son agnósticos entre sí, lo que es un elemento de diseño clave para lograr la alta escalabilidad por la que Kafka es conocido. Por ejemplo, los productores nunca necesitan esperar a los consumidores. Kafka ofrece varias garantías , como la capacidad de procesar eventos exactamente una vez.
Los eventos se organizan y almacenan de forma duradera en topics . Muy simplificado, un topic es similar a una carpeta en un sistema de archivos, y los eventos son los archivos de esa carpeta. Un ejemplo de nombre de topic podría ser "pagos". Los topics en Kafka siempre son de múltiples productores y múltiples suscriptores: un topic puede tener cero, uno o muchos productores que escriban eventos en él, así como cero, uno o muchos consumidores que se suscriban a estos eventos. Los eventos de un topic se pueden leer con la frecuencia necesaria; a diferencia de los sistemas de mensajería tradicionales, los eventos no se eliminan después del consumo. En su lugar, defina durante cuánto tiempo Kafka debe retener sus eventos a través de una configuración por topic, después de lo cual se descartarán los eventos antiguos. El rendimiento de Kafka es efectivamente constante con respecto al tamaño de los datos, por lo que almacenar datos durante mucho tiempo está perfectamente bien.
Los topics están divididos, lo que significa que un topic se distribuye en varios "storage" ubicados en diferentes brokers de Kafka. Esta ubicación distribuida de sus datos es muy importante para la escalabilidad porque permite que las aplicaciones cliente lean y escriban los datos desde / hacia muchos corredores al mismo tiempo. Cuando se publica un nuevo evento en un topic, en realidad se agrega a una de las particiones del topic. Los eventos con la misma clave de evento (por ejemplo, un ID de cliente o vehículo) se escriben en la misma partición, y Kafka garantiza que cualquier consumidor de una partición de topic determinada siempre leerá los eventos de esa partición exactamente en el mismo orden en que fueron escritos.
Figura: Este topic de ejemplo tiene cuatro particiones P1 – P4. Dos clientes productores diferentes están publicando, independientemente entre sí, nuevos eventos en el topic escribiendo eventos a través de la red en las particiones del topic. Los eventos con la misma clave (indicados por su color en la figura) se escriben en la misma partición. Tenga en cuenta que ambos productores pueden escribir en la misma partición si corresponde.
Para que sus datos sean tolerantes a fallas y de alta disponibilidad, todos los topics se pueden replicar, incluso en regiones geográficas o centros de datos, de modo que siempre haya varios corredores que tengan una copia de los datos en caso de que las cosas salgan mal, usted quiere realizar el mantenimiento de los corredores, etc. Una configuración de producción común es un factor de replicación de 3, es decir, siempre habrá tres copias de sus datos. Esta replicación se realiza a nivel de particiones de topic.
Arquitectura de Componentes¶
Kafka posee diversos componentes
- Broker: se refiere a un server o nodo del cluster, organiza el almacenamiento y el paso de los mensajes.
- Cluster: es el agrupamiento de los instancias de los brokers
- Apache ZooKepper: es una dependencia central para Kafka, ya que proporciona un servicio de coordinación de clústeres, almacenando y rastreando el estado de los intermediarios y consumidores. ZooKeeper también se utiliza para la elección del controlador.
-
Kafka Connect: es un conjunto de herramientas de integración para la transmisión de datos entre los corredores de Kafka y otros sistemas que utilizan complementos de Connector. Kafka Connect proporciona un marco para integrar Kafka con una fuente o destino de datos externos, como una base de datos, para importar o exportar datos mediante conectores. Los conectores son complementos que proporcionan la configuración de conexión necesaria.
-
Un conector de origen inserta datos externos en Kafka.
-
Un conector receptor extrae datos de Kafka
Los datos externos se traducen y transforman al formato apropiado.
-
-
Kafka MirrorMaker: replica datos entre dos clústeres de Kafka, dentro o entre centros de datos.
MirrorMaker toma mensajes de un clúster de Kafka de origen y los escribe en un clúster de Kafka de destino.
-
Kafka Bridge: proporciona una API para integrar clientes basados en HTTP con un clúster de Kafka.
- Kafka Exporter extrae datos para el análisis como métricas de Prometheus, principalmente datos relacionados con compensaciones, grupos de consumidores, retrasos de consumidores y temas. El retraso del consumidor es el retraso entre el último mensaje escrito en una partición y el mensaje que un consumidor está tomando actualmente de esa partición.
¿Cómo se encuentra desplegado actualmente?¶
Tip
Continue la lectura en topics