2016-02-29 25 views
9

Esiste un modo elegante per interrogare un argomento di Kafka per un record specifico? L'API REST che sto sviluppando ottiene un ID e deve cercare i record associati a quell'ID in un argomento di Kafka. Un approccio è quello di controllare ogni record nell'argomento tramite un consumatore personalizzato e cercare una corrispondenza, ma vorrei evitare l'overhead di leggere un sacco di record. Kafka ha una capacità di filtraggio veloce e integrata?Query argomento Kafka per record specifici

+3

Come Chris fa notare, Kafka fornisce alcuni meccanismi per il recupero di singoli record. Ma vorrei dire che questo non è ciò per cui Kafka è principalmente progettato, http://kafka.apache.org/documentation.html#uses. Se stai utilizzando Kafka principalmente per recuperare singoli messaggi da un argomento, l'utilizzo di un software diverso potrebbe adattarsi meglio al tuo caso d'uso. – morganw09dev

+1

Sì, ho deciso di implementare un consumer Kafka che scrive su un database Mongo e quindi la mia API REST può richiedere i singoli record da lì. Ho votato la risposta di Chris perché confermava il mio sospetto che non fosse possibile (almeno con eleganza). – user554481

risposta

7

L'unico modo veloce per cercare un record in Kafka (per semplificare eccessivamente) è per partizione e offset. La nuova classe di produttori può restituire, tramite future, la partizione e l'offset in cui è stato scritto un messaggio. È possibile utilizzare questi due valori per recuperare molto rapidamente il messaggio.

Quindi, se si crea l'ID fuori dalla partizione e l'offset, è possibile implementare la query veloce. Altrimenti, non così tanto. Ciò significa che l'ID di un oggetto non fa parte del tuo modello di dati, ma piuttosto è generato dal codice Kafka-wellledgable.

Forse questo funziona per voi, forse no.

+0

[Metodo che restituisce il futuro] (https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html#send (org.apache.kafka.clients.producer.ProducerRecord)) contenente partizione e offset – ruhong

1

questo potrebbe essere tardi per voi, ma vi aiuterà a come gli altri questa domanda, vi KSQL, Kafka SQL è un open-source streaming motore SQL

https://github.com/confluentinc/ksql/

+0

AFAIK Kafka Stream esegue il filtraggio sul lato client, non sul broker. Quindi stai ancora recuperando tutti i dati sulla rete. –

+0

Sì, sei corretto @SergeyKostrukov –

Problemi correlati