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
Antwort
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.
[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
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
AFAIK Kafka Streams macht clientseitige Filterung, nicht auf Broker. So holen Sie immer noch alle Daten über das Netzwerk. –
Ja, Sie sind richtig @SergeyKostrukov –
- 1. Searchkick manuell entfernen spezifischen Datensatz Index
- 2. MySQL Abfragen - Überprüfen Sie einen Datensatz
- 3. Anmerkung für spezifischen Datentyp
- 4. spezifischen Datensatz auf erste in Zeile Laravel Abfrage Builder
- 5. Gesamtzeilenanzahl für MySQL Multi-Abfragen
- 6. Wie Ergebnisse von zwei Abfragen in einem einzelnen Datensatz
- 7. Wie sollte ich meinen Datensatz am besten von VB.net abfragen?
- 8. Ad-hoc-Abfragen an einen massiven JSON-Datensatz
- 9. Können wir einen Datensatz wie eine SQL-Abfrage abfragen?
- 10. MySQL Abfragen zu langsam auf neuen Datensatz - mariaDB
- 11. Gibt zwei ActiveRecord-Abfragen einen Datensatz als dasselbe Objekt zurück?
- 12. Datensatz für Parkett
- 13. Datensatz für LeNet erstellen?
- 14. Beispiele für parametrisierte Abfragen
- 15. machen spezifischen CSS-Code für IE10
- 16. Beispiel für persistent mit Backend-spezifischen Operator
- 17. Finden Datensatz, der Datensatz mit bestimmten ID
- 18. Build IQueryable.Any mit Ausdrucksbaumstrukturen für LINQ-Abfragen
- 19. Wie Datensatz als Json für Outer Join aktiven Datensatz auflisten
- 20. Deaktivieren IDENTITY_INSERT für Datensatz einfügen
- 21. Guter Datensatz für die Stimmungsanalyse?
- 22. Finde NSDate für den nächsten spezifischen Wochentag für jedes Datum
- 23. Mysql: ROLLBACK für mehrere Abfragen
- 24. Gespeicherte Prozeduren für komplexe Abfragen
- 25. erlang for-Schleife für Abfragen
- 26. Unterstützung für geschachtelte DynamoDB-Abfragen
- 27. Leistungseinbuße für verschachtelte MySQL-Abfragen
- 28. Nicht in der Lage, spezifischen Datensatz von PHP zwei multidimensionale Array von Schleife
- 29. Wie kann ich einen Datensatz von verwandten Modell durch spezifischen Wert mit HAS_MANY Beziehung
- 30. Abfrage von CloudKit für Datensatz-ID IN [CKRecordID]
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
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