Pregunta ¿Cuál es el propósito de la mensajería basada en pares clave / valor de Kafka?


Toda la ejemplos de Kafka | productores mostrar la ProducerRecordEl par clave / valor no solo es del mismo tipo (todos los ejemplos muestran <String,String>), pero lo 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 los mensajes tradicionales (ActiveMQ, RabbitMQ, etc.) siempre he activado un mensaje en un tema / cola / intercambio en particular. Pero Kafka es el primer intermediario que parece necesitar pares clave / valor en lugar de solo un mensaje regular de cadena.

Entonces pregunto: ¿Cuál es el propósito / utilidad de exigir a los productores que envíen pares KV?


32
2017-11-29 17:52


origen


Respuestas:


Kafka utiliza la abstracción de un distribuido Iniciar sesión que consiste en particiones. La división de un registro en particiones permite escalar el sistema.

Llaves se utilizan para determinar la partición dentro de un registro al que se anexa un mensaje. Mientras que el valor es la carga real del mensaje. Los ejemplos en realidad no son muy "buenos" con respecto a esto; por lo general, tendría un tipo complejo como valor (como un tipo de tupla o un JSON o similar) y extraería un campo como clave.

Ver: http://kafka.apache.org/intro#intro_topics y http://kafka.apache.org/intro#intro_producers

En general, la clave y / o el valor pueden ser null, también. Si la clave es null una partición aleatoria será la seleccionada. Si el valor es null eso poder tienen semántica especial de "eliminación" en caso de que habilite la compactación de registro en lugar de la política de retención de registros para un tema (http://kafka.apache.org/documentation#compaction)


37
2017-11-29 20:53