2017-01-06 62 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,這可以減少延遲,但也可能導致信息丟失,所以如果在使用默認值時查看代理和測試故障轉移時看到消息丟失,請不要感到驚訝。 –