淺談實(shí)時(shí)計(jì)算框架Flink集群搭建與運(yùn)行機(jī)制
一、Flink概述
1.1、基礎(chǔ)簡(jiǎn)介
主要特性包括:批流一體化、精密的狀態(tài)管理、事件時(shí)間支持以及精確一次的狀態(tài)一致性保障等。Flink不僅可以運(yùn)行在包括YARN、Mesos、Kubernetes在內(nèi)的多種資源管理框架上,還支持在裸機(jī)集群上獨(dú)立部署。在啟用高可用選項(xiàng)的情況下,它不存在單點(diǎn)失效問(wèn)題。
這里要說(shuō)明兩個(gè)概念:
- 邊界:無(wú)邊界和有邊界數(shù)據(jù)流,可以理解為數(shù)據(jù)的聚合策略或者條件;
- 狀態(tài):即執(zhí)行順序上是否存在依賴關(guān)系,即下次執(zhí)行是否依賴上次結(jié)果;
1.2、應(yīng)用場(chǎng)景
Data Driven
事件驅(qū)動(dòng)型應(yīng)用無(wú)須查詢遠(yuǎn)程數(shù)據(jù)庫(kù),本地?cái)?shù)據(jù)訪問(wèn)使得它具有更高的吞吐和更低的延遲,以反欺詐案例來(lái)看,DataDriven把處理的規(guī)則模型寫到DatastreamAPI中,然后將整個(gè)邏輯抽象到Flink引擎,當(dāng)事件或者數(shù)據(jù)流入就會(huì)觸發(fā)相應(yīng)的規(guī)則模型,一旦觸發(fā)規(guī)則中的條件后,DataDriven會(huì)快速處理并對(duì)業(yè)務(wù)應(yīng)用進(jìn)行通知。
Data Analytics
和批量分析相比,由于流式分析省掉了周期性的數(shù)據(jù)導(dǎo)入和查詢過(guò)程,因此從事件中獲取指標(biāo)的延遲更低。不僅如此,批量查詢必須處理那些由定期導(dǎo)入和輸入有界性導(dǎo)致的人工數(shù)據(jù)邊界,而流式查詢則無(wú)須考慮該問(wèn)題,F(xiàn)link為持續(xù)流式分析和批量分析都提供了良好的支持,實(shí)時(shí)處理分析數(shù)據(jù),應(yīng)用較多的場(chǎng)景如實(shí)時(shí)大屏、實(shí)時(shí)報(bào)表。
Data Pipeline
與周期性的ETL作業(yè)任務(wù)相比,持續(xù)數(shù)據(jù)管道可以明顯降低將數(shù)據(jù)移動(dòng)到目的端的延遲,例如基于上游的StreamETL進(jìn)行實(shí)時(shí)清洗或擴(kuò)展數(shù)據(jù),可以在下游構(gòu)建實(shí)時(shí)數(shù)倉(cāng),確保數(shù)據(jù)查詢的時(shí)效性,形成高時(shí)效的數(shù)據(jù)查詢鏈路,這種場(chǎng)景在媒體流的推薦或者搜索引擎中十分常見(jiàn)。
二、環(huán)境部署
2.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.7
2.2、集群配置
管理節(jié)點(diǎn)
[root@hop01 opt]# cd /opt/flink1.7/conf
[root@hop01 conf]# vim flink-conf.yaml
jobmanager.rpc.address: hop01
分布節(jié)點(diǎn)
[root@hop01 conf]# vim slaves
hop02
hop03
兩個(gè)配置同步到所有集群節(jié)點(diǎn)下面。
2.3、啟動(dòng)與停止
/opt/flink1.7/bin/start-cluster.sh
/opt/flink1.7/bin/stop-cluster.sh
啟動(dòng)日志:
[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.
2.4、Web界面
訪問(wèn):http://hop01:8081/
三、開(kāi)發(fā)入門案例
3.1、數(shù)據(jù)腳本
分發(fā)一個(gè)數(shù)據(jù)腳本到各個(gè)節(jié)點(diǎn):
/var/flink/test/word.txt
3.2、引入基礎(chǔ)依賴
這里基于Java寫的基礎(chǔ)案例。
<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.3、讀取文件數(shù)據(jù)
這里直接讀取文件中的數(shù)據(jù),經(jīng)過(guò)程序流程分析出每個(gè)單詞出現(xiàn)的次數(shù)。
public class WordCount { public static void main(String[] args) throws Exception { // 讀取文件數(shù)據(jù) readFile () ; } public static void readFile () throws Exception { // 1、執(zhí)行環(huán)境創(chuàng)建 ExecutionEnvironment environment = ExecutionEnvironment.getExecutionEnvironment(); // 2、讀取數(shù)據(jù)文件 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、打印處理結(jié)果 wordDataSet.print(); } // 數(shù)據(jù)讀取個(gè)切割方式 static class WordFlatMapFunction implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String input, Collector<Tuple2<String, Integer>> collector){ String[] wordArr = input.split(","); for (String word : wordArr) { collector.collect(new Tuple2<>(word, 1)); } } } }
3.4、讀取端口數(shù)據(jù)
在hop01服務(wù)上創(chuàng)建一個(gè)端口,并模擬一些數(shù)據(jù)發(fā)送到該端口:
[root@hop01 ~]# nc -lk 5566
c++,java
通過(guò)Flink程序讀取并分析該端口的數(shù)據(jù)內(nèi)容:
public class WordCount { public static void main(String[] args) throws Exception { // 讀取端口數(shù)據(jù) readPort (); } public static void readPort () throws Exception { // 1、執(zhí)行環(huán)境創(chuàng)建 StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment(); // 2、讀取Socket數(shù)據(jù)端口 DataStreamSource<String> inputStream = environment.socketTextStream("hop01", 5566); // 3、數(shù)據(jù)讀取個(gè)切割方式 SingleOutputStreamOperator<Tuple2<String, Integer>> resultDataStream = inputStream.flatMap( new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public 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、打印分析結(jié)果 resultDataStream.print(); // 5、環(huán)境啟動(dòng) environment.execute(); } }
四、運(yùn)行機(jī)制
4.1、FlinkClient
客戶端用來(lái)準(zhǔn)備和發(fā)送數(shù)據(jù)流到JobManager節(jié)點(diǎn),之后根據(jù)具體需求,客戶端可以直接斷開(kāi)連接,或者維持連接狀態(tài)等待任務(wù)處理結(jié)果。
4.2、JobManager
在Flink集群中,會(huì)啟動(dòng)一個(gè)JobManger節(jié)點(diǎn)和至少一個(gè)TaskManager節(jié)點(diǎn),JobManager收到客戶端提交的任務(wù)后,JobManager會(huì)把任務(wù)協(xié)調(diào)下發(fā)到具體的TaskManager節(jié)點(diǎn)去執(zhí)行,TaskManager節(jié)點(diǎn)將心跳和處理信息發(fā)送給JobManager。
4.3、TaskManager
任務(wù)槽(slot)是TaskManager中最小的資源調(diào)度單位,在啟動(dòng)的時(shí)候就設(shè)置好了槽位數(shù),每個(gè)槽位能啟動(dòng)一個(gè)Task,接收J(rèn)obManager節(jié)點(diǎn)部署的任務(wù),并進(jìn)行具體的分析處理。
五、源代碼地址
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent
以上就是淺談實(shí)時(shí)計(jì)算框架Flink集群搭建與運(yùn)行機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于實(shí)時(shí)計(jì)算框架 Flink集群搭建與運(yùn)行機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Linux防火墻iptables禁IP與解封IP常用命令
這篇文章主要介紹了詳解Linux防火墻iptables禁IP與解封IP常用命令,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Linux報(bào)錯(cuò)cannot?open?shared?object?file問(wèn)題及解決
這篇文章主要介紹了Linux報(bào)錯(cuò)cannot?open?shared?object?file問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08詳解centos7虛擬機(jī)安裝elasticsearch5.0.x-安裝篇
本篇文章主要介紹了centos7虛擬機(jī)安裝elasticsearch5.0.x-安裝篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12centos系統(tǒng)搭建本地yum服務(wù)器的方法
YUM是Yellow dog Updater, Modified的縮寫,是由Duke University所發(fā)起的計(jì)劃,目的就是為了解決RPM的依賴關(guān)系的問(wèn)題,方便使用者進(jìn)行軟件的安裝、升級(jí)等等工作。這篇文章主要給大家介紹了在centos系統(tǒng)搭建本地yum服務(wù)器的方法,有需要的朋友們可以參考借鑒。2016-12-12CentOS7安裝調(diào)試Mysql數(shù)據(jù)庫(kù)的步驟詳解【實(shí)例】
這篇文章主要介紹了CentOS7安裝調(diào)試Mysql數(shù)據(jù)庫(kù),本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10CentOS7 LNMP+phpmyadmin環(huán)境搭建 第二篇LNMP環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了CentOS7 LNMP+phpmyadmin環(huán)境搭建,第二篇LNMP環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07