2016-04-21 47 views
6

Stiamo sviluppando un sistema di streaming basato su kafka in cui il produttore produrrebbe a più partizioni all'interno del suo argomento e un singolo consumatore consumerebbe dall'argomento. So che kafka mantiene l'ordine dei messaggi all'interno delle partizioni, ma possiamo mantenere un ordine globale dei messaggi tra le partizioni all'interno di un argomento?Esiste un modo per mantenere l'ordine dei messaggi tra le partizioni di un argomento di kafka con un singolo consumatore?

+0

Penso che il mantenimento di un ID univoco nei dati di input possa risolvere il problema! – avr

risposta

3

Risposta breve: no, Kafka non fornisce alcuna garanzia di ordinamento tra le partizioni.

Risposta lunga: Io non capisco il problema. Se stai dicendo che hai un solo consumatore che consuma il tuo argomento, perché dovresti avere più di 1 partizione in quell'argomento e reinventare la ruota cercando di mantenere l'ordine tra le partizioni? Se vuoi lasciare un po 'di spazio per la crescita futura, ad es. aggiungendo un altro consumatore per consumare una parte di partizioni, dovrai quindi riconsiderare l'idea di "ordine globale dei messaggi".

Avete davvero bisogno di TUTTI i messaggi da elaborare in ordine? O forse potresti partizionare per client/applicazione/qualsiasi cosa e mantenere l'ordine per partizione? Nella maggior parte dei casi non hai davvero bisogno di quell'ordine globale dei messaggi, ma devi semplicemente partizionare i tuoi dati correttamente.

Mantenimento dell'ordine tra più consumatori è un problema davvero difficile da risolvere, e anche se ha risolto correttamente devi semplicemente trascurare tutti i benefici Kafka.

0

Non è possibile utilizzare Benfit da kafka se si desidera l'ordinamento globale in più di una partizione. Kafka supporta solo l'ordinamento dei messaggi in una sola partizione. Nella nostra azienda, abbiamo bisogno che solo gli stessi messaggi di notifica siano inviati alla stessa partizione, che può facilmente partizionare usando partitionId.