本文主要是簡單介紹一下Flink基礎信息,更多有關Flink的介紹可以查看 "官方文檔" 。 Big Data "wikipedia" 大數據(Big data),又稱為巨量資料,指的是傳統數據處理應用軟體不足以處理它們的大或複雜的數據集的術語。大數據也可以定義為來自各種來源的大量非結構化或結構化數 ...
本文主要是簡單介紹一下Flink基礎信息,更多有關Flink的介紹可以查看官方文檔。
Big Data
wikipedia
大數據(Big data),又稱為巨量資料,指的是傳統數據處理應用軟體不足以處理它們的大或複雜的數據集的術語。大數據也可以定義為來自各種來源的大量非結構化或結構化數據。
百度百科
大數據(big data),指無法在一定時間範圍內用常規軟體工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。
大數據特點(IBM提出)
Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。
- Volume:數據量大,包括採集、存儲和計算的量都非常大。大數據的起始計量單位至少是P(1000個T)、E(100萬個T)或Z(10億個T)。
- Variety:種類和來源多樣化。包括結構化、半結構化和非結構化數據,具體表現為網路日誌、音頻、視頻、圖片、地理位置信息等等,多類型的數據對數據的處理能力提出了更高的要求。
- Value:數據價值密度相對較低,或者說是浪里淘沙卻又彌足珍貴。隨著互聯網以及物聯網的廣泛應用,信息感知無處不在,信息海量,但價值密度較低,如何結合業務邏輯並通過強大的機器演算法來挖掘數據價值,是大數據時代最需要解決的問題。
- Velocity:數據增長速度快,處理速度也快,時效性要求高。比如搜索引擎要求幾分鐘前的新聞能夠被用戶查詢到,個性化推薦演算法儘可能要求實時完成推薦。這是大數據區別於傳統數據挖掘的顯著特征。
- Veracity:數據的準確性和可信賴度,即數據的質量。
流計算
流計算是針對流式數據的實時計算。
- 流式數據是指將數據看作數據流的形式來處理,數據流是在時間分佈和數量上無限的一系列動態數據集合體,數據記錄是數據流的最小組成單元。
- 流數據具有數據實時持續不斷到達、到達次序獨立、數據來源眾多格式複雜、數據規模大且不十分關註存儲、註重數據的整體價值而不關註個別數據等特點。
Flink是什麼
Apache Flink® - Stateful Computations over Data Streams
Apache Flink是一個用於對無界和有界數據流進行狀態計算的框架和分散式處理引擎,它同時支持批處理和流處理,作為流處理看待時輸入數據流是無界的,批處理被作為一種特殊的流處理。
架構原理
Flink集群啟動後,首先會啟動一個JobManger和一個或多個TaskManager。由Client提交任務給JobManager,JobManager再調度任務到各個TaskManager去執行,然後TaskManager將心跳和統計信息彙報給JobManager。TaskManager之間以流的形式進行數據的傳輸。JobManager、TaskManager和Client均為獨立的JVM進程。
JobManager
系統的協調者,負責接收Job,調度組成Job的多個Task的執行,收集Job的狀態信息,管理Flink集群中的TaskManager。
TaskManager
實際負責執行計算的Worker,並負責管理其所在節點的資源信息,在啟動的時候將資源的狀態向JobManager彙報。
Client
負責提交Job,可以運行在任何與JobManager環境連通的機器上,提交Job後,Client可以結束進程,也可以不結束並等待結果返回。
編程模型
Flink程式的基礎構建模塊是流和轉換,每一個數據流都起始於一個或多個source,終止於一個或多個sink。
Flink程式的基礎構建模塊是流(streams)與轉換(transformations),每一個數據流起始於一個或多個source,並終止於一個或多個sink,下麵是一個由Flink程式映射為Streaming Dataflow的示意圖:
public static void main(String[] args) throws Exception {
// 創建數據流執行環境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 通過連接socket獲取輸入數據
DataStream<String> text = env.socketTextStream("localhost", 9009, "\n");
// 解析數據
DataStream<Tuple2<String, Integer>> windowCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
for (String word : value.split("\\s")) {
out.collect(Tuple2.of(word, 1));
}
}
})
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
// 將結果列印到控制台
windowCounts.print();
env.execute("Socket Window WordCount");
}
適用場景
- 事件驅動的應用程式
- 數據分析應用
- 數據管道應用
容錯機制
Flink的容錯機制的核心部分是分散式數據流和運營商狀態的一致快照,系統發生故障的時候這些快照可以充當一致性檢查點來退回,恢復作業的狀態和計算位置等。
- Checkpointing
- Recovery
- Operator Snapshot Implementation
詳情參考Data Streaming Fault Tolerance