Ho letto la documentazione sul sito Web Kafka ma dopo aver tentato di implementare un esempio minimale completo (produttore -> kafka -> consumer) non mi è molto chiaro come lo "stato consumatore", il l'offset deve essere gestito.Apache Kafka: stato consumatore
Alcune informazioni
- Sto utilizzando l'API ad alto livello (Java)
- mia consumatore è una semplice classe con un principale, fondamentalmente la stessa che si trova sulla "quickstart" Kafka pagina
- sto usando Zookeeper
- sto usando un singolo mediatore
Ora, la documentazione dice che la stor consumatori API HighLevel es suo stato utilizzando Zookeeper così mi aspetterei l'offset e quindi lo stato del consumatore sarebbe stato mantenuto tra
- Kafka mediatore riavvia
- consumatori riavvia
Ma purtroppo non è così: ogni Quando riavvio il broker o il consumatore, tutti i messaggi vengono riconsegnati. Ora, probabilmente queste sono domande stupide, ma
In caso di Kafka riavviare: ho capito che è fino al consumatore per mantenere il suo stato in modo probabilmente quando l'intermediario (ri) avvia riconsegnare tutto (!) messaggi e il consumatore decide cosa consumare ... è giusto? Se sì, cosa succede se ho 10,0000,0000 di messaggi?
In caso di riavvio del consumer JVM: se lo stato viene mantenuto su Zookeeper perché i messaggi vengono nuovamente consegnati? È possibile che la nuova JVM abbia una "identità" di consumatore diversa? E in questo caso, come posso legare la precedente identità?
Potrebbe elaborare su come gestire gli offset a livello locale invece che da Kafka? Ad esempio, come si determinano e si calcolano gli offset per ciascun messaggio inviato per essere poi consumati. – David
una volta consumato - aggiungi il timestamp attuale come ID del messaggio e memorizza il messaggio come blob binario (viene inviato in formato avro e non lo deserializziamo a questo punto) in hsql (con persistenza su disco), oppure puoi usare apache phoenix e archivio c'è in formato binario con due colonne ID (timestamp), Message (VARBINARY) – alex
Ma come si riferisce all'offset del messaggio? Il valore di offset di Kafka non è un timestamp o una codifica binaria del messaggio o dell'hash di entrambi? Sono ancora nuovo di Kafka, quindi perdona la mia ignoranza. – David