[英]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將從一個分區讀取線程,然后從另一個分區讀取。 所以:
2個分區,1個執行器:從一個分區讀取,然后從另一個分區讀取。 (我不確定Spark如何決定在切換之前從每個讀取多少)
2p,2c:並行執行
1p,2c:一個線程空閑
對於情況#1,請注意,具有比執行程序更多的分區是可以的,因為它允許您稍后向外擴展而無需重新分區。 訣竅是確保您的分區可以被執行程序的數量整除。 在將數據傳遞到管道中的下一步之前,Spark必須處理所有分區。 因此,如果您有“余數”分區,這可能會降低處理速度。 例如,5個分區和4個線程=>處理需要2個分區的時間 - 一次4個,然后一個線程自己運行第5個分區。
另請注意,如果通過顯式設置reduceByKey()
等函數中的數據分區數來保持整個管道中的分區/ RDD數相同,您也可以看到更好的處理吞吐量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.