Sparkstreaming首次引入在0.*版本骄噪,其核心思想是利用spark批處理框架,以microbatch(以一段時間的流作為一個batch)的方式手趣,完成對流數(shù)據(jù)的處理虑润。其核心思想是建立DStream進(jìn)行微批處理,依舊屬于批處理的一部分骇两。不滿足基于Event Time的實(shí)時處理需求速种。
Event time 事件時間: 就是數(shù)據(jù)真正發(fā)生的時間,比如用戶瀏覽了一個頁面可能會產(chǎn)生一條用戶的該時間點(diǎn)的瀏覽日志低千。
Process time 處理時間: 則是這條日志數(shù)據(jù)真正到達(dá)計算框架中被處理的時間點(diǎn)配阵,簡單的說,就是你的Spark程序是什么時候讀到這條日志的示血。
事件時間是嵌入在數(shù)據(jù)本身中的時間棋傍。對于許多應(yīng)用程序,用戶可能希望在此事件時間操作难审。例如瘫拣,如果要獲取IoT設(shè)備每分鐘生成的事件數(shù),則可能需要使用生成數(shù)據(jù)的時間(即數(shù)據(jù)中的事件時間)剔宪,而不是Spark接收他們的時間拂铡。事件時間在此模型中非常自然地表示 - 來自設(shè)備的每個事件都是表中的一行,事件時間是該行中的一個列值葱绒。
Structured Streaming是Spark2.0版本提出的新的實(shí)時流框架(2.0和2.1是實(shí)驗版本,從Spark2.2開始為穩(wěn)定版本)斗锭,相比于Spark Streaming地淀,優(yōu)點(diǎn)如下:
1.同樣能支持多種數(shù)據(jù)源的輸入和輸出,Kafka岖是、flume帮毁、Socket、Json豺撑。
2.基于Event-Time烈疚,相比于Spark Streaming的Processing-Time更精確,更符合業(yè)務(wù)場景聪轿。
3.支持spark2的dataframe處理爷肝。
4.解決了Spark Streaming存在的代碼升級,DAG圖變化引起的任務(wù)失敗,無法斷點(diǎn)續(xù)傳的問題灯抛。
5.基于SparkSQL構(gòu)建的可擴(kuò)展和容錯的流式數(shù)據(jù)處理引擎金赦,使得實(shí)時流式數(shù)據(jù)計算可以和離線計算采用相同的處理方式(DataFrame&SQL)。
6.可以使用與靜態(tài)數(shù)據(jù)批處理計算相同的方式來表達(dá)流計算对嚼。
7.結(jié)構(gòu)化流查詢(Structured Streaming Query)內(nèi)部默認(rèn)使用微批處理引擎( micro-batch processing engine)夹抗,它將數(shù)據(jù)流看作一系列小的批任務(wù)(batch jobs)來處理,從而達(dá)到端到端如100毫秒這樣低的延遲以及只執(zhí)行一次容錯的保證纵竖。然而漠烧,從Spark 2.3,我們已經(jīng)引入了一個新的低延遲處理方式——連續(xù)處理(Continuous Processing)靡砌,可以達(dá)到端到端如1毫秒這樣低的延遲至少一次保證沽甥。不用改變查詢中DataSet/DataFrame的操作,你就能夠選擇基于應(yīng)用要求的查詢模式乏奥。
Structured Streaming支持的Source:
1.File Source:從給定的目錄讀取數(shù)據(jù)摆舟,目前支持的格式有text,csv,json,parquet,容錯邓了。
2.Kafka Source:從kafka拉取數(shù)據(jù)恨诱。僅兼容kafka 0.10.0或者更高版本,容錯骗炉。
3.Socket Source(for testing):從一個連接中讀取UTF8編碼的文本數(shù)據(jù)照宝,不容錯。
Structured Streaming的輸出:
輸出模式 | 功能 |
---|---|
Append mode(default) | 僅僅從上次觸發(fā)計算到當(dāng)前新增的行會被輸出到sink句葵。僅僅支持行數(shù)據(jù)插入結(jié)果表后不進(jìn)行更改的query操作厕鹃。因此,這種方式能保證每行數(shù)據(jù)僅僅輸出一次乍丈。例如剂碴,帶有Select,where轻专,map忆矛,flatmap,filter请垛,join等的query操作支持append模式催训。 |
Complete mode | 每次trigger都會將整個結(jié)果表輸出到sink。這個是針對聚合操作的宗收。 |
Update mode | 僅僅是自上次trigger之后結(jié)果表有變更的行會輸出到sink漫拭。在以后的版本中會有更詳細(xì)的信息。 |
StructuredStreaming目前支持的sink只有FileSink混稽、KafkaSink采驻、ConsoleSink审胚、MemorySink和ForeachSink。
其中最常用的是ForeachSink挑宠。