什麼是 Apache Flink?
Apache Flink 是一個開放原始碼的分散式引擎,用於在無邊界 (串流) 和有邊界 (批次) 資料集上進行狀態處理。串流處理應用程式設計可連續執行,停機時間最短,並在擷取時處理資料。Apache Flink 專為低延遲處理、在記憶體內執行運算、提供高可用性、消除單一故障點以及水平擴展而設計。
Apache Flink 的功能包括具有嚴格一次一致性保證的進階狀態管理,以及具有複雜失序處理和延遲資料處理的事件時間處理語義。Apache Flink 專為串流開發,並提供統一的程式設計界面,適用於串流和批次處理。
為什麼使用 Apache Fink?
由於 Apache Flink 具有廣泛的功能,因此其可用於建置許多不同類型的串流和批次處理應用程式。
Apache Flink 支援的一些常見應用程式類型是:
- 事件導向性應用程式,從一個或多個事件串流擷取事件,以及執行運作、狀態更新或外部動作。借助有狀態處理,可在單一訊息轉換之外實現邏輯,其中結果取決於擷取事件的歷史記錄。
- 資料分析應用程式,從資料中擷取資訊和洞見。傳統上,透過查詢有限資料集、重新執行查詢或修改結果以納入新資料來執行。藉助 Apache Flink,可以透過持續更新、串流查詢或即時處理擷取的事件、持續發出和更新結果來執行分析。
- 資料管線應用程式,其中轉換和豐富要從一個資料儲存移動到另一個資料儲存的資料。傳統上,提取-轉換-載入 (ETL) 會定期批次執行。藉助 Apache Flink,可以持續執行該程序,將資料以低延遲移動到其目標。
Apache Flink 如何運作?
Flink 是一款高輸送量、低延遲的串流處理引擎。Flink 應用程式由任意複雜的無環圖資料流圖組成,其中該圖形包含串流和轉換。資料從一個或多個資料來源擷取並傳送到一個或多個目標。來源系統和目標系統可以是串流、訊息佇列或資料儲存,包括檔案、常用資料庫和搜尋引擎。轉換可以具有狀態性,例如在時間段內進行的彙總或複雜的模式偵測。
透過兩種不同的機制實現容錯:以檢查點自動和定期檢查應用程式狀態,將其複製到持久性儲存中,以便在出現故障時自動復原;隨需儲存點,其中儲存一致的執行狀態映射,允許停止和恢復、更新或分流您的 Flink 作業,在停止和重新啟動後保留應用程式狀態。檢查點和儲存點機制是非同步的,在不「停止世界轉動」的情況下拍攝一致的狀態快照,而應用程式則會繼續處理事件。
Apache Flink 有哪些優點?
同時處理無邊界 (串流) 和有邊界 (批次) 資料集
Apache Flink 可以處理無邊界和有邊界資料集,即串流和批次資料。無邊界的串流有一個起點,但幾乎是無限的,永遠不會結束。理論上來說,處理永遠不會停止。
資料表等有邊界資料是有限的,可以在有限的時間內從開始到結束處理。
Apache Flink 提供演算法和資料結構,以透過相同的程式設計界面支援有邊界和無邊界處理。處理無邊界資料的應用程式會持續執行。處有理邊界資料的應用程式會在到達輸入資料集末尾時結束執行。
大規模執行應用程式
Apache Flink 專為幾乎任何規模執行狀態應用程式而設計。可以平行處理成千上萬個任務,這些任務同時分佈在多台電腦上。
狀態也會水平分割和分佈,允許在多台機器上維護數 TB 資料。狀態以增量方式點查到持久性儲存。
記憶體內效能
流經應用程式和狀態的資料會在多台機器上分割。因此,可以透過存取本機資料 (通常是記憶體中的資料) 來完成運算。
嚴格一次的狀態一致性
單個訊息轉換之外的應用程式是有狀態的。業務邏輯需要記住事件或中間結果。Apache Flink 可確保內部狀態的一致性,,即使在出現故障以及應用程式停止和重新啟動時也是如此。每條訊息對內部狀態的影響總是嚴格套用一次,無論應用程式在復原或重新啟動時是否可能收到資料來源的副本。
多種連接器
Apache Flink 具有許多經過驗證的連接器,可用於流行的簡訊和串流系統、資料儲存、搜尋引擎和檔案系統。一些範例包括 Apache Kafka、Amazon Kinesis Data Streams、Amazon SQS、Active MQ、Rabbit MQ、NiFi、OpenSearch 和 ElasticSearch、DynamoDB、HBase 以及任何提供 JDBC 用戶端的資料庫。
多層級的抽象
Apache Flink 為程式設計界面提供多層級抽象。在較高層級的串流 SQL 和 Table API 中,使用熟悉的抽象,例如資料表、聯結和分組。DataStream API 提供較低層級的抽象,但同時賦予更多的控制,包括串流、視窗化和映射的語義。最後,ProcessFunction API 提供對每個訊息的處理和狀態的直接控制。所有程式設計界面均可與無邊界 (串流) 和有邊界 (資料表) 日期集無縫合作。可以在同一個應用程式中使用不同層級的抽象,將其作為解決每個問題的正確工具。
多種程式設計語言
Apache Flink 可以使用多種語言進行程式設計,從高層級串流 SQL 到 Python、Scala、Java,以及其他 JVM 語言,例如 Kotlin。
有哪些 Apache Flink 使用案例?
Apache Flink 使用案例包括:
-
詐騙偵測、異常偵測、以規則為基礎的警示、即時 UX 個人化是事件驅動應用程式的使用案例。Flink 非常適合所有如下使用案例:需要以狀態的方式處理事件串流,考慮時間的演變,偵測複雜的模式,或在時間段內計算統計資料以偵測預期閾值偏差。
-
品質監控、即時資料的臨機分析、點擊流分析、產品實驗評估是 Flink 可以有效地支援的串流分析使用案例。利用 SQL 或 Table API 程式設計界面的高層級抽象,可以在串流即時資料和批次歷史資料上執行相同的分析。
-
監控檔案系統和將寫入寫入日誌,將事件串流具體化到資料庫,增量建置和精細搜尋索引,這些是連續 ETL 有效地支援的使用案例。利用廣泛的連接器組合,Flink 可以直接從多種類型的資料儲存讀取,接收變更事件的串流,甚至直接擷取變更。透過持續擷取和處理變更,並直接更新目標系統,Flink 可以將資料同步的延遲降至幾秒或更短。
誰會使用 Apache Flink?
NortonLifeLock
NortonLifeLock 是一家全球性的網路安全與網際網路隱私權公司,為數百萬客戶提供裝置安全性,以及家庭與家人身分識別和線上隱私權服務。
NortonLifeLock 將 VPN 作為免費增值服務提供給使用者。因此,他們需要即時強制執行使用限制,以阻止免費增值使用者使用超出其用量限制的服務。NortonLifeLock 面臨的挑戰是以可靠且具有成本效益的方式達成此目標。
NortonLifeLock 簡化了採用 Apache Flink 的使用者和裝置層級彙總的實作。
Samsung SmartThings
作為 Samsung的獨立子公司,SmartThings 是全球領先的 IoT 生態系統之一,它為所有人打造最輕鬆的智慧家居方式。
Samsung SmartThings 遇到了諸如將資源保留給單個應用程式之類的問題。未能保留資源會導致應用程式在處理資料時出現延遲和效能下降。這最終使公司在維護營運中的工作負載方面產生了高昂的開銷。他們不得不重新設計資料平台架構。
公司從 Apache Spark 轉為使用 Apache Flink。
BT 集團
BT 集團是英國領先的電信及網路供應商,也是全球通訊服務與解決方案的領先供應商,為 180 個國家/地區的客戶提供服務。該公司在英國的主要業務包括透過融合固定及行動網路向消費者、企業及公共部門客戶提供固定語音、行動通訊、寬頻和電視 (包括運動),以及一系列產品和服務。
BT 需要一款服務監控應用程式來支援 Digital Voice 的推出,這是其全新的消費類產品,可透過其英國寬頻網路進行高清語音通話。
BT 使用 Apache Flink 建置事件導向的分析服務,用於擷取、處理和視覺化服務資料。
Autodesk
Autodesk 是 3D 設計和工程軟體的供應商龍頭,希望在建立和交付軟體之外能有更多的可能。此外,還希望全球數百萬使用者在執行軟體時能有一流的體驗。
Autodesk 為創造者製作軟體。他們為兩億多位客戶提供服務。公司需要消除孤島,以便更快地發現和修復客戶問題。他們希望以一致的方式與小型營運團隊一起收集和衡量指標,而不會增加成本或造成資料鎖定。
NHL
國家曲棍球聯盟是北美四大職業團隊體育聯盟歷史第二悠久的聯盟。如今,NHL 由 32 個會員俱樂部組成,每個俱樂部都反映了聯盟的國際組成,球隊名單有來自 20 多個國家/地區的球員。
NHL 面臨著多項技術挑戰,例如確定預測具有大量不確定性的事件所需的功能和建模方法,以及確定如何使用串流 PPT 感測器資料來識別爭球發生的位置、參與的球員以及每位球員贏得爭球的概率,所有這些都在數百毫秒之內完成。
利用 Apache Flink,NHL 不僅能夠預測贏得爭球的球員,還能夠為以即時且具有成本效益的方式解決許多類似的問題奠定基礎。
Poshmark
Poshmark 是領先的社交市場,為女士、男士、兒童、寵物、家居等提供全新和二手穿搭風格。公司在美國、加拿大、澳大利亞和印度擁有超過 8000 萬註冊使用者的社群,該社群正在塑造購物的未來,使其變得簡單、社交和可持續。
Poshmark 一直專注於透過個人化和增強使用者體驗來實現頂線增長。最初使用批次處理實現個人化和安全性的方法並未達到改善客戶體驗的預期目標。
Poshmark 使用 Apache Flink 的即時資料豐富功能設計了即時個人化。
AWS 如何協助在雲端中執行 Apache Flink 應用程式?
Amazon Manages Service for Apache Flink 是一種全受管的解決方案,用於執行 Apache Flink 應用程式。Amazon Managed Service for Apache Flink 可簡化建構、管理及整合 Apache Flink 應用程式與其他 AWS 服務的複雜程序。藉助 Amazon Managed Service for Apache Flink,無需管理伺服器,也沒有最低費用或設定成本。依預設,該設定具備高可用性。應用程式狀態完全受管,並儲存到高耐用性後端以確保容錯。應用程式由簡單的 API 控制,該 API 用於停止、啟動、設定和擴展應用程式。
Amazon Managed Service for Apache Flink Studio 為 Apache Flink 提供互動式筆記本界面。使用 Apache Zeppelin 筆記本,您可以在 Apache Flink 上執行 SQL、Python 和 Scala 程式碼,以進行開發和實驗、資料檢查或視覺化。
Amazon EMR 還支援作為 YARN 應用程式的 Apache Flink,因此您可以管理資源,同時在叢集中執行其他應用程式。
Apache Flink 原生支援 Kubernetes。可以在 Amazon Elastic Kubernetes Service (Amazon EKS) 等容器化環境中自行託管 Apache Flink,也可以使用 Amazon Elastic Compute Cloud (Amazon EC2) 完全自行管理。
立即建立帳戶,開始使用在 AWS 上使用 Apache Flink。