Spark Streaming是一堆連續的RDD
1.資料讀取:可以從某個socket定時拉取資料,間隔一段時間生成一個批次的RDD(對流的處理實際上是對某一個批次的RDD進行處理),相當于用杯子接水,一杯水一個批次資料
Spark集群真正處理資料的是worker節點
非直連模式
1.worker節點會有一個executor行程,然后會創建一個receiver物件去拉取資料(比如從kafka)
2.receiver可以同時拉取多個topic的資料,并使用多個執行緒同時讀取
3.如果取數太多,記憶體放不下,因為設定了Checkpoint,設定hdfs地址,把資料記錄記錄在log保存到hdfs中,避免資料丟失
4.這個取數偏移量由zk管理
5.效率慢
直連模式
1.沒有receiver
2.一個executor直接連到一個broker下的partition(一個對應一個副本),這時候對應關系想當于,一個kafka的磁區對應rdd的一個磁區
3.一段時間去kafka拉取一部分資料,這個偏移量需要自己管理,資料處理完之后,用kafkacluster實體進行計算偏移量,保存到zk(還可以利用checkpoint存入到hdfs,資料庫或者檔案記錄)中,下次去拉取資料前,先去zk查找偏移量
4.kafka一個topic的磁區個數可以和rdd的磁區個數保持一致,一一對應,提高效率
5.比較非直連,可以控制取數流量,不要溢位
如果需要計算某一個時間段內的資料,可以使用窗戶函式
Spark往Kafka寫資料
1.實體化KafkaProducer
2.同步寫入,異步寫入見Kafka相關描述
Kafka+Spark調優
1.設定合理的批處理時間,避免資料處理不及時堆積
2.設定Kafka資料拉取速率,太快資料堆積,太慢效率太差
3.設定合理磁區個數
4.設定合理CPU資源數
5.使用高性能算子
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/37619.html
標籤:Spark
上一篇:Docker 里怎么配置虛擬域名
下一篇:python中字典存盤無向圖節點
