6 Apache Kafka

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

¿Cuál es una característica clave del patrón de mensajería publicación/suscripción (pub/sub) en el contexto del procesamiento de datos?

  • Se requiere que todos los receptores confirmen la recepción de cada mensaje.
  • Los emisores deben conocer la identidad de los receptores.
  • Los emisores clasifican los mensajes bajo ciertos temas, y los receptores se suscriben a los temas de su interés. (correct)
  • Los mensajes se enrutan directamente desde el emisor a un receptor específico.

¿En qué se diferencia un bus de datos, como el implementado por Apache Kafka, de una cola de mensajes tradicional en la comunicación entre sistemas?

  • Un bus de datos está diseñado para escalar con el aumento del volumen de información, mientras que una cola de mensajes tradicional tiene limitaciones de escalabilidad. (correct)
  • Un bus de datos solo permite la comunicación entre dos sistemas, mientras que una cola de mensajes puede conectar múltiples sistemas.
  • Un bus de datos asegura la entrega de mensajes en tiempo real, mientras que una cola de mensajes no ofrece garantías de entrega.
  • Una cola de mensajes cifra los datos transmitidos, mientras que un bus de datos transmite los datos en texto plano.

Al diseñar un sistema de mensajería con Apache Kafka, ¿qué implicación tiene la decisión de particionar un 'topic' en múltiples particiones?

  • Disminuye la capacidad total de almacenamiento del 'topic'.
  • Aumenta la complejidad de la configuración de los consumidores.
  • Reduce la tolerancia a fallos del sistema.
  • Incrementa la capacidad de procesamiento paralelo de los consumidores. (correct)

¿Cuál de los siguientes NO es un caso de uso típico de Apache Kafka?

<p>Almacenamiento de archivos multimedia de gran tamaño. (C)</p> Signup and view all the answers

En un clúster de Kafka, ¿cuál es la función principal de Zookeeper?

<p>Gestionar la configuración y los metadatos del clúster. (C)</p> Signup and view all the answers

Considerando la replicación en Kafka, ¿cuál es el propósito de tener réplicas 'leader' y 'follower' para una partición?

<p>Garantizar la disponibilidad y la consistencia de los datos. (D)</p> Signup and view all the answers

Al configurar el parámetro nacks en un productor de Kafka, ¿qué valor asegura la mayor durabilidad de los mensajes?

<p><code>nacks=all</code> (D)</p> Signup and view all the answers

¿Cuál es la función del 'purgatorio de mensajes' en Kafka?

<p>Almacenar mensajes temporalmente hasta que sean confirmados por las réplicas 'follower'. (D)</p> Signup and view all the answers

¿Qué información es necesaria para que un consumidor de Kafka pueda comenzar a leer mensajes de un 'topic'?

<p>El nombre del 'topic', un grupo de consumidores, un 'offset' y el número de partición. (B)</p> Signup and view all the answers

¿Qué implica el concepto de 'zero-copy' en el contexto de la lectura de mensajes en Kafka?

<p>Los datos se envían directamente desde el disco al consumidor sin pasar por la memoria principal. (C)</p> Signup and view all the answers

En Kafka, ¿qué es un 'rebalanceo' de consumidores y por qué ocurre?

<p>Reasignación de particiones a los consumidores cuando se unen o abandonan el grupo. (B)</p> Signup and view all the answers

¿Qué papel juega el 'heartbeat' en los grupos de consumidores de Kafka?

<p>Confirmar que un consumidor sigue activo y formando parte del grupo. (D)</p> Signup and view all the answers

Respecto a los métodos de envío de mensajes en Kafka utilizando la API de Java, ¿cuál ofrece la menor garantía de entrega pero la mayor eficiencia?

<p>Enviar y olvidar (fire-and-forget). (B)</p> Signup and view all the answers

¿Cuál es la ventaja de usar un formato de serialización como Avro en Kafka?

<p>Permite la evolución del esquema sin romper la compatibilidad. (C)</p> Signup and view all the answers

Si un productor de Kafka necesita enviar mensajes a servidores con direcciones IP específicas, ¿qué configuración es necesaria?

<p>Especificar las direcciones IP de los 'brokers' en la lista de direcciones a las que conectarse. (A)</p> Signup and view all the answers

Dentro de los grupos de consumidores en Kafka, ¿qué sucede si la cantidad de consumidores excede el número de particiones en un 'topic'?

<p>Los consumidores excedentes entran en estado inactivo. (A)</p> Signup and view all the answers

¿Cuál es el propósito principal de configurar la política de retención en un 'topic' de Kafka?

<p>Gestionar el espacio de almacenamiento de los mensajes en el disco. (A)</p> Signup and view all the answers

En relación con los 'offset' en Kafka, ¿qué representan y cuál es su importancia?

<p>Un identificador único de cada mensaje dentro de una partición y su importancia en el seguimiento de la lectura. (B)</p> Signup and view all the answers

¿Cómo maneja Kafka la situación en la que un 'broker' que actúa como 'leader' de una partición falla?

<p>Zookeeper elige automáticamente a otro 'broker' como el nuevo 'leader' de la partición. (D)</p> Signup and view all the answers

Si se desea enviar datos complejos (objetos) a través de Kafka, ¿qué componente se utiliza para convertirlos en un formato que pueda ser transmitido por la red?

<p>Serializer. (B)</p> Signup and view all the answers

¿Qué significa que Kafka mantenga el orden de los mensajes 'solo dentro de una misma partición'?

<p>El orden de los mensajes dentro de un 'topic' solo está garantizado si se usa una única partición. (C)</p> Signup and view all the answers

En términos de escalabilidad horizontal en Kafka, ¿qué componente se escala al añadir más 'brokers' a un clúster?

<p>Todas las opciones anteriores. (D)</p> Signup and view all the answers

¿Qué es un 'topic' en Kafka?

<p>Una categoría o fuente de mensajes. (D)</p> Signup and view all the answers

¿Qué componente de Kafka asigna particiones a consumidores dentro de un grupo de consumidores?

<p>Kafka internamente. (B)</p> Signup and view all the answers

Si un sistema requiere garantizar que los mensajes se procesen 'exactamente una vez', ¿qué consideraciones son importantes al usar Kafka?

<p>Utilizar 'offsets' manuales y transacciones para asegurar que los mensajes se procesen una sola vez. (B)</p> Signup and view all the answers

En Kafka, ¿cómo se puede aumentar la velocidad de lectura o escritura de mensajes en un 'topic'?

<p>Aumentando el número de particiones en el 'topic'. (C)</p> Signup and view all the answers

¿Cuál es una característica clave de los mensajes de Kafka?

<p>Son inmutables una vez escritos. (B)</p> Signup and view all the answers

Al implementar una aplicación que consume datos de Kafka, ¿qué es necesario para que la aplicación pueda deserializar los mensajes correctamente?

<p>El esquema de serialización utilizado por el productor. (D)</p> Signup and view all the answers

Flashcards

¿Qué es Apache Kafka?

Sistema de mensajería que sigue el patrón publicación/suscripción. Proporciona un bus de datos común.

¿Qué es un bus de datos en Kafka?

Un canal donde las aplicaciones escriben (publican) mensajes. Los mensajes se insertan en un cierto orden.

¿Qué es un mensaje en Kafka?

La unidad de información en Kafka, equivalente a un registro en una base de datos.

¿Qué es un topic en Kafka?

Un tema es una tabla de una base de datos o un directorio en un sistema de archivos.

Signup and view all the flashcards

¿Qué son las particiones en Kafka?

Indican cómo se distribuyen físicamente los datos dentro de un topic, equivalentes a bloques físicos en HDFS.

Signup and view all the flashcards

Tracking de actividad web con Kafka

Fue el objetivo original de Kafka en LinkedIn. El Front-end web envía mensajes a Kafka, estos son consumidos por sistemas.

Signup and view all the flashcards

Mensajería con Kafka

Enviar mensajes que después otra aplicación formatea para mandar por email informes o resúmenes más completos.

Signup and view all the flashcards

Métricas y logs con Kafka

Múltiples aplicaciones pueden enviar a Kafka el mismo tipo de mensajes de logs, se utilizan para monitorización y creación de alertas en tiempo real.

Signup and view all the flashcards

Historial de cambios de BD con Kafka

Replicar los cambios de una base de datos en otros lugares o mezclar los cambios desde varias bases de datos distintas.

Signup and view all the flashcards

Procesamiento en tiempo real con Kafka

Se opera con datos según van llegando para realizar o actualizar agregaciones. Se utilizan frameworks de procesamiento distribuido.

Signup and view all the flashcards

¿Qué es Zookeeper en Kafka?

Almacena metadatos sobre el clúster de Kafka (y, en versiones antiguas, también sobre los consumidores).

Signup and view all the flashcards

Particiones de un topic

El número de particiones de un topic únicamente se puede incrementar, nunca disminuir.

Signup and view all the flashcards

Política de retención en Kafka

Determinar cuándo eliminar mensajes de un topic, por tiempo o por tamaño.

Signup and view all the flashcards

Replicación de particiones en Kafka

Factor configurable, fijado en 3 por defecto. Existen dos tipos de réplicas de una partición.

Signup and view all the flashcards

¿Qué es la réplica líder?

Cada partición tiene una única réplica designada como líder.

Signup and view all the flashcards

¿Qué son las réplicas followers?

Réplicas de una partición que no son líderes.

Signup and view all the flashcards

Sincronización de réplicas

Los brókeres con réplicas followers solicitan regularmente al bróker con la réplica líder los últimos mensajes que este haya recibido.

Signup and view all the flashcards

¿Cómo se envían los mensajes?

Existen tres maneras posibles: Enviar y olvidar, Envío síncrono, Envío asíncrono.

Signup and view all the flashcards

¿Qué formato de serialización se suele utilizar?

El más frecuente en Kafka es Avro, en el cual el esquema de datos se almacena por separado.

Signup and view all the flashcards

Grupos de consumidores en Kafka

Un consumidor forma parte de un grupo de consumidores concreto al cual se les asignan particiones del topic.

Signup and view all the flashcards

Study Notes

Introducción y objetivos

  • Apache Kafka es una tecnología de software libre dentro del ecosistema de big data, supervisada por la Apache Software Foundation (ASF).
  • Se utiliza para procesar flujos de datos en tiempo real (streaming).
  • Es fundamental en muchas empresas actuales.
  • Los objetivos del tema incluyen:
  • Entender el paradigma de mensajería publicación/suscripción.
  • Comprender el concepto de bus de mensajes distribuido y sus casos de uso.
  • Conocer los aspectos fundamentales y el funcionamiento interno de Kafka.

Mensajería publicación/suscripción

  • Las aplicaciones generan datos como logs, métricas, actividad del usuario y notificaciones.
  • Estos datos informan sobre aspectos de la aplicación y ayudan a tomar decisiones.
  • Para optimizar procesos, es necesario que otros sistemas analicen y usen estos datos.
  • Amazon usa información de navegación web para ofrecer recomendaciones personalizadas.
  • La mensajería basada en publicación/suscripción (pub/sub) es un patrón común en varias plataformas.
  • En este patrón, los emisores (publishers) envían datos (mensajes) sin dirigirse a un receptor específico.
  • Los emisores clasifican los mensajes bajo un tema (topic).
  • Los receptores interesados (suscriptores o suscribers) se suscriben a estos temas para recibir los mensajes.
  • Las aplicaciones constan de subsistemas que se comunican a través de colas de mensajes o canales entre procesos.
  • En una aplicación web de compras, los servidores frontend pueden enviar métricas (clics, productos vistos, etc.) a un servidor para generar informes.
  • La complejidad aumenta al conectar varios servidores (chat, valoraciones, cesta de la compra) con un sistema de métricas complejo.
  • Un sistema centralizado para publicar información relacionada con métricas simplifica la complejidad.

Introducción a Apache Kafka

  • Apache Kafka sigue el patrón de publicación/suscripción (pub/sub).
  • Proporciona un bus o canal de datos común donde las aplicaciones escriben mensajes y otras los leen según su relevancia.
  • Kafka es un bus de datos (también cola de mensajes) distribuido y replicado, basado en el paradigma publicación/suscripción.
  • Bus: Canal donde las aplicaciones publican mensajes, similar a un cable de datos de gran capacidad.
  • Mensaje: Unidad de información equivalente a un registro en una base de datos.
    • Es un array de bytes con una clave asociada, también un array de bytes.
    • La clave indica en qué partición del topic debe escribirse el mensaje.
    • Los mensajes se escriben en Kafka en lotes (batches) para evitar sobrecargar la red.
  • Distribuido y replicado: Los mensajes se almacenan en el disco local de máquinas interconectadas que forman un clúster de Kafka.
    • Los mensajes se replican automáticamente para robustez ante fallos y para aumentar el rendimiento y la escalabilidad.
  • Publicación/suscripción: Las aplicaciones se suscriben a un topic específico para recibir mensajes publicados en ese topic.
  • Topics y particiones: Un topic es como una tabla de base de datos o un directorio de archivos.
    • Agrupa mensajes con una estructura común.
    • Las particiones indican cómo se distribuyen físicamente los datos dentro de un topic, similar a los bloques físicos en HDFS.
    • Los mensajes se insertan y leen en orden dentro de una partición, pero no existe un orden entre particiones distintas.
  • El particionamiento permite la escalabilidad y replicación de datos, similar a HDFS.
  • Es posible agregar más máquinas (brókeres) al clúster de Kafka y más particiones a los topics.
  • Se puede indicar la organización física de las máquinas (en armarios o racks) para decidir cómo ubicar las réplicas.

Casos de uso típicos de Kafka

  • Tracking de actividad en una web: Originalmente diseñado para LinkedIn.
    • El frontend web envía mensajes a Kafka con la interacción del usuario (clics, modificaciones de perfil).
    • Varios sistemas consumen estos mensajes, monitorizan la información, elaboran informes, entrenan modelos de machine learning y personalizan la página o los resultados en tiempo real.
  • Mensajería: Varias aplicaciones envían mensajes que otra aplicación reúne y formatea para enviar emails, informes o alertas vía SMS.
  • Métricas y logs: Múltiples aplicaciones envían logs a Kafka, que luego se utilizan para elaborar informes, análisis batch, monitorización y creación de alertas.
  • Historial de cambios de bases de datos: Para replicar cambios en bases de datos o mezclar cambios de varias bases de datos distintas.
  • Procesamiento en tiempo real de flujos de datos: Operar con datos a medida que llegan para realizar actualizaciones o agregaciones.

Conceptos fundamentales

  • Kafka nació en 2010 como software interno de LinkedIn para resolver problemas de mensajería.
  • Se donó a la Apache Software Foundation en 2011 y se convirtió en proyecto top en 2012.
  • En 2014, exempleados de LinkedIn fundaron Confluent, una empresa que soporta el desarrollo y ofrece productos como Kafka Stream y Kafka Connect.
  • Empresas como PayPal, Walmart, LinkedIn, Cisco, Netflix, Spotify, Uber, eBay, Amazon, lo utilizan intensivamente.
  • Clúster de Kafka:
  • Usar un clúster de Kafka con un único bróker puede ser suficiente para pruebas de concepto y desarrollos locales.
  • Tener múltiples brókeres configurados como un clúster permite escalar la carga y replicar la información.
  • Apache Kafka utiliza Zookeeper para almacenar metadatos sobre el clúster.
  • Zookeeper tiene una lista de los brókeres que forman parte del clúster.
  • Cada bróker tiene un identificador único con el que se registra en Zookeeper.
  • Zookeeper notifica a los nuevos brókeres que intentan unirse si su ID ya está registrado.
  • El primer bróker en registrarse en Zookeeper es designado como bróker controlador del clúster (controller).
  • El bróker controlador selecciona las particiones líderes y detecta los brókeres que se unen o caen del clúster.
  • Zookeeper media en la elección del controlador si el controlador actual pierde la conexión.
  • Topics en Kafka y número de particiones:
  • Los topics se crean desde la consola, no desde los productores o consumidores.
  • Se puede especificar el número de particiones al crear el topic o confiar en el parámetro num.partitions del servidor.
  • El número de particiones de un topic solo se puede aumentar, nunca disminuir.
  • El número de particiones influye en el balanceo de la carga en el clúster.
  • En muchos casos, se indica un número de particiones igual o múltiplo del número de brókeres.
  • Otros factores a considerar son la capacidad de envío/recepción de los productores/consumidores y la capacidad esperada del topic.
  • Otro aspecto importante es la política de retención, que determina cuándo eliminar mensajes de un topic.
  • Se puede configurar por tiempo o por tamaño.
  • La estrategia habitual es configurar cuánto tiempo se mantienen los mensajes en disco (por defecto 168 horas o una semana).
  • La alternativa es configurar el tamaño total de bytes que se mantienen en disco, por partición.

Replicación de particiones, líder de partición y sincronización de réplicas

  • Un clúster de Kafka con varios brókeres permite replicar particiones.

  • La replicación es esencial para la disponibilidad y durabilidad de los mensajes.

  • Los topics se dividen en particiones que se replican en varios brókeres.

  • La cantidad de réplicas se configura mediante un parámetro (análogo al factor de replicación en HDFS) y está fijado en 3 por defecto.

  • Réplica líder: Cada partición tiene una réplica designada como líder.

  • Todos los mensajes se publican y consumen a través de la réplica líder. -Réplicas followers: Réplicas de una partición que no son líderes.

  • No escriben mensajes procedentes de productores ni sirven mensajes a consumidores.

  • Su función es replicar los mensajes de la réplica líder y mantenerse actualizadas.

  • Los brókeres con réplicas followers solicitan regularmente los últimos mensajes al bróker con la réplica líder para mantenerse sincronizados.

  • El líder es responsable de saber qué réplicas followers están sincronizadas (in-sync) y cuáles no.

  • Las réplicas que no han pedido los últimos mensajes a la réplica líder en más de 10 segundos se consideran no sincronizadas (out-of-sync).

  • Para repartir las réplicas entre los brókeres, se deben seguir estos objetivos:

  • Repartir las réplicas de forma homogénea.

  • Asegurar que, para cada partición, cada una de sus réplicas está en un bróker distinto.

  • Asignar réplicas de cada partición en racks distintos, siempre que sea posible.

  • Procesamiento de las peticiones de escritura:

  • La función de un bróker es procesar peticiones enviadas desde productores, suscriptores, brókeres con réplicas followers o desde el bróker controlador.

  • Los clientes (productores, consumidores o brókeres) inician las conexiones y envían las peticiones.

  • El bróker procesa y responde todas las peticiones en el mismo orden en que las recibe, garantizando el funcionamiento de Kafka como una cola de mensajes.

  • Las peticiones habituales son las de escritura (produce request) y las de lectura (fetch requests).

  • Si un bróker con réplica follower recibe una petición, el cliente recibe un error.

  • El cliente utiliza una petición de metadatos para obtener información sobre el bróker con la réplica líder.

  • Cada productor independientemente, configura el número de réplicas que deben recibir un mensaje para considerarlo como escrito con éxito. El parámetro nacks tiene tres valores:

  • nacks=0: No se espera a que el líder de la partición lo haya escrito.

  • nacks=1: Basta con que el líder confirme que lo ha recibido y escrito.

  • nacks=all: Todas las réplicas sincronizadas tienen que recibirlo.

  • El bróker escribe inmediatamente el mensaje en disco.

  • Si el valor de nacks es 0 o 1, el bróker devuelve un mensaje de respuesta al productor indicando que se ha escrito con éxito.

  • Si no, el líder escribe el mensaje provisionalmente en un buffer llamado purgatorio de mensajes, hasta que recibe las peticiones de las réplicas.

  • El mensaje permanece en el purgatorio hasta que el bróker ha recibido la confirmación de que el mensaje ha sido escrito en todas las réplicas followers, en ese momento se devuelve la respuesta de éxito.

  • Procesamiento de las peticiones de lectura:

    • Un consumidor envía una petición al bróker que posee la réplica líder de la partición.
    • El mensaje de petición de lectura contiene:
  • El topic, la partición y el offset del mensaje a partir del cual se desea consumir.

  • El tamaño máximo del bloque de mensajes que se desea que le sean devueltos.

  • Opcionalmente, el tamaño mínimo de datos que se desea recibir.

  • Si el offset especificado existe, el bróker con la réplica líder envía los mensajes directamente desde el disco.

  • Kafka utiliza un mecanismo denominado zero-copy, que envía datos directamente desde disco, sin pasar por un buffer en memoria principal.

  • Un bróker (líder de una partición) solo devolverá mensajes que hayan sido escritos en todas las réplicas sincronizadas (in-sync-replicas).

Implementación de productores Kafka

  • Para escribir datos, se necesita código en las aplicaciones productoras y consumidoras.
  • Apache Kafka proporciona una API en lenguaje Java que proporciona la funcionalidad requerida
  • La API ofrece funcionalidad para la escritura de mensajes en topics y consumidores para la lectura de mensajes.
  • Además de la API, define también un protocolo a bajo nivel, de manera que cualquier aplicación que lo implemente pueda enviar o recibir mensajes de Kafka
  • Con la definición de este protocolo, se han creado diferentes API en otros lenguajes (Python, C++).
  • Se debe considerar aspectos de la configuración:
  • ¿Se puede tolerar pérdida de mensajes (datos operacionales)?
  • ¿Se puede tolerar que algún mensaje llegue repetido (datos informacionales)?
  • ¿Hay restricciones de tiempo real en la propagación de mensajes o de cantidad de mensajes por segundo?
  • La API Java de Kafka ofrece una clase Java KafkaProducer, con un método send.
  • Especificar un objeto Serializer, una lista de direcciones IP de los brókeres y un objeto ProducerRecord para enviar el mensaje con el topic y el contenido del mensaje.
  • Kafka serializa la clave y el valor, los convierte en byte arrays.
  • El objeto Partitioner decide a cuál irá,.
  • Después Kafka añade el mensaje al bloque de mensajes que serán enviados al mismo topic y partición
  • Una hebra separada los manda periódicamente a los brókeres apropiados, cuando el bróker recibe un bloque, envía una respuesta con RecordMetadata, que la función send puede intentar reenviar
  • Existen tres maneras posibles de efectuar el envío:
  • Enviar y olvidar (fire-and-forget): Se envía y no se atiende a la posible respuesta.
  • Envío síncrono: El proceso se bloquea a la espera de la respuesta.
  • Envío asíncrono: El usuario incluye un método (Producer.Callback de Kafka), el proceso continúa su ejecución sin esperar la respuesta.

Serialización: el formato Avro

  • Cuando queremos enviar como mensaje una instancia de una clase más compleja que hemos definido en nuestro dominio concreto del problema, habría que transformarlo en una representación como array de bytes.
  • Convertir cada uno de los campos y los bytes representen el DNI
  • Es muy frágil y propenso
  • Se suele usar algún formato predefinido para la serialización, sobretodo Avro, el esquema o estructura de un mensaje o de un archivo de datos se almacena por separado, en un archivo en formato JSON
  • Avro presenta la ventaja de que es posible cambiar la estructura de los datos.

Implementación de consumidores Kafka

  • Un consumidor es una aplicación que es capaz de leer mensajes de un topic concreto
  • Es habitual que un consumidor lea mensajes de Kafka, realice algún tipo de procesado con ellos
  • Si el ritmo de publicación de mensajes es muy alto y el consumidor no puede seguirlo, resulta necesario un mecanismo para escalar el consumo de mensajes.
  • Grupo de consumidores: Un proceso consumidor forma parte de un grupo de consumidores concreto
  • Las particiones existentes en el topic al que está suscrito el grupo de consumidores son asignadas por Kafka a sus distintos miembros
  • No tendría sentido tener más de cuatro consumidores en el grupo, las particiones ya están asignadas.
  • Rebalanceo: Operación donde se añaden o eliminan consumidores de un grupo, kafka automáticamente reasigna las particiones (heartbeat)
  • Cear y configurar un objeto KafkaConsumer en el que se indiquen, al menos propiedades las propiedades:
  • ubicación de los brókeres
  • deserializadores de clave y valor
  • ID del grupo de consumidores

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Kafka Fundamentals and Architecture
16 questions
Apache Kafka et systèmes de messagerie
11 questions
Apache Kafka și Spark - Quiz Teoretic
42 questions
Use Quizgecko on...
Browser
Browser