实时计算框架:Flink集群搭建与运行机制
一、Flink概述
1、基礎簡介
Flink是一個框架和分布式處理引擎,用于對無界和有界數據流進行有狀態計算。Flink被設計在所有常見的集群環境中運行,以內存執行速度和任意規模來執行計算。主要特性包括:批流一體化、精密的狀態管理、事件時間支持以及精確一次的狀態一致性保障等。Flink不僅可以運行在包括YARN、Mesos、Kubernetes在內的多種資源管理框架上,還支持在裸機集群上獨立部署。在啟用高可用選項的情況下,它不存在單點失效問題。
這里要說明兩個概念:
- 邊界:無邊界和有邊界數據流,可以理解為數據的聚合策略或者條件;
- 狀態:即執行順序上是否存在依賴關系,即下次執行是否依賴上次結果;
2、應用場景
Data Driven
事件驅動型應用無須查詢遠程數據庫,本地數據訪問使得它具有更高的吞吐和更低的延遲,以反欺詐案例來看,DataDriven把處理的規則模型寫到DatastreamAPI中,然后將整個邏輯抽象到Flink引擎,當事件或者數據流入就會觸發相應的規則模型,一旦觸發規則中的條件后,DataDriven會快速處理并對業務應用進行通知。
Data Analytics
和批量分析相比,由于流式分析省掉了周期性的數據導入和查詢過程,因此從事件中獲取指標的延遲更低。不僅如此,批量查詢必須處理那些由定期導入和輸入有界性導致的人工數據邊界,而流式查詢則無須考慮該問題,Flink為持續流式分析和批量分析都提供了良好的支持,實時處理分析數據,應用較多的場景如實時大屏、實時報表。
Data Pipeline
與周期性的ETL作業任務相比,持續數據管道可以明顯降低將數據移動到目的端的延遲,例如基于上游的StreamETL進行實時清洗或擴展數據,可以在下游構建實時數倉,確保數據查詢的時效性,形成高時效的數據查詢鏈路,這種場景在媒體流的推薦或者搜索引擎中十分常見。
二、環境部署
1、安裝包管理
[root@hop01 opt]# tar -zxvf flink-1.7.0-bin-hadoop27-scala_2.11.tgz [root@hop02 opt]# mv flink-1.7.0 flink1.72、集群配置
管理節點
[root@hop01 opt]# cd /opt/flink1.7/conf [root@hop01 conf]# vim flink-conf.yamljobmanager.rpc.address: hop01分布節點
[root@hop01 conf]# vim slaveshop02 hop03兩個配置同步到所有集群節點下面。
3、啟動與停止
/opt/flink1.7/bin/start-cluster.sh /opt/flink1.7/bin/stop-cluster.sh啟動日志:
[root@hop01 conf]# /opt/flink1.7/bin/start-cluster.sh Starting cluster. Starting standalonesession daemon on host hop01. Starting taskexecutor daemon on host hop02. Starting taskexecutor daemon on host hop03.4、Web界面
訪問:http://hop01:8081/
三、開發入門案例
1、數據腳本
分發一個數據腳本到各個節點:
/var/flink/test/word.txt2、引入基礎依賴
這里基于Java寫的基礎案例。
<dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.7.0</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java_2.11</artifactId><version>1.7.0</version></dependency> </dependencies>3、讀取文件數據
這里直接讀取文件中的數據,經過程序流程分析出每個單詞出現的次數。
public class WordCount {public static void main(String[] args) throws Exception {// 讀取文件數據readFile () ;}public static void readFile () throws Exception {// 1、執行環境創建ExecutionEnvironment environment = ExecutionEnvironment.getExecutionEnvironment();// 2、讀取數據文件String filePath = "/var/flink/test/word.txt" ;DataSet<String> inputFile = environment.readTextFile(filePath);// 3、分組并求和DataSet<Tuple2<String, Integer>> wordDataSet = inputFile.flatMap(new WordFlatMapFunction()).groupBy(0).sum(1);// 4、打印處理結果wordDataSet.print();}// 數據讀取個切割方式static class WordFlatMapFunction implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String input, Collector<Tuple2<String, Integer>> collector){String[] wordArr = input.split(",");for (String word : wordArr) {collector.collect(new Tuple2<>(word, 1));}}} }4、讀取端口數據
在hop01服務上創建一個端口,并模擬一些數據發送到該端口:
[root@hop01 ~]# nc -lk 5566 c++,java通過Flink程序讀取并分析該端口的數據內容:
public class WordCount {public static void main(String[] args) throws Exception {// 讀取端口數據readPort ();}public static void readPort () throws Exception {// 1、執行環境創建StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();// 2、讀取Socket數據端口DataStreamSource<String> inputStream = environment.socketTextStream("hop01", 5566);// 3、數據讀取個切割方式SingleOutputStreamOperator<Tuple2<String, Integer>> resultDataStream = inputStream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>(){@Overridepublic void flatMap(String input, Collector<Tuple2<String, Integer>> collector) {String[] wordArr = input.split(",");for (String word : wordArr) {collector.collect(new Tuple2<>(word, 1));}}}).keyBy(0).sum(1);// 4、打印分析結果resultDataStream.print();// 5、環境啟動environment.execute();} }四、運行機制
FlinkClient
客戶端用來準備和發送數據流到JobManager節點,之后根據具體需求,客戶端可以直接斷開連接,或者維持連接狀態等待任務處理結果。
JobManager
在Flink集群中,會啟動一個JobManger節點和至少一個TaskManager節點,JobManager收到客戶端提交的任務后,JobManager會把任務協調下發到具體的TaskManager節點去執行,TaskManager節點將心跳和處理信息發送給JobManager。
TaskManager
任務槽(slot)是TaskManager中最小的資源調度單位,在啟動的時候就設置好了槽位數,每個槽位能啟動一個Task,接收JobManager節點部署的任務,并進行具體的分析處理。
五、源代碼地址
GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent大數據系列
-
Hadoop框架
- 大數據簡介,技術體系分類整理
- Hadoop框架:單服務下偽分布式集群搭建
- Hadoop框架:集群模式下分布式環境搭建
- Hadoop框架:HDFS簡介與Shell管理命令
- Hadoop框架:HDFS讀寫機制與API詳解
- Hadoop框架:NameNode工作機制詳解
- Hadoop框架:DataNode工作機制詳解
- Hadoop框架:HDFS高可用環境配置
- Hadoop框架:MapReduce基本原理和入門案例
- Hadoop框架:Yarn基本結構和運行原理
-
基礎組件
- 數據倉庫組件:Hive環境搭建和基礎用法
- 數據倉庫組件:HBase集群環境搭建和應用案例
- 數據采集組件:Flume基礎用法和Kafka集成
- 數據搬運組件:基于Sqoop管理數據導入和導出
- 數據調度組件:基于Azkaban協調時序任務執行
- 數據搬運組件:基于DataX同步數據和源碼分析
-
實時計算框架
- 實時計算框架:Spark集群搭建與入門案例
-
OLAP分析引擎
- OLAP分析引擎,基于Druid組件數據統計分析
- OLAP分析引擎:基于Presto組件跨數據源分析
- OLAP查詢引擎:列式庫ClickHouse集群管理
總結
以上是生活随笔為你收集整理的实时计算框架:Flink集群搭建与运行机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程桌面连接(转)
- 下一篇: Oracle中的pfile和spfile