Solución:
Esta publicación ya tiene respuestas, pero estoy agregando mi vista con algunas imágenes de Kafka Definitive Guide
Antes de responder cada pregunta, agreguemos una descripción general de los componentes del productor:
1. Cuando un productor está produciendo un mensaje, especificará el tema al que desea enviar el mensaje, ¿es así? ¿Le importan las particiones?
El productor decidirá la partición de destino para colocar cualquier mensaje, dependiendo de:
- ID de partición, si se especifica en el mensaje
- particiones clave% num, si no se menciona ninguna identificación de partición
- Round robin si ninguno ID de partición ni clave de mensaje están disponibles en el mensaje, lo que significa que solo el valor está disponible
2. Cuando un suscriptor se está ejecutando – ¿Especifica su ID de grupo para que pueda ser parte de un grupo de consumidores del mismo tema o de varios temas que le interesan a este grupo de consumidores?
Siempre debes configurar Identificación del grupo a menos que esté utilizando la API de asignación simple y no necesite almacenar compensaciones en Kafka. No formará parte de ningún grupo. fuente
3. ¿Cada grupo de consumidores tiene una partición correspondiente en el corredor o cada consumidor tiene una?
En un grupo de consumidores, cada partición será procesada por un solo consumidor. Estos son los posibles escenarios
- El número de consumidores es menos que número de particiones de tema, entonces se pueden asignar múltiples particiones a uno de los consumidores en el grupo
- Numero de consumidores mismo como número de particiones de tema, entonces el mapeo de particiones y consumidores puede ser como se muestra a continuación,
- El número de consumidores es más alto que número de particiones de tema, luego el mapeo de particiones y consumidores se puede ver a continuación, No es efectivo, consulte Consumidor 5
4. ¿Como las particiones creadas por el corredor, por lo tanto, no es una preocupación para los consumidores?
El consumidor debe ser consciente del número de particiones, como se discutió en la pregunta 3.
5. Dado que esta es una cola con un desplazamiento para cada partición, ¿es responsabilidad del consumidor especificar qué mensajes desea leer? ¿Necesita salvar su estado?
Kafka (para ser específico Coordinador de grupo) se encarga del estado de compensación produciendo un mensaje a un interno __consumer_offsets tema, este comportamiento también se puede configurar en manual configurando enable.auto.commit
para false
. En ese caso consumer.commitSync()
y consumer.commitAsync()
puede ser útil para gestionar la compensación.
Más sobre Coordinador de grupo:
- Es uno de los agentes elegidos en el clúster del lado del servidor de Kafka.
- Los consumidores interactúan con el Coordinador de grupo para las confirmaciones de compensación y las solicitudes de recuperación.
- El consumidor envía latidos periódicos al coordinador del grupo.
6. ¿Qué sucede cuando se elimina un mensaje de la cola? – Por ejemplo: La retención fue de 3 horas, luego pasa el tiempo, ¿cómo se maneja el offset en ambos lados?
Si algún consumidor comienza después del período de retención, los mensajes se consumirán según auto.offset.reset
configuración que podría ser latest/earliest
. técnicamente es latest
(comenzar a procesar nuevos mensajes) porque todos los mensajes caducaron en ese momento y retencion es la configuración a nivel de tema.
Vamos a ponerlos en orden 🙂
1 – Cuando un productor está produciendo un mensaje – Especificará el tema al que quiere enviar el mensaje, ¿es así? ¿Le importan las particiones?
De forma predeterminada, al productor no le importa la partición. Tienes la opción de usar un particionador personalizado para tener un mejor control, pero es totalmente opcional.
2 – Cuando un suscriptor se está ejecutando – ¿Especifica su ID de grupo para que pueda ser parte de un clúster de consumidores del mismo tema o de varios temas que le interesan a este grupo de consumidores?
Sí, los consumidores se unen (o crean si están solos) un grupo de consumidores para compartir la carga. No hay dos consumidores del mismo grupo que reciban el mismo mensaje.
3 – ¿Cada grupo de consumidores tiene una partición correspondiente en el corredor o cada consumidor tiene una?
Ninguno. A todos los consumidores de un grupo de consumidores se les asigna un conjunto de particiones, bajo dos condiciones: no hay dos consumidores del mismo grupo que tengan ninguna partición en común, y al grupo de consumidores en su conjunto se le asignan todas las particiones existentes.
4 – ¿Las particiones creadas por el corredor, por lo tanto, no son una preocupación para los consumidores?
No lo son, pero puede ver en 3 que es totalmente inútil tener más consumidores que las particiones existentes, por lo que es su nivel máximo de paralelismo para el consumo.
5 – Dado que esta es una cola con un desplazamiento para cada partición, ¿es responsabilidad del consumidor especificar qué mensajes quiere leer? ¿Necesita salvar su estado?
Sí, los consumidores ahorran un desplazamiento por tema por partición. Kafka se encarga totalmente de esto, no se preocupe.
6 – ¿Qué sucede cuando se elimina un mensaje de la cola? – Por ejemplo: La retención fue de 3 horas, luego pasa el tiempo, ¿cómo se maneja el offset en ambos lados?
Si un consumidor alguna vez solicita un desplazamiento no disponible para una partición en los intermediarios (por ejemplo, debido a la eliminación), ingresa a un modo de error y finalmente se restablece para esta partición al mensaje más reciente o al más antiguo disponible (según el valor de configuración auto.offset.reset) y seguir trabajando.
Usos de Kafka Tema concepción que viene a poner orden en el flujo de mensajes.
Para equilibrar la carga, un tema puede dividirse en varias particiones y replicarse entre los corredores.
Las particiones son secuencias de mensajes ordenadas e inmutables que se añaden continuamente, es decir, un registro de confirmación.
Los mensajes de la partición tienen un número de identificación secuencial que identifica de forma única cada mensaje dentro de la partición.
Las particiones permiten que el registro de un tema escale más allá de un tamaño que cabe en un solo servidor (un intermediario) y actúa como la unidad de paralelismo.
Las particiones de un tema se distribuyen entre los intermediarios del clúster de Kafka, donde cada intermediario maneja los datos y solicita una parte de las particiones.
Cada partición se replica en un número configurable de intermediarios para asegurar la tolerancia a fallas.
Bien explicado en este artículo: http://codeflex.co/what-is-apache-kafka/