2014-11-05 95 views
0

我正試圖想出一個從Kafka消費的設計。我正在使用卡夫卡的0.8.1.1版本。我正在考慮設計一個系統,每隔幾秒創建一次消費者,從卡夫卡消費數據,處理它,然後在向卡夫卡提交補償後退出。在任何時間點,期望250-300個消費者都能活躍(在不同的機器上作爲ThreadPools運行)。重新平衡Kafka中某個主題的分區的代價

  1. 如何以及何時發生分區重新平衡?

  2. 消費者之間的分區重新平衡成本如何。我期待新消費者每隔幾秒完成一次或加入同一消費羣體。所以我只想知道重新平衡操作的開銷和延遲。

  3. 說消費者C1具有分配給它的分區P1,P2,P3,它正在處理來自分區P1的消息M1。現在消費者C2加入該組織。分區如何在C1和C2之間分配。是否有可能C1(可能需要一段時間才能將信息提交給Kafka)提交給M1將被拒絕,並且M1將被視爲新消息並將被交付給其他人(我知道Kafka至少有一次交付模型,但想確認重新分區是否會導致重複傳遞相同的消息)?

+0

我在Kafka郵件列表中討論過相同的問題。請檢查郵件線程。 http://goo.gl/ImmjRf – Dinesh 2014-11-06 16:42:59

+0

你能得出結論嗎? – Jayesh 2016-09-23 12:00:19

回答

2

如果我是你,我會重新考慮設計。也許你需要一個消費者池?

  1. 每次消費者加入或離開組時都會進行重新平衡。

  2. 卡夫卡和當前的消費者絕對是爲長期消費者設計的。新的消費者設計(計劃爲0.9)將更好地處理短命的消費者。根據我的經驗,重新平衡需要100-500ms,這取決於ZooKeeper的工作方式。

  3. 是的,重新平衡時經常發生重複。這就是爲什麼我們試圖避免它們。您可以嘗試通過更頻繁地提供補償來解決這個問題,但是300名消費者經常提交併且有很多消費者加入和離開 - 您的Zookeeper可能會成爲瓶頸。

+1

請描述您觀察到100-500毫秒延遲的場景。我在卡夫卡郵件列表中討論過這種情況,他們認爲延遲可能會持續幾十秒 – Dinesh 2014-11-06 16:45:36

+0

這是一個非常簡單的測試,並且沒有負載。基本上跑了Flume的Kafka來源,並試圖阻止代理,並看到其餘的時候拿起工作。 – 2014-11-06 17:24:38

相關問題