1

我想指出一個鏡子製造商的卡夫卡並行模型。卡夫卡鏡子製造商:消費者vs消費者線程號和製造商編號

對於我所瞭解的消費者方面:

  • 消費羣是一組消費者。該組的每個消費者可以從一個或多個主題中讀取。

  • 該組的消費者可以有多個流,即從主題讀取的線程數,最佳實踐是擁有一個分區線程。

我的疑問是:我們有多線程消費者多線程還是單線程消費者?消費者羣是指一組消費者還是一個多線程消費者?

我發現很難從文檔中指出這些問題,我想知道我是否錯了。

即使在生產者方面,這些是否以雙重方式考慮價值?

回答

8

在MirrorMaker(MM)的線程模型如下:

MM部署Ñ線程。

  1. 每個線程實例化並使用一個消費者。這是MM線程和消費者之間的映射。
  2. 每個線程共享相同的生產者。這是線程和生產者之間的映射。

因此,可以定義作爲用於MM的屬性(由傳遞給num.streams屬性值給定)的流的數目對應於MM線程數和上述的組合也作爲說明消費者的數量。

現在,您的具體問題的答案是,此數字還對應於消耗主題和分區記錄的線程(或流)的總數。

爲什麼在MM中有點混亂,因爲它可以讓您選擇使用舊的高級消費者還是新的消費者。但是,在這兩種情況下的線程消耗的總記錄數分別爲num.streams = N,原因如下:

  1. 當使用舊的消費者高層次的API,線程數每個消費者部署到消費記錄是由MM硬編碼到1個線程。 (您可以通過查看在MirrorMaker.scala中傳遞給createMessageStreamsByFilter方法的參數來確認這一點)。由於每個MM線程對一個消費者進行實例化,因此我們最終會使用消耗記錄的線程。

  2. 如果使用新的消費者API,消費者API不會在消費者API下部署線程以消耗記錄(存在心跳線程實例化但與討論無關)。因此,這裏更簡單的是消耗記錄的線程數等於MM線程的數量,這也是因爲MM將一個線程映射到它實例化的每個消費者。

希望這會有所幫助。

+0

謝謝。但是現在我還有一個疑問:由於生產者映射N:1與線程,我應該在MM上實例化多少個生產者?例如,如果我有4個目標主題,每個主題有3個分區,最好有一個生產者。 4個生產者或12個生產者? –

+0

爲了確保我們在同一頁面上,MM中的生產者數量等於您實例化的MM java進程的數量(MM固定爲每個MM進程使用1個生產者)。 請允許我首先說明明顯的。分區數表示關於並行性的合理上限。因此,12分區意味着產生超過12個流(和/或12個生產者)將使一些流/線程空閒。 –

+0

現在,關於剩下的並行性(這裏是1到12),能夠給你提供最佳效率的確切設置取決於幾個因素。您的分區,記錄容量,網絡容量等的平衡......我沒有做過詳盡的大規模MM的測試,但每個MM流程中有1個流在很多情況下都能正常工作,而且如果您無法承受太多的集羣節點,每個生產者的數個流仍然會擴展,總的來說,它優於運行MM,1個生產者和1個流來處理所有主題。但不知道你的設置的具體情況,這仍然是一個受過教育的猜測。 –