2015-03-13 15 views
5

Invio un file come messaggio convertendolo in un array di byte utilizzando kafka producer.Aggiunta di intestazioni personalizzate nel messaggio di Kafka

Ho anche bisogno di aggiungere alcune intestazioni per il messaggio, ad esempio nome file, data e ora ecc. Quindi al consumatore posso elaborare il messaggio in base al nome del file e ad altre intestazioni.

Quello che sto facendo attualmente è creare un oggetto e avvolgere il messaggio e le intestazioni in esso contenuti e inviare l'oggetto in un array di byte come un messaggio.

Vorrei sapere se esiste un modo in cui è possibile aggiungere intestazioni personalizzate durante la pubblicazione del messaggio?

risposta

4

Kafka è agnostico per il contenuto del messaggio e non fornisce alcun mezzo speciale per arricchirlo, quindi è qualcosa che devi fare da solo. Un modo comune per gestire queste cose è utilizzare un formato strutturato come json, avro o simili in cui sei libero di definire i campi necessari e potresti facilmente aggiungere metadati al tuo messaggio e spedirlo ai broker di Kafka.

+1

quindi in questo caso otterrò tutto il messaggio nell'intero argomento e quindi analizzerò ciascun messaggio e poi basandomi sui miei metadati applicherò una qualche logica, ho pensato che ci sarebbe stato un modo per ottenere un messaggio composto da alcuni metadati specifici invece di tutti i messaggi – CTDex

0

Ho avuto problemi simili con i progetti su cui ho lavorato, quindi ho creato questa semplice libreria per risolvere il problema: https://github.com/leandronunes85/messaging. Per ora contiene un'implementazione basata su Avro ma può essere estesa per utilizzare qualsiasi altro framework di serializzazione a tua scelta.

Devi solo creare un (de) serializzatore per gli oggetti che vuoi avere sullo stream (basato su Avro o meno) e lasciare che AvroMessageSerializer funzioni la sua magia.

Questa è ancora una biblioteca molto giovane, ma credo che possa risparmiare molte persone un sacco di tempo!

8

Kafka v0.11.0.0 aggiunge il supporto per intestazioni personalizzate.

È possibile aggiungerli quando si crea una ProducerRecord come questo:

nuova ProducerRecord (chiave, valore, intestazioni, ...), in cui le intestazioni è di tipo Iterable <Header>

Per ulteriori dettagli si veda:

https://issues.apache.org/jira/browse/KAFKA-4208

https://cwiki.apache.org/confluence/display/KAFKA/KIP-82+-+Add+Record+Headers

+0

Si prega di dimostrare come questo risolve il problema nella risposta stessa. –

+0

Capito, fatto. –

Problemi correlati