Apache Kafka
Para una definición de alto nivel, presentemos una definición breve para Apache Kafka:
Apache Kafka es un registro distribuido, tolerante a fallas, escala horizontalmente, de confirmación.
Esas fueron algunas palabras de alto nivel sobre Apache Kafka. Entendamos los conceptos en detalle aquí.
Scoiling vertical y horizontal
Un tema en Apache Kafka es como una cola donde se almacenan los mensajes. Estos mensajes se almacenan durante una cantidad configurable de tiempo y el mensaje no se elimina hasta que se logre este momento, incluso si ha sido consumido por todos los consumidores conocidos.
Kafka es escalable, ya que son los consumidores quienes realmente almacenan lo que el mensaje fue obtenido por ellos por última vez como un valor de "desplazamiento". Veamos una figura para entender esto mejor:
TEMA PARTION y compensación del consumidor en Apache Kafka
Comenzando con Apache Kafka
Para comenzar a usar Apache Kafka, debe instalarse en la máquina. Para hacer esto, lea Instalar Apache Kafka en Ubuntu.
Asegúrese de tener una instalación de Kafka activa si desea probar ejemplos que presentamos más adelante en la lección.
Como funciona?
Con kafka, el Productor Aplicaciones Publicar mensajes que llega a un kafka Nodo y no directamente a un consumidor. De este nodo Kafka, los mensajes son consumidos por el Consumidor aplicaciones.
Productor y consumidor de Kafka
Particiones temáticas
Persistencia al disco
Kafka persiste los registros de mensajes que obtiene de los productores en el disco y no los mantiene en la memoria. Una pregunta que podría surgir es cómo esto hace que las cosas sean factibles y rápidas? Hubo varias razones detrás de esto, lo que lo convierte en una forma óptima de administrar los registros de mensajes:
Distribución y replicación de datos
Como estudiamos anteriormente que un tema se divide en particiones, cada registro de mensajes se replica en múltiples nodos del clúster para mantener el orden y los datos de cada registro en caso de que uno de los nodos muera.
Aunque una partición se replica en múltiples nodos, todavía hay un líder de la partición nodo a través del cual las aplicaciones leen y escriben datos sobre el tema y el líder replica los datos en otros nodos, que se denominan seguidores de esa partición.
Si los datos del registro de mensajes son muy importantes para una aplicación, la garantía del registro del mensaje para ser segura en uno de los nodos se puede aumentar aumentando el aumento del factor de replicación del clúster.
¿Qué es Zookeeper??
Zookeeper es una tienda de valores de clave muy tolerante a fallas. Apache Kafka depende en gran medida de Zookeeper para almacenar la mecánica de clúster como el latido del corazón, distribuyendo actualizaciones/configuraciones, etc.).
Permite que los corredores de Kafka se suscriban a sí mismos y sepan cada vez que hay cambios con respecto a un líder de partición y distribución de nodos.
Las aplicaciones de productores y consumidores se comunican directamente con Zookeeper Aplicación para saber qué nodo es el líder de la partición para un tema para que puedan realizar lecturas y escrituras del líder de la partición.
Transmisión
Un procesador de transmisión es un componente principal en un clúster de Kafka que toma un flujo continuo de datos de registro de mensajes de los temas de entrada, procesa estos datos y crea un flujo de datos a temas de salida que pueden ser cualquier cosa, desde la basura hasta una base de datos.
Es completamente posible realizar un procesamiento simple directamente utilizando las API de productor/consumidor, aunque para un procesamiento complejo como combinar transmisiones, Kafka proporciona una biblioteca de API de transmisión integrada, pero tenga en cuenta que esta API está destinada a usarse dentro de nuestra propia base de código y no lo hace ' T Corre en un corredor. Funciona de manera similar a la API del consumidor y nos ayuda a escalar el trabajo de procesamiento de flujo a través de múltiples aplicaciones.
Cuándo usar Apache Kafka?
Mientras estudiamos en las secciones anteriores, Apache Kafka se puede usar para lidiar con una gran cantidad de registros de mensajes que pueden pertenecer a un número prácticamente infinito de temas en nuestros sistemas.
Apache Kafka es un candidato ideal cuando se trata de usar un servicio que puede permitirnos seguir la arquitectura de eventos en nuestras aplicaciones. Esto se debe a sus capacidades de persistencia de datos, arquitectura tolerante a fallas y altamente distribuida donde las aplicaciones críticas pueden confiar en su rendimiento.
La arquitectura escalable y distribuida de Kafka hace que la integración con microservicios sea muy fácil y permite que una aplicación se desacople con mucha lógica comercial.
Creando un nuevo tema
Podemos crear un tema de prueba pruebas En el servidor Apache Kafka con el siguiente comando:
Creatinig un tema
Topics de sudo kafka.SH-CREATE-ZOOKEEPER LOCALHOST: 2181-Factor de replicación 1
--Partitions 1 -topic tope
Esto es lo que recuperamos con este comando:
Crea un nuevo tema de Kafka
Confirmación de creación de temas de Kafka
Escribir mensajes sobre un tema
Como estudiamos anteriormente, una de las API presentes en Apache Kafka es la API de productor. Usaremos esta API para crear un nuevo mensaje y publicar el tema que acabamos de crear:
Escribir mensaje al tema
sudo kafka-productor.SH-Broker-List Localhost: 9092-Prueba de tope
Veamos la salida para este comando:
Publicar mensaje a Kafka Topic
Escribiendo un mensaje
Lectura de mensajes del tema
Ahora que hemos publicado un mensaje sobre el tema de Kafka que creamos, este mensaje estará allí para un tiempo configurable. Podemos leerlo ahora usando el API de consumo:
Lectura de mensajes del tema
sudo kafka-consolse-consolutor.SH --zookeeper localhost: 2181 --
Prueba de temas: desde el beginismo
Esto es lo que recuperamos con este comando:
Comando para leer el mensaje de Kafka Topic
Publicar y consumo al mismo tiempo
Conclusión
En esta lección, observamos cómo comenzamos a usar Apache Kafka, que es un excelente corredor de mensajes y también puede actuar como una unidad especial de persistencia de datos.