大數據學習(68)- Flink和Spark Streaming

🍋🍋大數據學習🍋🍋

🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。
💖如果覺得博主的文章還不錯的話,請點贊👍+收藏??+留言📝支持一下博主哦🤞


🍋一、Flink and Spark基本原理

????????Flink 和 Spark Streaming 都是用于實時流式數據處理的分布式計算框架,但兩者的基本設計思想和內部執行機制有些不同。

????????Flink 基于流的理念,采用了基于數據流模型的核心運行時引擎。它可以對無界和有界數據流進行有狀態的計算。Flink 使用了鏈式操作來表達運算邏輯,并基于流水線的方式進行任務調度。

????????Spark Streaming 則是通過微批處理的方式來實現對實時數據流的處理。它將數據流切分成很小的批數據,然后提交給 Spark 執行批處理任務。Spark Streaming 基于 RDD 來表達運算邏輯,并通過 Spark 的任務調度機制進行調度。

????????Flink 的內部把流處理算法表示為數據流圖,并以流水線的方式持續運算。Spark Streaming 流任務拆解為一個個小批的 Spark 任務,這些批任務按時間順序執行。

????????兩者在 fault tolerance 機制上也有區別。Flink 基于檢查點機制實現了 exactly-once 語義。而 Spark Streaming 通過 Write ahead logs 實現了至少一次保證。

實現機制

  1. 數據處理模式上,Flink 是基于流的真正runtime,可以持續地對無界數據流進行計算。Spark Streaming 則采用的是微批處理模型,將數據流離散為批進行處理。
  2. Flink 通過aperator chains實現了流式數據流水線計算。Spark Streaming基于RDD拼接批結果來模擬流計算。
  3. Flink 使用輕量級的流水線調度機制進行任務調度。Spark Streaming則依賴Spark Engine進行任務調度。
  4. Flink檢查點機制實現了Exactly-once語義。Spark Streaming通過Write Ahead Logs實現了至少一次保證。
  5. Flink基于數據流圖進行計算,允許循環數據流(迭代計算)。Spark Streaming的DAG不允許存在循環。
  6. Flink有更低的延遲,可以達到毫秒級。Spark Streaming批間隔一般在500毫秒以上。
  7. Flink有更好的重啟能力,可以從檢查點恢復狀態。Spark Streaming重啟后需要重新計算。
  8. Flink有更多針對流的優化,如窗口機制等。Spark Streaming繼承自Spark的批設計。
  9. Flink需要額外的Cluster部署和操作。Spark Streaming可以直接基于Spark Cluster運行。

🍋二、運行角色

Spark Streaming 運行時的角色(standalone 模式)主要有:

  • Master:主要負責整體集群資源的管理和應用程序調度;

  • Worker:負責單個節點的資源管理,driver 和 executor 的啟動等;

  • Driver:用戶入口程序執行的地方,即 SparkContext 執行的地方,主要是 DGA 生成、stage 劃分、task 生成及調度;

  • Executor:負責執行 task,反饋執行狀態和執行結果。

Flink 運行時的角色(standalone 模式)主要有:

  • Jobmanager: 協調分布式執行,他們調度任務、協調 checkpoints、協調故障恢復等。至少有一個 JobManager。高可用情況下可以啟動多個 JobManager,其中一個選舉為 leader,其余為 standby;

  • Taskmanager: 負責執行具體的 tasks、緩存、交換數據流,至少有一個 TaskManager;

  • Slot: 每個 task slot 代表 TaskManager 的一個固定部分資源,Slot 的個數代表著 taskmanager 可并行執行的 task 數。

🍋三、spark?streaming和Flink運行模型

1.Spark Streaming 是微批處理,運行的時候需要指定批處理的時間,每次運行 job 時處理一個批次的數據,流程如圖 3 所示:

640?

2.Flink 是基于事件驅動的,事件可以理解為消息。事件驅動的應用程序是一種狀態應用程序,它會從一個或者多個流中注入事件,通過觸發計算更新狀態,或外部動作對注入的事件作出反應。

640?

🍋四、任務調度

1.Spark 任務調度

????????Spark Streaming 任務如上文提到的是基于微批處理的,實際上每個批次都是一個 Spark Core 的任務。對于編碼完成的 Spark Core 任務在生成到最終執行結束主要包括以下幾個部分:

  • 構建 DGA 圖;

  • 劃分 stage;

  • 生成 taskset;

  • 調度 task。

640?

????????對于 job 的調度執行有 fifo 和 fair 兩種模式,Task 是根據數據本地性調度執行的。 假設每個 Spark Streaming 任務消費的 kafka topic 有四個分區,中間有一個 transform操作(如 map)和一個 reduce 操作。

640?

????????假設有兩個 executor,其中每個 executor 三個核,那么每個批次相應的 task 運行位置是固定的嗎?是否能預測? 由于數據本地性和調度不確定性,每個批次對應 kafka 分區生成的 task 運行位置并不是固定的。

2.Flink 任務調度

????????對于 flink 的流任務客戶端首先會生成 StreamGraph,接著生成 JobGraph,然后將 jobGraph 提交給 Jobmanager 由它完成 jobGraph 到 ExecutionGraph 的轉變,最后由 jobManager 調度執行。

640?

? ? ? ? 上圖所示有一個由 data source、MapFunction和 ReduceFunction 組成的程序,data source 和 MapFunction 的并發度都為 4,而 ReduceFunction 的并發度為 3。一個數據流由 Source-Map-Reduce 的順序組成,在具有 2 個TaskManager、每個 TaskManager 都有 3 個 Task Slot 的集群上運行。

????????可以看出 flink 的拓撲生成提交執行之后,除非故障,否則拓撲部件執行位置不變,并行度由每一個算子并行度決定,類似于 storm。而 spark Streaming 是每個批次都會根據數據本地性和資源情況進行調度,無固定的執行拓撲結構。 flink 是數據在拓撲結構里流動執行,而 Spark Streaming 則是對數據緩存批次并行處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72292.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MCU詳解:嵌入式系統的“智慧之心”

在現代電子設備中, MCU(Microcontroller Unit,微控制器)扮演著至關重要的角色。從智能家居到工業控制,從汽車電子到醫療設備,MCU以其小巧、低功耗和高集成度的特點,成為嵌入式系統的核心組件。 …

(鏈表)24. 兩兩交換鏈表中的節點

給你一個鏈表,兩兩交換其中相鄰的節點,并返回交換后鏈表的頭節點。你必須在不修改節點內部的值的情況下完成本題(即,只能進行節點交換)。 示例 1: 輸入:head [1,2,3,4] 輸出:[2,1,4…

吳恩達機器學習筆記復盤(三)Jupyter NoteBook

Jupyter NoteBook Jupyter是一個開源的交互式計算環境: 特點 交互式編程:支持以單元格為單位編寫和運行代碼,用戶可以實時看到代碼的執行結果,便于逐步調試和理解代碼邏輯。多語言支持:不僅支持Python,還…

【Linux】從互斥原理到C++ RAII封裝實踐

📢博客主頁:https://blog.csdn.net/2301_779549673 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正! 📢本文由 JohnKi 原創,首發于 CSDN🙉 📢未來很長&#…

微服務無狀態服務設計

微服務無狀態服務設計是構建高可用、高擴展性系統的核心方法。 一、核心設計原則 請求獨立性 每個請求必須攜帶完整的上下文信息,服務不依賴本地存儲的會話或用戶數據。例如用戶認證通過JWT傳遞所有必要信息,而非依賴服務端Session。 狀態外置化 將會話…

30、map 和 unordered_map的區別和實現機制【高頻】

底層結構 map底層是紅黑樹結構,而unordered_map底層是哈希結構; 有序性 但是紅黑樹其實是一種二叉搜索樹,插入刪除時會自動排序hash因為是把數據映射到數組上的,而且存在哈希沖突,所以不能保證有序存儲 所以有序存儲使用map&a…

大數據-spark3.5安裝部署之local模式

spark,一個數據處理框架和計算引擎。 下載 local模式即本地模式,就是不需要任何其他節點資源就可以在本地執行spark代碼的環境。用于練習演示。 上傳解壓 使用PortX將文件上傳至/opt 進入/opt目錄,創建目錄module,解壓文件至/o…

Manus “Less structure,More intelligence ”獨行云端處理器

根據市場調研機構Statista數據顯示,全球的AR/AR的市場規模預計目前將達到2500億美元,Manus作為VR手套領域的領軍企業,足以顛覆你的認知。本篇文章將帶你解讀Manus產品,針對用戶提出的種種問題,Manus又將如何解決且讓使…

Oracle數據庫存儲結構--邏輯存儲結構

數據庫存儲結構:分為物理存儲結構和邏輯存儲結構。 物理存儲結構:操作系統層面如何組織和管理數據 邏輯存儲結構:Oracle數據庫內部數據組織和管理數據,數據庫管理系統層面如何組織和管理數據 Oracle邏輯存儲結構 數據庫的邏…

芯驛電子 ALINX 亮相德國紐倫堡,Embedded World 2025 精彩回顧

2025年3月13日,全球規模最大的嵌入式行業盛會——德國紐倫堡國際嵌入式展(embedded world 2025)圓滿落幕。 在這場匯聚全球 950 家展商、3 萬余專業觀眾的科技盛宴中,芯驛電子 ALINX 展位人頭攢動,多款尖端產品吸引客戶…

Nexus File類型Blob Stores遷移至Minio操作指南(上)

#作者:閆乾苓 文章目錄 目的前期準備查看file類型Blob Stores數據目錄位置aws cli客戶端連接工具OrientDB cli客戶端連接工具在minio中新建 bucket 目的 增強nexus構件數據的高可用性和擴展性 前期準備 查看并記錄需要遷移的Blob Store及repository 查看fil…

藍橋杯嵌入式組第十二屆省賽題目解析+STM32G431RBT6實現源碼

文章目錄 1.題目解析1.1 分而治之,藕斷絲連1.2 模塊化思維導圖1.3 模塊解析1.3.1 KEY模塊1.3.2 LED模塊1.3.3 LCD模塊1.3.4 TIM模塊1.3.5 UART模塊1.3.5.1 uart數據解析 2.源碼3.第十二屆題目 前言:STM32G431RBT6實現嵌入式組第十二屆題目解析源碼&#…

【MySQL】表的約束(上)

文章目錄 表的約束什么是表的約束空屬性默認值列描述(comment)零填充(zerofill)主鍵 總結 表的約束 什么是表的約束 表的約束(Constraints)是數據庫表中的規則,用于限制存儲的數據&#xff0c…

【Unity網絡同步框架 - Nakama研究(三)】

文章目錄 【Unity網絡同步框架 - Nakama研究(三)】準備工作前言Unity部分連接服務器創建并進入房間創建人物人物移動和同步 【Unity網絡同步框架 - Nakama研究(三)】 以下部分需要有一定的Unity基礎,在官方的案例Pirate Panic基礎上進行修改而成。如果沒有下載并熟悉…

前端存儲-indexdb封裝:dexie.js的使用

前言 indexedDB是一個用于在瀏覽器中存儲較大數據結構的Web API,并且提供了索引功能以實現高性能查找。dexie.js是對indexdb的封裝,前端用起來很方便。在此介紹一下項目中用到的操作語句,也方便記錄。我的項目是vue3項目。 開始 1、安裝 …

【AD】6-1 PCB常用規則

間距規則: 可自行修改線寬與間距(默認10mil) 線寬規則:電源線寬加粗 布線過程中更改線寬:走線狀態下,shiftw更改線寬,線寬要在規則范圍之內過孔規則: 阻焊規則:

MyBatis 的核心配置文件是干什么的? 它的結構是怎樣的? 哪些是必須配置的,哪些是可選的?

MyBatis 的核心配置文件&#xff08;通常命名為 mybatis-config.xml&#xff09;是 MyBatis 應用程序的入口點&#xff0c;它定義了 MyBatis 的全局配置信息 。 核心配置文件的作用&#xff1a; 配置 MyBatis 的運行時行為: 通過 <settings> 標簽設置全局參數&#xff…

搜廣推校招面經四十九

tiktok廣告算法 一、倒排索引原理及Map中Key的處理 具體使用方法見【搜廣推校招面經三十六】 倒排索引&#xff08;Inverted Index&#xff09;是信息檢索系統中常用的一種數據結構&#xff0c;用于快速查找包含某個關鍵詞的文檔。以下是倒排索引的原理及Map中Key的處理方式的…

【零基礎入門unity游戲開發——unity3D篇】3D物理系統之 —— 3D剛體組件Rigidbody

考慮到每個人基礎可能不一樣,且并不是所有人都有同時做2D、3D開發的需求,所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要講解C#的基礎語法,包括變量、數據類型、運算符、流程控制、面向對象等,適合沒有編程基礎的…

C# net deepseek RAG AI開發 全流程 介紹

deepseek本地部署教程及net開發對接 步驟詳解&#xff1a;安裝教程及net開發對接全流程介紹 DeepSeekRAG 中的 RAG&#xff0c;全稱是 Retrieval-Augmented Generation&#xff08;檢索增強生成&#xff09;&#xff0c;是一種結合外部知識庫檢索與大模型生成能力的技術架構。其…