2017-09-08 252 views
0

我正在開發一個apache spark用例,我需要從kafka讀取數據。我有一個非常基本的問題來理解火花從卡夫卡讀取數據的方式。kafka - 多個主題vs多個分區

根據我的理解,如果數據速度和體積很高,那麼我可以在卡夫卡中創建多個分區並在火花中讀取它。現在,dstream中的分區數量與kafka中的分區數量相同。

我可以通過創建多個包含每個分區的kafka主題來實現相同的方案。我可以配置我的卡夫卡製作人將數據按順序推送到所有主題。這將在spark中創建多個dstream。然後,我可以簡單地「聯合」所有的dstream來創建我的unionedDstream。

現在我的問題是在於: -

將「其他dstreams的工會」創建unionedDstream將有相同數量的分區通過讀取「單一話題多個分區」

創建一個爲了清晰起見,我將舉一個例子: -

我有單一生產者和單一消費者。

在第一種方案: -

(1)1個卡夫卡話題4個分區 - > 1 DSTREAM有4個分區

在第二場景: -

(2)4個卡夫卡主題使用1個分區 - > 4個Dstream,每個分區有一個分區。

但是在這裏我可以「聯合」所有的dstream來創建一個dstream。

unionedDstream= dstream1.union(dstream2).union(dstream3).union(dstream4) 

現在將「unionedDstream」變成「帶有4個分區的1個Dstream」(與第一個場景相同)。如果是的話那麼哪個流程會更有效果呢?

回答

2

我認爲它在單節點方案中差不多,但如果您想利用Kafka的集羣/負載平衡功能,您希望有多個分區。

Kafka中的水平縮放是通過在多臺機器上分散消費羣並在其間分配分區來實現的。這隻適用於有多個分區的情況。

如果您在整個機器上分配多個主題,您可能會達到相同的效果。但是,您必須自己實現這一點,並且不能使用Kafka的內置機制。

相關問題