使用Kafka的C ++ - 消费者只接收一些生产者消息

时间:2017-10-12 10:37:14

标签: c++ apache-kafka kafka-consumer-api kafka-producer-api

我正在使用以下C++代码向Kafka生成消息:

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

在我运行ZookeeperKafka server的计算机上,我正在运行consumer,以显示收到的消息,使用此功能:

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

我的C++代码产生以下内容:

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

我期待消费者接收所有这些消息,但我只看到一些消息:

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

不再收到了。

如果我删除该行:

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

我没有收到任何消息。 为什么我的Kafka服务器没有收到我的所有邮件?

1 个答案:

答案 0 :(得分:2)

原评:

  

这可能是一种垃圾邮件预防措施,即过快地发送邮件而服务器只是放弃它们

Web服务器提供商开发了许多不同的反垃圾邮件技术。这是为了阻止某人通过发送大量网络流量来向您的服务器发送垃圾邮件。我想这可能就是你在做什么

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