2017-01-06 57 views
1

我正在使用命令行生产者和消费者使用卡夫卡进行测试运行。卡夫卡命令行生产者/消费者有1秒的延迟

我在一个终端窗口

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic tag7 

并且这另一

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic tag7 --zookeeper localhost:2181 

运行此,但它需要在1秒为我发送到由消费者要打印的数据。我发送的数据是我输入给制作人的数据,因此基本上每隔几秒发送一条消息。是否有任何配置选项可以更改,以便卡夫卡经纪人期望每秒发送很少的消息,从而使消息更快地移动?

我使用Zookeeper和Kafka的默认配置,所以我没有配置太多。

预先感谢您!

回答

1

Kafka有两个配置参数 - 一个是设置应答消费者请求之前接收到的最小数据量,另一个是设置在应答请求之前等待此数据到达的最长时间量。

你可以尝试添加以下选项:

--consumer-property fetch.max.wait.ms=0 --consumer-property fetch.min.bytes=0 

欲了解更多信息:

2

由于从Ivan Georgiev答案对我来说没有工作(这不仅是因为它是关于消费者,而不是生产者),我打开another question here in StackOverFlow,最后也Apache's Jirappatierno(感谢)回答为什么它发生了,如何解决它。

为了改变控制台制造商的属性linger.ms(默认为1000毫秒)和batch.size(16384默认情况下),你需要在--timeout--max-partition-memory-bytes命令行分别指定它,例如,如果你在卡夫卡的主文件夹:

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testConsole --timeout 100 
+0

其实这两个答案都是正确的。伊万的答案是你如何调整消费者延迟,这个答案是你如何调整生产者延迟。恰恰相反,制片方的默认值有更多的改进空间。如果你这样做,你应该得到最好的结果,以达到端到端的延迟。 –

+0

是的我知道了(我将把它添加到我的答案中,谢谢!),问题在于它不需要(至少在0.10.2.1版本中)在消费者中做任何调节都不到一秒钟的延迟这是由制片人带来的。 – Franmoti

+0

控制台制造商默认为acks = 1,这可以减少延迟,但也可能导致信息丢失,所以如果在使用默认值时查看代理和测试故障转移时看到消息丢失,请不要感到惊讶。 –