Transmisión de datos con Apache Kafka

Completado

Apache Kafka fue creado por LinkedIn en 2010, con el objetivo de mover datos a una escala muy alta con una latencia muy baja y un nivel de tolerancia a errores elevado. Después, LinkedIn donó el proyecto a Apache Foundation en 2012, pero todavía usa Kafka en todo su ecosistema para realizar el seguimiento de la actividad del usuario, intercambiar mensajes y recopilar métricas.

Kafka es una plataforma de streaming distribuida que se ha diseñado para lo siguiente:

  • Simplificar las canalizaciones de datos
  • Administrar grandes cantidades de datos en un patrón de streaming
  • Admitir sistemas en tiempo real y por lotes
  • Escalado horizontal masivo

En primer lugar, obtendrá información sobre Apache Kafka puro y luego sobre Kafka en Azure HDInsight.

Componentes de Kafka

Antes de comprender cómo funciona Kafka, se verán los roles de algunos de sus componentes clave y cómo se combinan para proporcionar un sistema de mensajería altamente escalable y tolerante a errores.

Agente

Kafka es un servicio en clúster y un único clúster de Kafka también se denomina agente. Los agentes reciben mensajes de los productores y los almacenan en el disco. El agente también responde a las solicitudes de recuperación de cambios de los consumidores. Dentro de un clúster de agentes, un agente actúa como controlador y es responsable de las operaciones administrativas y de asignar particiones a los agentes.

Message

Una unidad de datos en un clúster de Kafka. En la mayoría de los casos, los mensajes son pares clave-valor.

Temas y particiones

Los temas y las particiones son categorías de mensajes en Kafka. Normalmente, los temas se dividen en varias particiones para mejorar el rendimiento, con un mínimo recomendado de tres particiones. Los mensajes se escriben en una partición de tema en un modo de solo anexión. Además, las particiones se replican en varios agentes para mejorar la redundancia en caso de que se produzcan errores en ellos. Las particiones permiten leer los temas en paralelo porque permiten que los datos se dividan entre varios agentes. Existe una réplica líder que controla todas las solicitudes de lectura y escritura, y los seguidores se replican desde el líder. Si se produce un error en un líder, una de las réplicas se convierte en el líder.

Productores y consumidores

Los productores y consumidores son los clientes que producen y consumen mensajes del sistema Kafka. Los productores publican nuevos mensajes y los dirigen a un tema específico. Los consumidores también pueden diseñarse para escribir en una partición de tema concreta. Por su parte, los consumidores se suscriben a uno o varios temas, y leen los mensajes de esos temas.

Grupo de consumidores

Uno o varios consumidores pueden trabajar de forma conjunta como grupo y consumir mensajes como un grupo. Si el número de consumidores es igual al número de particiones de tema, cada consumidor consume de una partición de un solo tema, lo que genera paralelismo.

Retención

En Kafka, los mensajes se pueden conservar de forma duradera en el clúster de Kafka durante un período de tiempo predefinido. Una vez que se alcanzan los límites de retención, Kafka puede hacer que esos mensajes expiren y eliminarlos.

Offset

Un desplazamiento es simplemente la posición de un mensaje en una partición. La actualización de la posición actual en una partición a medida que se procesan mensajes se denomina confirmación. Una vez que se ha procesado un mensaje, Kafka confirmará su desplazamiento a un tema de Kafka interno especial. Cuando un productor publica un mensaje en una partición, se reenvía al líder. El líder agrega el mensaje al registro de confirmación e incrementa el desplazamiento del mensaje. El desplazamiento de mensajes es cómo se identifican los mensajes en el tema. El mensaje solo está disponible para el consumidor después de que se haya confirmado en el clúster.

Zookeeper

Zookeeper es un servicio de coordinación y, en un clúster de Kafka, proporciona una vista sincronizada del estado del clúster. Kafka usa Zookeeper para la elección del líder entre las particiones de agente y tema. Kafka usa Zookeeper para administrar la detección de servicios para los agentes de Kafka que forman el clúster. Zookeeper envía los cambios de la topología a Kafka, por lo que cada nodo del clúster sabe cuándo se ha unido un agente nuevo, ha desaparecido un agente, se ha quitado un tema o se ha agregado.

¿Cómo se combina todo?

Las aplicaciones (también denominadas productores) envían mensajes a un agente de Kafka, que los procesan uno o varios consumidores. Los mensajes de un clúster se clasifican por temas. Por ejemplo, un cliente podría crear un tema "Ventas" para enviar todos los mensajes que son relevantes para las ventas, etc. A medida que los temas aumentan de tamaño con nuevos mensajes, se dividen en particiones, que se replican más mediante agentes de Kafka para la redundancia. Las particiones se clasifican como líderes y seguidores. En la partición líder se escribe y se lee, mientras que las particiones de seguidor son simplemente réplicas, que se actualizan con el estado del líder. Para determinar en qué partición se va a escribir y de cuál se va a leer, los productores y consumidores deben saber qué particiones están diseñadas como líderes. Los nodos de Zookeeper administran el estado del clúster de Kafka y, entre otras cosas, eligen a los líderes de partición y proporcionan esta información a los productores y consumidores.
Kafka proporciona garantías de que los mensajes con una partición se ordenen en la misma secuencia en la que se reciben. Un mensaje específico se puede identificar de forma distintiva por medio de su desplazamiento, que es su posición en una partición. El consumidor lee los mensajes de las particiones y, después del procesamiento, confirma el desplazamiento que indica que el mensaje se ha procesado correctamente. Kafka almacena todos sus registros en disco y mantiene la persistencia de los mensajes. Si por algún motivo el consumidor se interrumpe y se detiene el procesamiento, Kafka conserva estos mensajes durante un período de retención predeterminado y, después de volver a ponerse en línea, el consumidor puede reiniciar el procesamiento desde el desplazamiento confirmado en el que se haya quedado antes de la interrupción.

How Apache Kafka works

Temas de Kafka

Un tema de Kafka es una fuente o una cola en la que se almacenan y publican mensajes. Los productores envían mensajes a los temas y los consumidores leen de los temas. Cada nodo de un agente de Kafka puede contener varios temas.

¿Cuáles son las ventajas de Kafka en Azure HDInsight?

La versión de código abierto de Kafka ofrece muchas funciones, pero se necesita mucho trabajo para configurarla. Azure HDInsight ofrece los mejores marcos de análisis de código abierto en Azure y facilita a los clientes la configuración de sus clústeres de código abierto en cuestión de minutos, en lugar de dedicar semanas o meses a configurarlos, y se pueden usar de inmediato. HDInsight también está preparado para la empresa con las ventajas siguientes:

  • Es un servicio administrado que proporciona un proceso de configuración simplificado. El resultado es una configuración a la que Microsoft da soporte y prueba.
  • Microsoft proporciona un Acuerdo de Nivel de Servicio (SLA) del 99,9 % sobre el tiempo de actividad de Spark y Kafka.
  • Utiliza Azure Managed Disks como memoria auxiliar para Kafka. Managed Disks puede ofrecer hasta 16 TB de almacenamiento por agente de Kafka, con varios agentes.
  • HDInsight ofrece la mejor seguridad empresarial con redes virtuales, seguridad específica con Apache Ranger y cifrado Bring Your Own Key (BYOK) para datos en reposo.
  • Cumplimiento de HIPAA, SOC y PCI
  • La capacidad de implementar canalizaciones de streaming de un extremo a otro con Spark y Storage mediante plantillas de Azure Resource Manager (ARM) automatizadas en la misma red virtual.
  • Se puede lograr alta disponibilidad con Kafka MirrorMaker, que puede consumir registros de temas en el clúster principal y, después, crear una copia local en el clúster secundario.
  • HDInsight permite cambiar el número de nodos de trabajo (que hospeda el agente de Kafka) después de crear los clústeres. El escalado se puede realizar desde Azure Portal, Azure PowerShell y otras interfaces de administración de Azure. Para Kafka, debe volver a equilibrar las réplicas de la partición después de las operaciones de escalado. El reequilibrado de las particiones permite a Kafka aprovechar el nuevo número de nodos de trabajo.
  • Los registros de Azure Monitor se pueden usar para supervisar Kafka en HDInsight. En los registros de Azure Monitor se muestra información de nivel de máquina virtual, como métricas de disco y NIC, y métricas de JMX de Kafka.