2016-11-02 3 views
1

Ich habe Kafka kürzlich verwendet und Kafka für einige Anwendungsfälle ausgewertet.Dateiring für Kafka-Nachrichten implementieren

Wenn wir die Möglichkeit bieten möchten, Nachrichten für Kunden (Abonnenten) basierend auf Nachrichteninhalt zu filtern, was ist der beste Ansatz dafür?

Sprich ein Thema namens „Trades“ von Produzenten ausgesetzt ist, die Details als Markt Namen so unterschiedliches Gewerke hat, Erstellungsdatum, Preis etc.

Einige Verbraucher für einen bestimmten Märkte in Handel interessiert sind und andere daran interessiert sind, Trades nach bestimmtem Datum usw. (Inhaltsfilterung)

Als Filterung auf Broker Seite nicht möglich ist, was ist am besten möglich Ansatz unter Fällen für die Umsetzung:

  1. Wenn Filterkriterien Verbraucher spezifisch sind. Sollten wir Consumer-Interceptor verwenden (obwohl Interceptor für die Protokollierung Zwecke wie Dokumentation vorgeschlagen)?
  2. Wenn Filterkriterien (content-based filtering) bei Verbrauchern üblich sind, wie sollte der Ansatz aussehen?

zum Thema Hören und die Nachrichten lokal filtern und zu neuem Thema schreiben

+0

Was hast du bisher gemacht? –

+0

Nicht sicher, was Sie anstreben. Sie können auf der Brokerseite keine Filterung durchführen, wenn dies das Ziel wäre. Oder wollen Sie ein Thema konsumieren, filtern und auf ein neues Thema zurückschreiben? Können Sie Ihre Frage formulieren? –

+0

@ MatthiasJ.Sax, Ich habe Post aktualisiert und Beispiel zur Verfügung gestellt. – RGoyal

Antwort

0

Erstellen Sie Ihre eigene Interceptor-Klasse (entweder Abfangjäger oder Streams verwendet wird), der org.apache.kafka.clients.consumer.ConsumerInterceptor implementiert und implementieren Ihre Logik in der Methode 'onConsume', bevor 'interceptor.classes' config für den Consumer gesetzt wird.

+0

, als Interceptor sind hauptsächlich für Protokollierung und Überwachung Zweck entwickelt. Das Implementieren der Filterung auf dem Interceptor bedeutet das effektive Implementieren von Filtern in Konsumentencode. – RGoyal

+0

Sie möchten also Filterlogik auf der Serverseite schreiben? – amethystic

+0

ja, ich wollte etwas wie serverseitige Filterung – RGoyal

1

Wenn ich Sie Frage richtig verstehe, haben Sie ein Thema und andere Verbraucher, die an bestimmten Teilen des Themas interessiert sind. Gleichzeitig besitzen Sie diese Verbraucher nicht und wollen vermeiden, dass diese Verbraucher nur das ganze Thema lesen und die Filterung selbst durchführen?

Dafür die einzige Möglichkeit, es zu erstellen, eine neue Anwendung zu erstellen, die das gesamte Thema liest, filtert (oder tatsächlich teilt) und schreibt die Daten zurück in zwei (mehrere) verschiedene Themen. Der externe Verbraucher würde Verbraucher von diesen neuen Themen und nur erhalten das Datum, das sie interessiert sind.

Mit Kafka Streams für diesen Zweck wäre ein sehr guter Weg zu gehen. Das DSL sollte alles bieten was du brauchst.

Alternativ können Sie auch Ihre eigene Anwendung mit KafkaConsumer und KafkaProducer schreiben, um die Filterung/Aufteilung manuell in Ihrem Benutzercode durchzuführen. Dies wäre nicht viel anders als die Verwendung von Kafka-Streams, da eine Kafka Streams-Anwendung intern genau dasselbe tun würde. Mit Streams wäre Ihr Aufwand jedoch viel geringer.

Ich würde keine Interzeptoren dafür verwenden. Selbst wenn das funktionieren würde, scheint es kein gutes Software-Design für Sie zu sein.

+0

Danke. Ihr Verständnis ist korrekt. Einige Verbraucher gehören unserer Anwendung und andere nicht. Also nur die Filterung ist möglich, um die Daten zu konsumieren und die Fülldaten zu einem neuen Thema zu schreiben? – RGoyal

+0

Ja. Wenn Sie einige Kunden nicht besitzen, können Sie nur verhindern, dass sie alle lesen, indem Sie die Teile, die sie interessieren, in ein neues Thema schreiben. –

Verwandte Themen