Todos os exemplos de Kafka | produtores mostram o ProducerRecord
par chave / valor de não apenas como sendo o mesmo tipo (todos os exemplos mostram <String,String>
), mas o mesmo valor . Por exemplo:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Mas nos documentos do Kafka, não consigo encontrar onde o conceito de chave / valor (e seu propósito / utilidade subjacente) é explicado. Em mensagens tradicionais (ActiveMQ, RabbitMQ, etc.), sempre disparei uma mensagem em um determinado tópico / fila / troca. Mas Kafka é o primeiro corretor que parece exigir pares de chave / valor em vez de apenas uma mensagem regular de string.
Então eu pergunto: Qual é o propósito / utilidade de exigir que os produtores enviem pares de KV?
KStream
eKTable
- veja aqui .partition
parâmetro, ele será usado e a chave será "ignorada" (ou claro, a chave ainda será gravada no tópico). - Isso permite que você tenha um particionamento personalizado, mesmo se você tiver chaves.Inclusão tardia ... Especificar a chave para que todas as mensagens na mesma chave vão para a mesma partição é muito importante para a ordem adequada do processamento de mensagens se você tiver vários consumidores em um grupo de consumidores em um tópico.
Sem uma chave, duas mensagens na mesma chave poderiam ir para partições diferentes e ser processadas por consumidores diferentes no grupo fora de ordem.
fonte
Outro caso de uso interessante
Poderíamos usar o atributo-chave nos tópicos do Kafka para enviar user_ids e, em seguida, conectar um consumidor para buscar eventos de streaming (eventos armazenados em atributos de valor). Isso pode permitir que você processe qualquer histórico máximo de sequências de eventos do usuário para criar recursos em seus modelos de aprendizado de máquina.
Ainda tenho que descobrir se isso é possível ou não. Continuarei atualizando minha resposta com mais detalhes.
fonte