2017-10-10 3 views
0

J'essaie d'amener mon consommateur à mettre à jour dynamiquement sa consommation. Permettez-moi de vous donner un exemple plus concret en utilisant des animaux. Imaginez que j'ai une animalerie, chaque sujet est un type d'animal (par exemple les chiens, les chats, les poissons). La principale responsabilité de mon client Kafka est de saisir tout journal/enregistrement/message que nous avons dans Kafka et de les stocker dans une base de données. Supposons que mon consommateur consomme activement sur les sujets dogs et cats et que tout fonctionne bien, un nouveau type d'animal arrive dans le magasin et un nouveau sujet est généré dans le groupe Kafka. Comment puis-je informer mon client qu'un nouveau sujet a été ajouté?Comment informer le consommateur qu'un nouveau sujet a été créé dans Kafka?

J'ai deux propositions et je veux savoir laquelle est la meilleure? Ou s'il y a une meilleure 3ème option, s'il vous plaît faites le moi savoir.

1.) Le producteur envoie une requête http au consommateur et laisse le consommateur savoir que le producteur est sur le point de créer un nouveau sujet afin que le consommateur puisse agir en conséquence. Le problème avec cette approche est qu'il y a une condition de concurrence. Il y a une chance que le consommateur essaye de consommer avant que le sujet soit même créé. (Je viens de découvrir que si auto.topic.creation.enable est défini sur true, la condition de concurrence n'est pas vraiment un problème.)

2.) Créez un sujet supplémentaire appelé dans le cluster Kafka. Donc, chaque fois que le producteur a envoyé un message au groupe Kafka avec succès, il diffuse les nouvelles par le biais de cette topic_updates, peut-être qu'une simple chaîne suffira. Le consommateur écoute activement les mises à jour de ce sujet.

3.) Je ne sais pas, idéalement, je souhaite que Kafka puisse émettre un événement à chaque fois qu'un nouveau sujet est créé.

Nous vous remercions à l'avance

Répondre

1

consommateur est en mesure de découvrir les nouveaux créé sujets automatiquement, et vous pouvez simplement vous inscrire tous les sujets en invoquant consumer.subscribe(Pattern.compile(".*"));

pourrait plus bas metadata.max.age.ms avoir consommateur au courant de la nouvelle sujets plus rapidement.

0

Vous pouvez utiliser le nouveau KafkaAdminClient et surveiller en quelque sorte la liste des rubriques et vérifier les nouveaux ajouts. Voici un exemple de code qui vous donne la liste des sujets (à l'exclusion des sujets internes):

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());