2017-10-12 12 views
1

j'utilise le code C++ suivant pour produire des messages à Kafka:C++ avec Kafka - consommateur reçoit juste des messages de producteurs

#include <thread> 
#include <cppkafka/producer.h> 

using namespace cppkafka; 

int main() 
{ 
    for(int i = 0 ; i < 100 ; i++) 
    { 
     std::cout << "sending msg number: " << i << std::endl; 
     std::string str("{'msg number' : " + std::to_string(i) + "}"); 

     // Create a message builder for this topic 
     MessageBuilder builder("test"); 

     // Construct the configuration 
     Configuration config = 
     { 
      { "metadata.broker.list", "192.168.1.100:9092"} 
     }; 

     // Create the producer 
     Producer producer(config); 

     builder.payload(str); 

     producer.produce(builder); //Only a few messages are received! 

     std::this_thread::sleep_for(std::chrono::milliseconds(50));//If I remove this, no message is received! 
    } 
} 

Sur ma machine où j'ai courir le Zookeeper et Kafka server, je suis en cours d'exécution un consumer, pour afficher les messages reçus, en utilisant ceci:

bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.100:9092 --topic test 

Mon code C++ produit les éléments suivants:

sending msg number: 0 
sending msg number: 1 
sending msg number: 2 
sending msg number: 3 
(...) //from 0 to 99...all the messages are sent! 
sending msg number: 98 
sending msg number: 99 

j'attendais le consommateur, de recevoir tous ces messages, mais je vois que quelques-uns:

{'msg number' : 40} 
{'msg number' : 58} 
{'msg number' : 70} 
{'msg number' : 75} 
{'msg number' : 91} 
{'msg number' : 96} 

Et pas plus reçu.

Si je supprime la ligne:

std::this_thread::sleep_for(std::chrono::milliseconds(50)); 

je ne reçois aucun message. Pourquoi mon serveur Kafka ne reçoit-il pas tous mes messages?

+1

Serait-ce une sorte de prévention du spam, à savoir l'envoi de messages trop rapidement et le serveur est juste les amerrissage>? – GPPK

+0

J'ai pensé à cela, c'est pourquoi j'ai mis le sommeil (50ms). De toute façon, si je l'utilise, je ne reçois toujours pas tous les messages. Kafka ne devrait-il pas pouvoir tout recevoir et les mettre en file d'attente? – waas1919

+1

Salut @GPPK pouvez-vous mettre votre commentaire comme réponse? Vous avez raison et c'est la réponse à cette question. – waas1919

Répondre

1

Original Commentaire:

Il est probablement sorte de prévention du spam, à savoir l'envoi de messages trop rapidement et le serveur est juste les amerrissage

Il y a beaucoup de différentes techniques anti-spam développés par les fournisseurs de serveurs web. C'est pour empêcher quelqu'un de spammer votre serveur en envoyant des tonnes de trafic Web. Je pense que cela est probablement ce que vous faites

https://en.wikipedia.org/wiki/Anti-spam_techniques