實時計算與SparkSteaming的對比

實時計算概述

實時計算

阿里雲實時計算(Alibaba Cloud Realtime Compute)是一套基於Apache Flink構建的一站式、高性能實時大數據處理平臺,普遍適應於流式數據處理、離線數據處理等場景,最重要的一點是免運維,能夠爲企業節省了大量的成本。數據庫

產品模式

阿里雲的實時計算產品模式有Flink雲原生版和獨享模式。目前Flink雲原生版支持部署於容器服務ACK提供的Kubernetes。獨享模式是指在阿里雲ECS上單獨爲用戶建立的獨立計算集羣。單個用戶獨享計算集羣的物理資源(網絡、磁盤、CPU或內存等),與其它用戶的資源徹底獨立。獨享模式分爲包年包月和按量付費兩種方式。express

Flink簡介

Flink是開源的流處理框架,其核心是用Java和Scala編寫的分佈式流數據流引擎。它的特色是支持高吞吐、低延遲、高性能的流處理,支持帶有事件時間的窗口(Window)操做,支持有狀態計算的Exactly-once語義,支持基於輕量級分佈式快照(Snapshot)實現的容錯,同時支持Batch on Streaming處理和Streaming處理,Flink在JVM內部實現了本身的內存管理,支持迭代計算,支持程序自動優化,避免特定狀況下Shuffle、排序等昂貴操做,中間結果有必要進行緩存。編程

Flink架構圖

image

阿里雲的程序提交主要從客戶端進行提交。其中,JobClient負責接收程序、解析程序的執行計劃、優化程序的執行計劃,而後提交執行計劃到JobManager。JobManager主要負責申請資源,協調以及控制整個job的執行過程。TaskManager的主要做用是接收並執行JobManager發送的task,而且與JobManager通訊,反饋任務狀態信息。Slot是TaskManager資源粒度的劃分,每一個Slot都有本身獨立的內存。全部Slot平均分配TaskManger的內存,好比TaskManager分配給Solt的內存爲8G,兩個Slot,每一個Slot的內存爲4G,而且Slot僅劃份內存,不涉及cpu的劃分。緩存

Flink編程模型

image

在Flink編程模型中最低級的抽象僅提供狀態流(stateful streaming),向上一層爲DataStream API(數據流接口,有界/無界流)和DataSet API(數據集接口,有界數據集)。再向上爲表接口(Table API),是以表爲中心的聲明性DSL,能夠動態地改變表(當展現流的時候)。Flink提供的最高級抽象是SQL。阿里雲的實時計算暫時不提供批處理。網絡

Flink計算模型

image

Flink計算模型主要分爲三部分,第一部分爲Source,第二部分爲Transformation,第三部分爲Sink。每個數據流起始於一個或多個Source,通過Transformation操做,對一個或多個輸入Stream進行計算處理並終止於一個或多個Sink。架構

Flink的容錯機制

image

Flink容錯的核心機制是checkpoint,能夠按期地將各個Operator處理的數據進行快照存儲(Snapshot)。若是Flink程序出現宕機,能夠從新從這些快照中恢復數據。Flink的checkpoint原理是Flink按期的向流應用中發送barrier,當算子收到barrier會暫停處理會將state製成快照,而後向下遊廣播barrier,直到Sink算子收到barrier,快照製做完成。阿里雲的barrier是不參與計算的,而且是很是輕量的。框架

Spark Streaming與實時計算的對比

生態集成對比

image

Spark Streaming數據源支持KafKa、Flume、HDFS/S三、Kinesis以及Twitter數據源,一樣Flink也支持這些數據源。在數據計算中分爲數據源表、數據結果表和數據維表。數據源表支持DataHub、消息隊列MQ,KafKa、MaxCompute、表格存儲TableStore。數據結果表支持分析型數據庫MySQL版2.0、據總線DataHub、日誌服務LOG結果表、消息隊列MQ結果表、表格存儲TableStore、雲數據庫RDS版、MaxCompute、雲數據庫HBase版、Elastic Search、Kafka、HybridDB for MySQL、自定義、雲數據庫MongoDB版、雲數據庫Redis版、雲數據庫RDS SQL Server版、分析型數據庫MySQL版3.0結果表。數據維表支持表格存儲TableStore、雲數據庫RDS版、雲數據庫HBase版、MaxCompute(ODPS)、ElasticSearch。運維

API對比

Spark Streaming支持底層的API是RDD,而Flink支持底層的API是Process Function。Spark Streaming核心API是DataFrame/DataSet/Structured Streaming,而Flink的核心API是DataStream/DataSet。Spark Streaming支持的SQL是Spark SQL,而Flink支持的SQL是Table API和 SQL。相同的是,Spark Streaming和Flink都支持機器學習,Spark Streaming支持MLlib,而Flink支持FlinkML。Spark Streaming支持的圖計算是GraphX,而Flink支持Gelly。但阿里雲的Flink在流計算方面更成熟一些。機器學習

數據處理模式對比

image

上圖所示爲Spark Streaming,是基於Spark高效的批處理能力,對流數據劃分爲多個小批數據,再分別對這些數據進行處理,即微批處理模式,運行的時候須要指定批處理的時間,每次運行做業時處理一個批次的數據。並非真正的流計算,而是進行微批處理的。
image分佈式

上圖所示爲阿里雲的Flink,是基於事件驅動的,事件能夠理解爲消息,即源源不斷沒有邊界的數據,而且數據的狀態能夠改變,對於批處理則認爲是有邊界的流進行處理。

時間機制對比

image

Flink提供了3種時間模型:EventTime、ProcessingTime、IngestionTime,在實時計算中支持EventTime、ProcessingTime,而Spark Streaming僅支持ProcessingTime。其中,EventTime指事件生成時的時間,在進入Flink以前就已經存在,能夠從event的字段中抽取。IngestionTime指事件進入Flink的時間,即在source裏獲取的當前系統的時間,後續操做統一使用該時間。ProcessingTime指執行操做的機器的當前系統時間(每一個算子都不同)。阿里雲的Flink也提供了WaterMark用來處理時間亂序,Watermark是一個對Event Time的標識,這裏的亂序是指有事件遲到了,對於遲到的元素,不可能無限期的等下去,必需要有一種機制來保證一個特定的時間後,必須觸發window進行計算。好比計算一個10:00到10:10分的窗口,watermark設置延遲3s,當一條數據的watermark到達10:10:03,這個窗口才會觸發,表示這個窗口的數據已經所有到了,而後進行計算並釋放相關被佔用的資源。

容錯機制對比

Spark Streaming容錯機制是利用Spark自身的容錯設計、存儲級別和RDD抽象設計,可以處理集羣中任何worker節點的故障。Driver端利用checkpoint機制。對於接收的數據使用預寫日誌的形式。Flink的容錯機制主要是基於checkpoint。按期地將各個Operator處理的數據進行快照存儲(Snapshot)。

如何使用阿里雲實時計算

image

上圖所示爲一個購買界面,分爲master型號和slave型號。地域選擇爲當時所在的地方,master主要負責管理整個集羣的資源和slave之間的交互,但不能用於計算。Slave主要負責計算。

建立項目

image
建立完集羣以後,來到集羣的控制檯中,點擊集羣列表,找到對應的集羣建立項目,填寫項目名稱和備註,其中CU指集羣還剩餘多少CU。1CU爲1核4G,簡單業務時,1CU每秒能夠處理10000條數據。例如,單流過濾、字符串變換等操做。複雜業務時,1CU每秒能夠處理1000到5000條數據。例如,JOIN、WINDOW、GROUP BY等操做。

做業開發

image

而後點擊對應的項目,點擊開發進入到開發界面,經過新建做業和文件夾的方式編寫本身的DDL語句。對於資源引用,阿里雲的Flink SQL支持UDF、DataStream。 再編寫一個以DataHub爲數據源,數據維表在RDS數據庫中,結果表輸出到RDS數據庫中新建一個DatahubData文件夾,新建一個DatahubData做業。

數據存儲

image

數據存儲支持明文方式和存儲註冊方式。明文方式是經過在做業的DDL語句WITH參數中配置accessId和accessKey的方法。存儲註冊方式是將上下游存儲資源預先註冊至實時計算開發平臺,而後經過實時計算控制檯的數據存儲管理功能,對上下游存儲資源進行引用,能夠對數據進行預覽。阿里雲採用存儲註冊的方式註冊DataHub。填寫對應的endpoint和項目的名稱,單機做爲輸入表引用,就會在做業開發界面生成DDL語句。

註冊數據結果表和維表

image

因爲RDS數據庫存在白名單限制,鏈接RDS須要添加白名單,獨享模式的IP地址在集羣列表頁面,單擊名稱字段下目標集羣名稱,在集羣信息窗口,查看集羣的ENI信息。

編寫本身SQL

image

從數據源表中過濾出place是北京的數據。Sql中使用了計算列,計算列的語法爲column_name AS computed_column_expression,計算列可使用其它列的數據,計算出其所屬列的數值。若是您的數據源表中沒有TIMESTAMP類型的列,可使用計算列方法從其它類型的字段進行轉換。

查看運維界面

image

Failover曲線顯示當前做業出現Failover(錯誤或者異常)的頻率。計算方法爲當前Failover時間點的前1分鐘內出現Failover的累計次數除以60(例如,最近1分鐘Failover了一次,Failover的值爲1/60=0.01667)。延遲分爲業務延時、數據滯留時間及數據間隔時間。其中業務延遲指當前數據時間減去最後一條數據的時間,數據滯留時間指數據實時計算的時間減去eventime,數據間隔時間指業務延時減去數據滯留時間。Source的TPS數據是指直接讀取數據源的數據,Source的RPS是指讀取TPS解析後的數據。

本地調試

image

須要從本地上傳對應的數據。

實時計算的使用限制

針對區域的限制,獨享模式僅支持華東1(杭州)、華東2(上海)、華南1(深圳)、華北2(北京)地區。針對CU的處理能力,實時計算當前在內部壓測場景下,一個CU的處理能力大約爲:簡單業務時,例如,單流過濾、字符串變換等操做,1CU每秒能夠處理10000條數據。複雜業務時,例如,JOIN、WINDOW、GROUP BY等操做,1CU每秒能夠處理1000到5000條數據。針對做業、任務數量限制,單個項目下容許最多建立業務的個數爲100。單個項目下容許最多的文件夾的個數爲50,層數最大不超過5層,單個項目下容許最多的UDX或JAR的個數爲50,單個項目下容許最多註冊數據存儲的個數爲50,單個做業容許最多的歷史保存版本數爲20。

查看更多:https://yqh.aliyun.com/detail..._content=g_1000106256

上雲就看雲棲號:更多雲資訊,上雲案例,最佳實踐,產品入門,訪問:https://yqh.aliyun.com/

相關文章
相關標籤/搜索