簡體   English   中英

Kafka主題分區為Spark流媒體

[英]Kafka topic partitions to Spark streaming

我有一些用例,我想更清楚一點,關於Kafka主題分區 - >火花流資源利用率。

我使用spark獨立模式,所以我只有“執行器總數”和“執行器內存”。 據我所知並根據文檔,將並行性引入Spark流的方法是使用分區的Kafka主題 - >當我使用spark-kafka直接流集成時,RDD將具有與kafka相同數量的分區。

因此,如果我在主題中有1個分區,並且有1個執行程序核心,那么該核心將從Kafka順序讀取。

如果我有:

  • 主題中有2個分區,只有1個執行器核心? 該核心首先從一個分區讀取,然后從第二個分區讀取,因此分區主題沒有任何好處嗎?

  • 主題中有2個分區和2個核心? 然后1個執行器核心從1個分區讀取,第二個核心從第二個分區讀取嗎?

  • 1個kafka分區和2個執行器核心?

謝謝。

基本規則是您可以擴展 Kafka分區的數量。 如果將spark.executor.cores設置spark.executor.cores大於分區數,則某些線程將處於空閑狀態。 如果它小於分區數,Spark將從一個分區讀取線程,然后從另一個分區讀取。 所以:

  1. 2個分區,1個執行器:從一個分區讀取,然后從另一個分區讀取。 (我不確定Spark如何決定在切換之前從每個讀取多少)

  2. 2p,2c:並行執行

  3. 1p,2c:一個線程空閑

對於情況#1,請注意,具有比執行程序更多的分區是可以的,因為它允許您稍后向外擴展而無需重新分區。 訣竅是確保您的分區可以被執行程序的數量整除。 在將數據傳遞到管道中的下一步之前,Spark必須處理所有分區。 因此,如果您有“余數”分區,這可能會降低處理速度。 例如,5個分區和4個線程=>處理需要2個分區的時間 - 一次4個,然后一個線程自己運行第5個分區。

另請注意,如果通過顯式設置reduceByKey()等函數中的數據分區數來保持整個管道中的分區/ RDD數相同,您也可以看到更好的處理吞吐量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM