Todos los ejemplos de Kafka | los productores muestran que el ProducerRecord
par clave / valor no solo es del mismo tipo (todos los ejemplos muestran <String,String>
), sino del mismo valor . Por ejemplo:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Pero en los documentos de Kafka, parece que no puedo encontrar dónde se explica el concepto clave / valor (y su propósito / utilidad subyacente). En la mensajería tradicional (ActiveMQ, RabbitMQ, etc.) siempre he enviado un mensaje a un tema / cola / intercambio en particular. Pero Kafka es el primer corredor que parece requerir pares clave / valor en lugar de solo un mensaje de cadena regular.
Entonces pregunto: ¿Cuál es el propósito / utilidad de exigir a los productores que envíen pares de KV?
KStream
yKTable
- ver aquí .partition
parámetro, se utilizará y la clave se "ignorará" (o por supuesto, la clave seguirá estando escrita en el tema). - Esto le permite tener una partición personalizada incluso si tiene claves.Adición tardía ... Especificar la clave para que todos los mensajes de la misma clave vayan a la misma partición es muy importante para el orden correcto del procesamiento de mensajes si tendrá varios consumidores en un grupo de consumidores sobre un tema.
Sin una clave, dos mensajes en la misma clave podrían ir a diferentes particiones y ser procesados por diferentes consumidores en el grupo fuera de servicio.
fuente
Otro caso de uso interesante
Podríamos usar el atributo clave en los temas de Kafka para enviar user_ids y luego conectar un consumidor para obtener eventos de transmisión (eventos almacenados en atributos de valor). Esto podría permitirle procesar cualquier historial máximo de secuencias de eventos de usuario para crear funciones en sus modelos de aprendizaje automático.
Todavía tengo que averiguar si esto es posible o no. Seguiré actualizando mi respuesta con más detalles.
fuente