2016-02-29 5 views
9

Gibt es eine elegante Möglichkeit, ein Kafka-Thema für einen bestimmten Datensatz abzufragen? Die von mir erstellte REST-API erhält eine ID und muss Datensätze suchen, die mit dieser ID in einem Kafka-Thema verknüpft sind. Ein Ansatz besteht darin, jeden Datensatz im Thema über einen benutzerdefinierten Verbraucher zu prüfen und nach einer Übereinstimmung zu suchen, aber ich möchte den Aufwand vermeiden, eine Menge Datensätze zu lesen. Hat Kafka eine schnelle, eingebaute Filterfunktion?Kafka-Thema für spezifischen Datensatz abfragen

+3

Wie Chris weist darauf hin, Kafka bietet einen Mechanismus zum Abrufen einzelner Datensätze. Aber ich warne davor, dass Kafka nicht primär dafür entwickelt wurde, http://kafka.apache.org/documentation.html#uses. Wenn Sie Kafka hauptsächlich zum Abrufen einzelner Nachrichten aus einem Thema verwenden, könnte die Verwendung einer anderen Software besser zu Ihrem Anwendungsfall passen. – morganw09dev

+1

Ja, ich habe beschlossen, einen Kafka-Consumer zu implementieren, der in eine Mongo-Datenbank schreibt, und dann kann meine REST-API die einzelnen Datensätze von dort anfordern. Ich wählte Chris Antwort, weil es meinen Verdacht bestätigte, dass es nicht (zumindest elegant) möglich war. – user554481

Antwort

7

Die einzige schnelle Möglichkeit, nach einem Datensatz in Kafka zu suchen (um zu vereinfachen), ist Partition und Offset. Die neue Producer-Klasse kann über Futures die Partition und den Offset zurückgeben, in den eine Nachricht geschrieben wurde. Sie können diese beiden Werte verwenden, um die Nachricht sehr schnell abzurufen.

Also, wenn Sie die ID aus der Partition und Offset machen, dann können Sie Ihre schnelle Abfrage implementieren. Sonst nicht so sehr. Dies bedeutet, dass die ID für ein Objekt nicht Teil Ihres Datenmodells ist, sondern durch den Kafka-Wissenscode generiert wird.

Vielleicht funktioniert das für Sie, vielleicht nicht.

+0

[Methode, die die Zukunft zurückgibt] (https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html#send (org.apache.kafka.clients.producer.ProducerRecord)) enthält Partition und Offset – ruhong

1

Dies ist für Sie zu spät sein könnte, aber es wird für Hilfe, wie andere diese Frage sehen, jetzt gibt es KSQL ist kafka sql ein Open-Source-Streaming-SQL-Engine

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

+0

AFAIK Kafka Streams macht clientseitige Filterung, nicht auf Broker. So holen Sie immer noch alle Daten über das Netzwerk. –

+0

Ja, Sie sind richtig @SergeyKostrukov –

Verwandte Themen