2017-10-12 3 views
1

ich folgenden C++ Code bin mit Nachrichten zu Kafka produzieren:C++ mit Kafka - Verbraucher erhalten nur einige Produzenten Nachrichten

#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! 
    } 
} 

Auf meinem Rechner, wo ich die Zookeeper und Kafka server laufen habe, ich renne ein consumer, die empfangenen Nachrichten zu zeigen, indem diese mit:

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

Mein C++ Code erzeugt die folgende:

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 

Ich habe erwartet, die Verbraucher, all diese Nachrichten zu empfangen, aber ich sehe nur ein paar:

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

Und nicht mehr empfangen.

Wenn ich entfernen Sie die Zeile:

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

Ich erhalte keine Meldung. Warum empfängt mein Server Kafka nicht alle meine Nachrichten?

+1

Könnte es irgendeine Art von Spam-Prävention tun, das heißt das Senden von Nachrichten zu schnell aus und der Server Notwasserung sie nur>? – GPPK

+0

Ich dachte daran, deshalb habe ich den Schlaf gelegt (50ms). Wie auch immer, wenn ich das benutze, erhalte ich immer noch nicht alle Nachrichten. Sollte Kafka nicht in der Lage sein, alles zu empfangen und in die Warteschlange zu stellen? – waas1919

+1

Hallo @GPPK können Sie Ihren Kommentar als Antwort setzen? Du hast recht und das ist die Antwort auf diese Frage. – waas1919

Antwort

1

Original-Kommentar:

Es ist wahrscheinlich eine Art Spam-Prävention, dh das Senden von Nachrichten zu schnell aus und der Server nur ist Notwasserung sie

Es gibt viele verschiedene Anti-Spam-Techniken entwickelt, von Webserver-Anbietern. Dadurch wird verhindert, dass jemand Ihren Server mit dem Senden von Tonnen von Web-Traffic spammt. Ich denke, das wahrscheinlich ist, was Sie

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

Verwandte Themen