Я использую следующее 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!
}
}
На моей машине, где у меня работает Zookeeper
а также Kafka 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
сервер не получает все мои сообщения?
Оригинальный комментарий:
Это, вероятно, своего рода предотвращение спама, то есть отправка сообщений слишком быстро, а сервер просто отключает их.
Существует множество различных методов защиты от спама, разработанных провайдерами веб-серверов. Это сделано для того, чтобы кто-то не спамил ваш сервер, отправляя тонны веб-трафика Я думаю, что это вероятно то, что вы делаете
Других решений пока нет …