簡體   English   中英

Spark 和 Kafka:如何提高生產者發送大量記錄的並行度以提高網絡使用率?

[英]Spark and Kafka: how to increase parallelism for producer sending large batch of records improving network usage?

我正在深入了解如何從 Spark 向 Kafka 主題發送(生成)大量記錄。

文檔中,我可以看到有人試圖在相同工作人員的任務中使用相同的生產者。 當一次發送大量記錄時,網絡將成為瓶頸(以及內存,因為 kafka 會緩沖要發送的記錄)。 所以我想知道提高網絡使用率的最佳配置是什么:

  1. 更少的工人擁有更多的內核(所​​以我想,這意味着更多的線程)
  2. 更多的工人,每個工人的核心更少(所以我想我們將使用更好的網絡 IO,因為它將分布在不同的機器上)

假設我對 1 和 2 的選項如下(來自 Databricks):

  1. 4 個工人,每個工人 16 個核心 = 64 個核心
  2. 10 個工人,每個工人 4 個核心 = 40 個核心

為了更好地利用網絡IO,哪個是最好的選擇?

我現在對此的想法,但我不確定,所以我在這里問你:雖然從 CPU 的角度來看(昂貴的計算工作),1)會更好(更多的並發性,更少的洗牌),從從網絡 IO 的角度來看,我寧願使用 2),即使我的整體內核數量較少。

感謝您對此的任何意見。

謝謝你們。

最好的解決方案是讓更多的工人來實現並行(水平擴展)。 DataFrame 必須使用 Kafka 作為接收器的流寫入到 Kafka,如這里所解釋的https://docs.databricks.com/spark/latest/structured-streaming/kafka.html (如果您不想擁有持久流,您可以始終使用選項觸發器一次)。 此外,您可以假設 1 個數據幀分區 = 1cpu,因此您可以另外優化這種方式(但流中的數據塊通常會自動處理它)。

在 Kafka 方面,我想擁有類似於 spark/databricks 工人的分區/代理數量可能會很好。

暫無
暫無

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

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