2017-10-10 4 views
0

Ich versuche, meinen Verbraucher dynamisch seinen Verbrauch zu aktualisieren.Wie kann der Benutzer benachrichtigt werden, dass ein neues Thema in Kafka erstellt wurde?

Lassen Sie mich Ihnen ein konkreteres Beispiel mit Tieren geben. Stellen Sie sich vor, ich hätte eine Tierhandlung, jedes Thema ist eine Art von Tier (z. B. Hunde, Katzen, Fische). Die Hauptverantwortlichkeit meines Kafka-Konsumenten ist es, alle Protokolle/Aufzeichnungen/Nachrichten, die wir in Kafka haben, zu erfassen und in einer Datenbank zu speichern.

Angenommen, mein Konsument verbraucht aktiv dogs und cats Themen und alles funktioniert gut, jetzt gibt es eine neue Art von Tier in den Laden kommen und ein neues Thema wird im Kafka-Cluster generiert. Wie kann ich meinem Kunden mitteilen, dass ein neues Thema hinzugefügt wurde?

Ich habe zwei Vorschläge und ich möchte sehen, welche ist Ihrer Meinung nach besser? Oder wenn es eine bessere 3. Option gibt, lass es mich wissen.

1.) Der Produzent sendet eine HTTP-Anfrage an den Verbraucher und informiert den Verbraucher darüber, dass der Hersteller ein neues Thema erstellen wird, damit der Verbraucher entsprechend handeln kann. Das Problem bei diesem Ansatz ist, dass es eine Race-Bedingung gibt. Es besteht die Möglichkeit, dass der Verbraucher versucht, zu konsumieren, bevor das Thema überhaupt erstellt wird. (Ich eigentlich gerade entdeckt, dass, wenn ich auto.topic.creation.enable Satz wahr habe, die Race-Bedingung nicht wirklich ein Problem ist.)

2.) Erstellen Sie ein zusätzliches Thema topic_updates in dem Kafka-Cluster genannt. Wenn also der Produzent erfolgreich eine Nachricht an den Kafka-Cluster gesendet hat, sendet er die Nachrichten über diese topic_updates, vielleicht genügt ein einfacher String. Der Verbraucher hört aktiv auf diese Aktualisierung des Themas.

3.) Ich weiß es nicht, idealerweise möchte ich, dass Kafka jedes Mal ein Ereignis ausgibt, wenn ein neues Thema erstellt wird.

Vielen Dank im Voraus

Antwort

1

Verbraucher in der Lage ist, automatisch die neuen erstellten Themen zu erfahren, und man kann einfach alle Themen abonniert, indem consumer.subscribe(Pattern.compile(".*"));

Aufruf kann metadata.max.age.ms weiter unten Verbraucher haben sich die neuen Themen schneller.

0

Sie können den neuen KafkaAdminClient verwenden und die Liste der Themen irgendwie überwachen und nach neuen Zusätzen suchen. Hier ist ein Beispielcode, der Ihnen die Liste der Themen (ohne die internen Themen) gibt:

Properties properties = new Properties(); 
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); 
KafkaAdminClient kafkaAdminClient = (KafkaAdminClient) AdminClient.create(properties); 
ListTopicsResult listTopicResult = kafkaAdminClient.listTopics(); 
System.out.println(listTopicResult.names().get().toString()); 
Verwandte Themen