2017-05-28 51 views
4

我有一個安裝在具有8個內核和32GB RAM的VM上的單個kafka實例。Kafka不會消耗所有生成的數據

我從10臺不同的機器寫入(生產),並從一臺機器中消耗,所有機器都在同一個網絡中。

我生成的數據大小約爲35MBit/s。

由於某些原因,大部分時間我不能消耗超過〜10MBit/s(在有限的時間段內,我設法消耗所有生成的數據),儘管kafka和消費者服務器大多數閒置(因此我不認爲這是保留問題)。

kafka可能會忽略一些生成的數據嗎?

某些參數值,可能是分析有用:

num.network.threads=32 
num.io.threads=16 
message.max.bytes=2147483647 
num.partitions=10 
log.retention.ms=120000 (2 minutes) 
+0

你有acks = 1還是全部爲你的製片人? – dawsaw

+0

@dawsaw不知道,是客戶端屬性?你能否詳細說明一下? – KidCrippler

+1

是的,它在生產者客戶端上。你需要有acks = all來保證經紀人看到了這條消息。 acks = 1保證一個經紀人看到它,這可能是你可以做的最好的事情。此外,生產者的代碼應該處理沒有收到確認以提醒您丟失數據和/或重新發送的情況。 – dawsaw

回答

0

你的保留時間是遠遠太低。如果你的消費者比10個製作人中的任何一個落後2分鐘,那麼這些信息將會丟失。嘗試24小時或至少要有足夠的磁盤空間來填充。默認保留期限爲7天。長時間保持消息也將幫助您調試是否成功進入主題。

+0

我試圖將保留時間增加到1小時(~16GB的數據)無濟於事。過了一小時後,卡夫卡開始掙扎。同樣的情況發生時,我早先嚐試了10分鐘的保留時間 - 它工作了10分鐘,然後開始掙扎。 – KidCrippler

+1

所以這聽起來像只有當卡夫卡刪除過期郵件時纔會出現瓶頸。您正在使用緊湊或刪除的主題上的log.cleanup.policy?你使用什麼樣的存儲?在同時刪除日誌段和寫入新日誌段時,您是否可以超過磁盤IO容量?您的費率不是很高,但如果磁盤非常慢,那麼可能會導致此問題。 –