架構(gòu)
Apache Flink是一個框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進行有狀態(tài)計算。Flink設(shè)計為在所有常見的集群環(huán)境中運行,以內(nèi)存速度和任何規(guī)模執(zhí)行計算跪者。
在這里,我們解釋了Flink架構(gòu)的重要方面熄求。
處理無界和有界數(shù)據(jù)
任何類型的數(shù)據(jù)都是作為事件流產(chǎn)生的渣玲。信用卡交易,傳感器測量,機器日志或網(wǎng)站或移動應(yīng)用程序上的用戶交互,所有這些數(shù)據(jù)都作為流生成位他。 數(shù)據(jù)可以作為無界或有界流處理。
- 無界流有一個開始但沒有定義的結(jié)束枚钓。它們不會在生成時終止并提供數(shù)據(jù)。必須持續(xù)處理無界流瑟押,即必須在攝取事件后立即處理事件搀捷。無法等待所有輸入數(shù)據(jù)到達,因為輸入是無界的多望,并且在任何時間點都不會完成嫩舟。處理無界數(shù)據(jù)通常要求以特定順序(例如事件發(fā)生的順序)攝取事件,以便能夠推斷結(jié)果完整性怀偷。
- 有界流具有定義的開始和結(jié)束家厌。可以在執(zhí)行任何計算之前通過攝取所有數(shù)據(jù)來處理有界流椎工。處理有界流不需要有序攝取饭于,因為可以始終對有界數(shù)據(jù)集進行排序。有界流的處理也稱為批處理维蒙。
Apache Flink擅長處理無界和有界數(shù)據(jù)集掰吕。精確控制時間和狀態(tài)使Flink的運行時能夠在無界流上運行任何類型的應(yīng)用程序。有界流由算法和數(shù)據(jù)結(jié)構(gòu)內(nèi)部處理木西,這些算法和數(shù)據(jù)結(jié)構(gòu)專門針對固定大小的數(shù)據(jù)集而設(shè)計畴栖,從而產(chǎn)生出色的性能。
部署應(yīng)用程序在任何地方
Apache Flink是一個分布式系統(tǒng)八千,需要計算資源來執(zhí)行應(yīng)用程序吗讶。Flink集成了所有常見的集群資源管理器,如Hadoop YARN恋捆、Apache Mesos和Kubernetes照皆,但也可以設(shè)置為作為獨立集群運行。
Flink被設(shè)計成能夠很好地工作于前面列出的每個資源管理器沸停。這是通過特定于資源管理器的部署模式實現(xiàn)的膜毁,這種部署模式允許Flink以其慣用的方式與每個資源管理器交互。
在部署Flink應(yīng)用程序時愤钾,F(xiàn)link根據(jù)應(yīng)用程序的配置并行性自動識別所需的資源瘟滨,并從資源管理器請求它們。如果發(fā)生故障能颁,F(xiàn)link將通過請求新的資源來替換失敗的容器杂瘸。提交或控制應(yīng)用程序的所有通信都是通過REST調(diào)用進行的。這簡化了Flink在許多環(huán)境中的集成伙菊。
以任何規(guī)模運行應(yīng)用程序
Flink設(shè)計用于在任何規(guī)模上運行有狀態(tài)流應(yīng)用程序败玉。應(yīng)用程序被并行化成數(shù)千個任務(wù),這些任務(wù)分布在一個集群中并發(fā)執(zhí)行镜硕。因此运翼,應(yīng)用程序?qū)嶋H上可以利用無限數(shù)量的cpu、主內(nèi)存兴枯、磁盤和網(wǎng)絡(luò)IO血淌。此外,F(xiàn)link很容易保持非常大的應(yīng)用狀態(tài)财剖。它的異步和增量檢查點算法確保了對處理延遲的最小影響悠夯,同時保證了精確的一次狀態(tài)一致性。
利用內(nèi)存中的性能
有狀態(tài)Flink應(yīng)用程序針對本地狀態(tài)訪問進行了優(yōu)化峰伙。任務(wù)狀態(tài)總是在內(nèi)存中維護疗疟,如果狀態(tài)大小超過可用內(nèi)存,則在具有訪問效率的磁盤數(shù)據(jù)結(jié)構(gòu)中維護瞳氓。因此策彤,任務(wù)通過訪問本地(通常是在內(nèi)存中)狀態(tài)來執(zhí)行所有計算,從而產(chǎn)生非常低的處理延遲匣摘。Flink通過定期和異步檢查本地狀態(tài)到持久存儲店诗,保證了在發(fā)生故障時的精確一次狀態(tài)一致性。
應(yīng)用
Apache Flink是一個用于對無界和有界數(shù)據(jù)流進行有狀態(tài)計算的框架音榜。Flink在不同的抽象級別提供多個API庞瘸,并為常見用例提供專用庫。
在這里赠叼,我們介紹Flink易于使用和富有表現(xiàn)力的API和庫擦囊。
流媒體應(yīng)用程序構(gòu)塊
可以由流處理框架構(gòu)建和執(zhí)行的應(yīng)用程序類型由框架控制流违霞,狀態(tài)和時間的程度來定義。在下文中瞬场,我們描述了流處理應(yīng)用程序的這些構(gòu)建塊买鸽,并解釋了Flink處理它們的方法。
流
顯然贯被,流是流處理的一個基本方面眼五。但是,流可能具有不同的特性彤灶,這些特性會影響流可以且應(yīng)該如何處理看幼。Flink是一個通用的處理框架,可以處理任何類型的流幌陕。
- 有界的和無界的流:流可以是無界的或有界的诵姜,即,固定大小的數(shù)據(jù)集苞轿。Flink具有處理無界流的復(fù)雜特性茅诱,但也有專門的操作符來有效地處理有界流。
- 實時流和記錄流:所有數(shù)據(jù)都作為流生成搬卒。有兩種處理數(shù)據(jù)的方法瑟俭。當流生成或?qū)⑵涑志没酱鎯ο到y(tǒng)(例如文件系統(tǒng)或?qū)ο蟠鎯?時實時處理,并在稍后處理契邀。Flink應(yīng)用程序可以處理記錄或?qū)崟r流摆寄。
狀態(tài)
每個重要的流應(yīng)用程序都是有狀態(tài)的,即只有對單個事件應(yīng)用轉(zhuǎn)換的應(yīng)用程序才需要狀態(tài)坯门。運行基本業(yè)務(wù)邏輯的任何應(yīng)用程序都需要記住事件或中間結(jié)果微饥,以便在以后的時間點訪問它們,例如在收到下一個事件時或在特定持續(xù)時間之后古戴。
應(yīng)用程序狀態(tài)是Apache Flink的一等公民欠橘。可以通過查看Flink在狀態(tài)處理環(huán)境中提供的所有功能來查看现恼。
- 多狀態(tài)基元(Multiple State Primitives):Flink為不同的數(shù)據(jù)結(jié)構(gòu)提供狀態(tài)基元肃续,例如原子值,列表或映射叉袍。開發(fā)人員可以根據(jù)函數(shù)的訪問模式選擇最有效的狀態(tài)原語始锚。
- 可插拔狀態(tài)后端(Pluggable State Backends):應(yīng)用程序狀態(tài)由可插拔狀態(tài)后端管理和檢查點。Flink具有不同的狀態(tài)后端喳逛,可以在內(nèi)存或RocksDB中存儲狀態(tài)瞧捌,RocksDB是一種高效的嵌入式磁盤數(shù)據(jù)存儲。也可以插入自定義狀態(tài)后端。
- 完全一次的狀態(tài)一致性(Exactly-once state consistency):Flink的檢查點和恢復(fù)算法可確保在發(fā)生故障時應(yīng)用程序狀態(tài)的一致性姐呐。因此殿怜,故障是透明處理的,不會影響應(yīng)用程序的正確性皮钠。
- 非常大的狀態(tài)(Very Large State):由于其異步和增量檢查點算法稳捆,F(xiàn)link能夠維持幾TB的應(yīng)用程序狀態(tài)赠法。
- 可擴展的應(yīng)用程序(Scalable Applications):Flink通過將狀態(tài)重新分配給更多或更少的工作人員來支持有狀態(tài)應(yīng)用程序的擴展麦轰。
時間
時間是流媒體應(yīng)用的另一個重要組成部分 大多數(shù)事件流都具有固有的時間語義,因為每個事件都是在特定時間點生成的砖织。此外款侵,許多常見的流計算基于時間,例如窗口聚合侧纯,會話化新锈,模式檢測和基于時間的連接。流處理的一個重要方面是應(yīng)用程序如何測量時間眶熬,即事件時間和處理時間的差異妹笆。
Flink提供了一組豐富的與時間相關(guān)的功能。
- Event-time Mode:使用事件時間語義處理流的應(yīng)用程序根據(jù)事件的時間戳計算結(jié)果娜氏。因此拳缠,無論是否處理記錄的或?qū)崟r的事件,事件時間處理都允許準確和一致的結(jié)果贸弥。
- 支持Watermark:Flink使用Watermark來推斷事件時間應(yīng)用中的時間窟坐。Watermark也是一種靈活的機制,可以權(quán)衡結(jié)果的延遲和完整性绵疲。
- 延遲數(shù)據(jù)處理(Late Data Handling):當使用 watermark 在事件時間模式下處理流時哲鸳,可能會發(fā)生在所有相關(guān)事件到達之前已完成計算。這類事件被稱為遲發(fā)事件盔憨。Flink具有多種處理延遲事件的選項徙菠,例如通過側(cè)輸出重新路由它們以及更新以前完成的結(jié)果。
- 處理時間模式(Processing-time Mode):除了事件時間模式之外郁岩,F(xiàn)link還支持處理時間語義婿奔,該處理時間語義執(zhí)行由處理機器的掛鐘時間觸發(fā)的計算。處理時間模式適用于具有嚴格的低延遲要求的某些應(yīng)用驯用,這些要求可以容忍近似結(jié)果脸秽。
分層api
Flink 根據(jù)抽象程度分層,提供了三種不同的 API蝴乔。每一種 API 在簡潔性和表達力上有著不同的側(cè)重记餐,并且針對不同的應(yīng)用場景。
ProcessFunction
ProcessFunction 是 Flink 所提供的最具表達力的接口薇正。ProcessFunction 可以處理一或兩條輸入數(shù)據(jù)流中的單個事件或者歸入一個特定窗口內(nèi)的多個事件片酝。它提供了對于時間和狀態(tài)的細粒度控制囚衔。開發(fā)者可以在其中任意地修改狀態(tài),也能夠注冊定時器用以在未來的某一時刻觸發(fā)回調(diào)函數(shù)雕沿。因此练湿,你可以利用 ProcessFunction 實現(xiàn)許多有狀態(tài)的事件驅(qū)動應(yīng)用所需要的基于單個事件的復(fù)雜業(yè)務(wù)邏輯。
DataStream API
DataStream API為許多通用的流處理操作提供了處理原語审轮。這些操作包括窗口肥哎、逐條記錄的轉(zhuǎn)換操作,在處理事件時進行外部數(shù)據(jù)庫查詢等疾渣。DataStream API 支持 Java 和 Scala 語言篡诽,預(yù)先定義了例如map()
、reduce()
榴捡、aggregate()
等函數(shù)杈女。你可以通過擴展實現(xiàn)預(yù)定義接口或使用 Java、Scala 的 lambda 表達式實現(xiàn)自定義的函數(shù)吊圾。
SQL & Table API
Flink 支持兩種關(guān)系型的 API达椰,Table API 和 SQL。這兩個 API 都是批處理和流處理統(tǒng)一的 API项乒,這意味著在無邊界的實時數(shù)據(jù)流和有邊界的歷史記錄數(shù)據(jù)流上啰劲,關(guān)系型 API 會以相同的語義執(zhí)行查詢,并產(chǎn)生相同的結(jié)果板丽。Table API 和 SQL 借助了 Apache Calcite來進行查詢的解析呈枉,校驗以及優(yōu)化。它們可以與 DataStream 和 DataSet API 無縫集成埃碱,并支持用戶自定義的標量函數(shù)猖辫,聚合函數(shù)以及表值函數(shù)。
Flink 的關(guān)系型 API 旨在簡化數(shù)據(jù)分析砚殿、數(shù)據(jù)流水線和 ETL 應(yīng)用的定義啃憎。
Libraries
Flink具有幾個用于常見數(shù)據(jù)處理用例的庫。 這些庫通常嵌入在API中似炎,而不是完全獨立的辛萍。 因此,他們可以從API的所有功能中受益羡藐,并與其他庫集成贩毕。
- 復(fù)雜事件處理(Complex Event Processing: CEP):模式檢測是事件流處理的一個非常常見的用例。Flink的CEP庫提供了一個API來指定事件的模式(考慮正則表達式或狀態(tài)機)仆嗦。CEP庫與Flink的DataStream API集成辉阶,以便在DataStreams上評估模式。CEP庫的應(yīng)用程序包括網(wǎng)絡(luò)入侵檢測、業(yè)務(wù)流程監(jiān)視和欺詐檢測谆甜。
- DataSet API: DataSet API是Flink的核心API垃僚,用于批處理應(yīng)用程序。DataSet API的原語包括map规辱、reduce谆棺、(外部)join、co-group和iterate罕袋。所有操作都由算法和數(shù)據(jù)結(jié)構(gòu)支持改淑,這些算法和數(shù)據(jù)結(jié)構(gòu)對內(nèi)存中的序列化數(shù)據(jù)進行操作,如果數(shù)據(jù)大小超過內(nèi)存預(yù)算炫贤,則會溢出到磁盤溅固。Flink的DataSet API的數(shù)據(jù)處理算法受到傳統(tǒng)數(shù)據(jù)庫操作符的啟發(fā),如混合哈希連接或外部合并排序兰珍。
- Gelly: Gelly是一個用于可伸縮圖形處理和分析的庫。Gelly是在數(shù)據(jù)集API的基礎(chǔ)上實現(xiàn)的询吴,并與之集成掠河。因此,它得益于可伸縮和健壯的操作符猛计。Gelly提供了內(nèi)置的算法唠摹,比如標簽傳播(label propagation)、三角形枚舉(triangle enumeration)和頁面排名(page rank)奉瘤,但也提供了一個Graph API勾拉,簡化了自定義圖形算法的實現(xiàn)。
運維
Apache Flink 是一個針對無界和有界數(shù)據(jù)流進行有狀態(tài)計算的框架盗温。由于許多流應(yīng)用程序旨在以最短的停機時間連續(xù)運行藕赞,因此流處理器必須提供出色的故障恢復(fù)能力,以及在應(yīng)用程序運行期間進行監(jiān)控和維護的工具卖局。
Apache Flink 非常注重流數(shù)據(jù)處理的可運維性斧蜕。因此在這一小節(jié)中,我們將詳細介紹 Flink 的故障恢復(fù)機制砚偶,并介紹其管理和監(jiān)控應(yīng)用的功能批销。
7 * 24小時穩(wěn)定運行
在分布式系統(tǒng)中,服務(wù)故障是常有的事染坯,為了保證服務(wù)能夠7*24小時穩(wěn)定運行均芽,像Flink這樣的流處理器故障恢復(fù)機制是必須要有的。顯然這就意味著单鹿,它(這類流處理器)不僅要能在服務(wù)出現(xiàn)故障時候能夠重啟服務(wù)掀宋,而且還要當故障發(fā)生時,保證能夠持久化服務(wù)內(nèi)部各個組件的當前狀態(tài),只有這樣才能保證在故障恢復(fù)時候布朦,服務(wù)能夠繼續(xù)正常運行囤萤,好像故障就沒有發(fā)生過一樣。
Flink通過幾下多種機制維護應(yīng)用可持續(xù)運行及其一致性:
- checkpoint的一致性: Flink的故障恢復(fù)機制是通過建立分布式應(yīng)用服務(wù)狀態(tài)一致性檢查點實現(xiàn)的是趴,當有故障產(chǎn)生時涛舍,應(yīng)用服務(wù)會重啟后,再重新加載上一次成功備份的狀態(tài)檢查點信息唆途。結(jié)合可重放的數(shù)據(jù)源富雅,該特性可保證精確一次(exactly-once)的狀態(tài)一致性。
- 高效的檢查點: 如果一個應(yīng)用要維護一個TB級的狀態(tài)信息肛搬,對此應(yīng)用的狀態(tài)建立檢查點服務(wù)的資源開銷是很高的没佑,為了減小因檢查點服務(wù)對應(yīng)用的延遲性(SLAs服務(wù)等級協(xié)議)的影響,F(xiàn)link采用異步及增量的方式構(gòu)建檢查點服務(wù)温赔。
- 端到端的精確一次: Flink 為某些特定的存儲支持了事務(wù)型輸出的功能蛤奢,及時在發(fā)生故障的情況下,也能夠保證精確一次的輸出陶贼。
- 集成多種集群管理服務(wù): Flink已與多種集群管理服務(wù)緊密集成啤贩,如 Hadoop YARN, Mesos, 以及 Kubernetes。當集群中某個流程任務(wù)失敗后拜秧,一個新的流程服務(wù)會自動啟動并替代它繼續(xù)執(zhí)行痹屹。
- 內(nèi)置高可用服務(wù): Flink內(nèi)置了為解決單點故障問題的高可用性服務(wù)模塊,此模塊是基于Apache ZooKeeper技術(shù)實現(xiàn)的枉氮,Apache ZooKeeper是一種可靠的志衍、交互式的、分布式協(xié)調(diào)服務(wù)組件聊替。
Flink能夠更方便地升級楼肪、遷移、暫停佃牛、恢復(fù)應(yīng)用服務(wù)
Flink的 Savepoint 服務(wù)就是為解決升級服務(wù)過程中記錄流應(yīng)用狀態(tài)信息及其相關(guān)難題而產(chǎn)生的一種唯一的淹辞、強大的組件。一個 Savepoint俘侠,就是一個應(yīng)用服務(wù)狀態(tài)的一致性快照象缀,因此其與checkpoint組件的很相似,但是與checkpoint相比爷速,Savepoint 需要手動觸發(fā)啟動央星,而且當流應(yīng)用服務(wù)停止時,它并不會自動刪除惫东。Savepoint 常被應(yīng)用于啟動一個已含有狀態(tài)的流服務(wù)莉给,并初始化其(備份時)狀態(tài)毙石。
監(jiān)控和控制應(yīng)用服務(wù)
Flink與許多常見的日志記錄和監(jiān)視服務(wù)集成得很好,并提供了一個REST API來控制應(yīng)用服務(wù)和查詢應(yīng)用信息颓遏。具體表現(xiàn)如下:
- Web UI方式: Flink提供了一個web UI來觀察徐矩、監(jiān)視和調(diào)試正在運行的應(yīng)用服務(wù)。并且還可以執(zhí)行或取消組件或任務(wù)的執(zhí)行叁幢。
- 日志集成服務(wù):Flink實現(xiàn)了流行的slf4j日志接口滤灯,并與日志框架log4j或logback集成。
- 指標服務(wù): Flink提供了一個復(fù)雜的度量系統(tǒng)來收集和報告系統(tǒng)和用戶定義的度量指標信息曼玩。度量信息可以導(dǎo)出到多個報表組件服務(wù)鳞骤,包括 JMX, Ganglia, Graphite, Prometheus, StatsD, Datadog, 和 Slf4j.
- 標準的WEB REST API接口服務(wù): Flink提供多種REST API接口,有提交新應(yīng)用程序黍判、獲取正在運行的應(yīng)用程序的Savepoint服務(wù)信息豫尽、取消應(yīng)用服務(wù)等接口。REST API還提供元數(shù)據(jù)信息和已采集的運行中或完成后的應(yīng)用服務(wù)的指標信息顷帖。
應(yīng)用場景
概述
Apache Flink因其豐富的功能而成為開發(fā)和運行多種不同類型應(yīng)用程序的絕佳選擇美旧。Flink的功能包括對流和批處理的支持,復(fù)雜的狀態(tài)管理窟她,事件時間處理語義以及狀態(tài)的一致性保證陈症。此外,F(xiàn)link可以部署在各種資源管理器上(如YARN震糖,Apache Mesos和Kubernetes),也可以作為裸機硬件上的獨立群集趴腋。Flink配置為高可用性吊说,沒有單點故障。Flink提供高吞吐量和低延遲优炬,并為世界上一些最苛刻的流處理應(yīng)用程序提供支持颁井。
下面,我們將探討由Flink提供支持的最常見類型的應(yīng)用程序蠢护,并指出實際示例雅宾。
- 事件驅(qū)動型的應(yīng)用程序
- 數(shù)據(jù)分析型的應(yīng)用程序
- 數(shù)據(jù)管道型的應(yīng)用程序
事件驅(qū)動型的應(yīng)用程序
事件驅(qū)動型的應(yīng)用程序是一個有狀態(tài)的應(yīng)用程序,它從一個或多個事件流中提取事件葵硕,并通過觸發(fā)計算眉抬、狀態(tài)更新或外部操作對傳入事件做出反應(yīng)。
傳統(tǒng)應(yīng)用程序設(shè)計具有分離的計算和數(shù)據(jù)存儲層懈凹,在此體系結(jié)構(gòu)中蜀变,應(yīng)用程序從遠程事務(wù)數(shù)據(jù)庫中讀取數(shù)據(jù)并將數(shù)據(jù)持久化。
相反介评,事件驅(qū)動的應(yīng)用程序基于有狀態(tài)流處理應(yīng)用程序库北。在這種設(shè)計中爬舰,數(shù)據(jù)和計算是共同定位的,這產(chǎn)生了本地(內(nèi)存或磁盤)數(shù)據(jù)訪問寒瓦。通過定期將檢查點寫入遠程持久存儲來實現(xiàn)容錯情屹。
事件驅(qū)動的應(yīng)用程序不是查詢遠程數(shù)據(jù)庫,而是在本地訪問其數(shù)據(jù)杂腰,從而在吞吐量和延遲方面產(chǎn)生更好的性能垃你。遠程持久存儲的檢查點可以異步和遞增完成。因此颈墅,檢查點對常規(guī)事件處理的影響非常小蜡镶。
幾種典型的事件驅(qū)動型應(yīng)用程序:
欺詐識別
異常檢測
基于規(guī)則的警報
業(yè)務(wù)流程監(jiān)控
Web應(yīng)用程序(社交網(wǎng)絡(luò))
數(shù)據(jù)分析型應(yīng)用程序
數(shù)據(jù)分析工作從原始數(shù)據(jù)中提取信息。傳統(tǒng)上恤筛,數(shù)據(jù)分析是在記錄事件的有界數(shù)據(jù)集上作為批量查詢或應(yīng)用程序執(zhí)行官还。為了將最新數(shù)據(jù)合并到分析結(jié)果中,必須將其添加到分析的數(shù)據(jù)集中毒坛,并重新運行查詢或應(yīng)用程序望伦。結(jié)果將寫入存儲系統(tǒng)或作為報告發(fā)出。
借助先進的流處理引擎煎殷,還可以實時地執(zhí)行分析屯伞。流式查詢或應(yīng)用程序不是讀取有限數(shù)據(jù)集,而是攝取實時事件流豪直,并在消耗事件時不斷生成和更新結(jié)果劣摇。結(jié)果要么寫入外部數(shù)據(jù)庫,要么保持為內(nèi)部狀態(tài)弓乙。儀表板應(yīng)用程序可以從外部數(shù)據(jù)庫讀取最新結(jié)果或直接查詢應(yīng)用程序的內(nèi)部狀態(tài)末融。Apache Flink支持流式和批量分析應(yīng)用程序。
與批量分析相比暇韧,連續(xù)流分析的優(yōu)勢不僅限于低延遲勾习。與批量查詢相比,流式查詢不必處理輸入數(shù)據(jù)中的人為邊界懈玻,這些邊界是由定期導(dǎo)入和輸入的有界性質(zhì)引起的巧婶。
另一方面是更簡單的應(yīng)用程序架構(gòu)。批量分析管道由若干獨立組件組成涂乌,以定期調(diào)度數(shù)據(jù)提取和查詢執(zhí)行艺栈。可靠地操作這樣的管道并非易事骂倘,因為一個組件的故障會影響管道的后續(xù)步驟眼滤。相比之下,在像Flink這樣的復(fù)雜流處理器上運行的流分析應(yīng)用程序包含從數(shù)據(jù)攝取到連續(xù)結(jié)果計算的所有步驟历涝。
幾種典型的數(shù)據(jù)分析型應(yīng)用程序:
電信網(wǎng)絡(luò)的質(zhì)量監(jiān)控
分析移動應(yīng)用程序中的產(chǎn)品更新和實驗評估
對消費者技術(shù)中的實時數(shù)據(jù)進行特別分析
大規(guī)模圖分析
數(shù)據(jù)管道型應(yīng)用程序
提取 - 轉(zhuǎn)換 - 加載(ETL)是在存儲系統(tǒng)之間轉(zhuǎn)換和移動數(shù)據(jù)的常用方法诅需。通常會定期觸發(fā)ETL作業(yè)漾唉,以將數(shù)據(jù)從事務(wù)數(shù)據(jù)庫系統(tǒng)復(fù)制到分析數(shù)據(jù)庫或數(shù)據(jù)倉庫。
數(shù)據(jù)管道與ETL作業(yè)具有相似的用途堰塌。它們可以轉(zhuǎn)換和豐富數(shù)據(jù)赵刑,并可以將數(shù)據(jù)從一個存儲系統(tǒng)移動到另一個存儲系統(tǒng)。但是场刑,它們以連續(xù)流模式運行般此,而不是定期觸發(fā)。因此牵现,他們能夠從連續(xù)生成數(shù)據(jù)的源中讀取記錄铐懊,并以低延遲將其移動到目的地。例如瞎疼,數(shù)據(jù)管道可能會監(jiān)視文件系統(tǒng)目錄中的新文件并將其數(shù)據(jù)寫入事件日志科乎。
連續(xù)數(shù)據(jù)流水線優(yōu)于周期性ETL作業(yè)的原因是減少了將數(shù)據(jù)移動到目的地的延遲。此外贼急,數(shù)據(jù)管道更通用茅茂,可用于更多用例,因為它們能夠連續(xù)消耗和發(fā)送數(shù)據(jù)太抓。
幾種典型的數(shù)據(jù)管道型應(yīng)用:
電子商務(wù)中的實時搜索索引構(gòu)建
電子商務(wù)中持續(xù)的ETL