2016-04-29 103 views
1

我們開始使用Apache Kafka將Timeseries數據保存到Timeseries數據庫中。我們開始的只是一個主題,一個生產者寫這個主題,一個消費者閱讀這個主題,並將數據轉儲到Timeseries數據庫。Apache Kafka縮放使用分區的主題

我們有3個經紀人實例,我們在第一次嘗試中注意到的是,製作人在向主題寫消息時速度非常快。在30分鐘內,我們有大約150萬條消息。消費者每秒只能做300條消息。

我們的下一個方法是分割主題並擁有更多的消費者實例(等於分區數量)。這明顯改善了消費者的寫入速度。現在我的問題是:

  1. 如果我將主題分區設置爲6,但我只有3個代理實例,會發生什麼情況。哪個經紀人實例將成爲分區1到6的領導者?

  2. 是否有一個公式來確定我需要多少個分區?由於這是我們的測試環境,我們可以使用它並進行縮放。我們可能無法在我們的生產環境中做同樣的事情。那麼如何確定分區大小?

回答

2

分區在您的經紀人中間分配。不可能知道哪個經紀人會被選爲某個分區的領導者 - 並且可能會隨着時間而改變。根據您使用哪個版本的Kafka和您使用的消費者API,您的消費者可能會或可能不會自行發現分區領導。有了SimpleConsumer,你必須自己找到分區領導,並在代碼中響應新的領導選舉(而不是由API自動處理)。

至於分區的數量 - 除此之外沒有真正的「公式」:除了分區之外,您可以沒有更多的並行性。如果你有4個分區和5個消費者,其中一個消費者會餓死。我通常使用數字12或60或其倍數作爲大型主題的分區數量。一些容易和乾淨地在不同數量的消費者之間劃分的東西。

另外,請注意,您稍後可以更改分區的數量,但有一些注意事項。請參閱this answer瞭解警告的方式和注意事項。

+0

我的問題是哪個經紀商會有領導者分區?我在這裏有6個分區和3個經紀人。那麼每個經紀人都有2個分區作爲主分區嗎? – sparkr

+0

是的,它可以平衡它們。嘗試一下。它還取決於創建主題時正在運行的內容。如果只有一個經紀人在運行,它只會讓領導者去那個經紀人。然後,如果您將第二位經紀人備份起來,它可能會或可能不會自動重新平衡分區領導。有些設置可以控制這種情況(不要從頭頂回收)以及命令行工具來強制重新平衡甚至使設置不平衡。 –

相關問題