2013-07-31 30 views
6

Come ottenere esattamente il riconoscimento da Kafka una volta che il messaggio è stato consumato o elaborato. Potrebbe sembrare stupido, ma esiste un modo per conoscere l'offset iniziale e finale di quel messaggio per il quale è stata ricevuta l'ack?Come ottenere conferma da Kafka

risposta

1

Quello che ho trovato finora è di 0,8 hanno introdotto il seguente modo per scegliere l'offset per la lettura ..

kafka.api.OffsetRequest.EarliestTime() trova l'inizio dei dati nel registra e avvia lo streaming da lì, kafka.api.OffsetRequest.LatestTime() riprodurrà solo i nuovi messaggi.

esempio di codice https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

Ancora non è sicuro circa la parte riconoscimento

1

Kafka non è realmente strutturato per fare questo. Per capire perché, rivedere la documentazione di progettazione here.

Per fornire una conferma esatta una volta, è necessario creare un sistema di tracciamento esterno per l'applicazione, in cui si scrivono esplicitamente i riconoscimenti e si implementano i blocchi sugli ID della transazione per garantire che le operazioni vengano elaborate una sola volta. Il costo computazionale dell'implementazione di questo sistema è straordinariamente alto ed è una delle ragioni principali per cui i grandi sistemi transazionali richiedono hardware relativamente esotici e hanno una scalabilità probabilmente inferiore rispetto a sistemi come Kafka.

Se non si richiede una semantica di durevolezza, è possibile utilizzare l'API dei gruppi per tenere traccia approssimativa della lettura dell'ultimo messaggio. Ciò garantisce che ogni messaggio venga letto almeno una volta. Tieni presente che, poiché l'API dei gruppi non ti consente di monitorare esplicitamente la logica di elaborazione della tua applicazione, le tue effettive garanzie di elaborazione sono abbastanza deboli in questo scenario. Gli schemi che si basano sull'elaborazione idempotent sono comuni in questo ambiente.

In alternativa, è possibile utilizzare l'API SimpleConsumer con il nome errato (è piuttosto complesso da utilizzare), che consente di tracciare in modo esplicito timestamp all'interno dell'applicazione. Questo è il livello più alto di garanzia di elaborazione che può essere raggiunto tramite le API native di Kafka poiché consente di tenere sotto controllo le proprie applicazioni dei dati che vengono letti dalla coda.