溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實時計算框架Flink集群搭建與運行機制

發(fā)布時間:2021-06-24 09:07:46 來源:億速云 閱讀:139 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“實時計算框架Flink集群搭建與運行機制”,在日常操作中,相信很多人在實時計算框架Flink集群搭建與運行機制問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”實時計算框架Flink集群搭建與運行機制”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、Flink概述

1.1、基礎簡介

主要特性包括:批流一體化、精密的狀態(tài)管理、事件時間支持以及精確一次的狀態(tài)一致性保障等。Flink不僅可以運行在包括YARN、Mesos、Kubernetes在內(nèi)的多種資源管理框架上,還支持在裸機集群上獨立部署。在啟用高可用選項的情況下,它不存在單點失效問題。

實時計算框架Flink集群搭建與運行機制

這里要說明兩個概念:

  • 邊界:無邊界和有邊界數(shù)據(jù)流,可以理解為數(shù)據(jù)的聚合策略或者條件;

  • 狀態(tài):即執(zhí)行順序上是否存在依賴關(guān)系,即下次執(zhí)行是否依賴上次結(jié)果;

1.2、應用場景

Data Driven

實時計算框架Flink集群搭建與運行機制

事件驅(qū)動型應用無須查詢遠程數(shù)據(jù)庫,本地數(shù)據(jù)訪問使得它具有更高的吞吐和更低的延遲,以反欺詐案例來看,DataDriven把處理的規(guī)則模型寫到DatastreamAPI中,然后將整個邏輯抽象到Flink引擎,當事件或者數(shù)據(jù)流入就會觸發(fā)相應的規(guī)則模型,一旦觸發(fā)規(guī)則中的條件后,DataDriven會快速處理并對業(yè)務應用進行通知。

Data Analytics

實時計算框架Flink集群搭建與運行機制

和批量分析相比,由于流式分析省掉了周期性的數(shù)據(jù)導入和查詢過程,因此從事件中獲取指標的延遲更低。不僅如此,批量查詢必須處理那些由定期導入和輸入有界性導致的人工數(shù)據(jù)邊界,而流式查詢則無須考慮該問題,F(xiàn)link為持續(xù)流式分析和批量分析都提供了良好的支持,實時處理分析數(shù)據(jù),應用較多的場景如實時大屏、實時報表。

Data Pipeline

實時計算框架Flink集群搭建與運行機制

與周期性的ETL作業(yè)任務相比,持續(xù)數(shù)據(jù)管道可以明顯降低將數(shù)據(jù)移動到目的端的延遲,例如基于上游的StreamETL進行實時清洗或擴展數(shù)據(jù),可以在下游構(gòu)建實時數(shù)倉,確保數(shù)據(jù)查詢的時效性,形成高時效的數(shù)據(jù)查詢鏈路,這種場景在媒體流的推薦或者搜索引擎中十分常見。

二、環(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é)點

[root@hop01 opt]# cd /opt/flink1.7/conf

[root@hop01 conf]# vim flink-conf.yaml


jobmanager.rpc.address: hop01

分布節(jié)點

[root@hop01 conf]# vim slaves


hop02

hop03

兩個配置同步到所有集群節(jié)點下面。

2.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.

2.4、Web界面

訪問:http://hop01:8081/

實時計算框架Flink集群搭建與運行機制

三、開發(fā)入門案例

3.1、數(shù)據(jù)腳本

分發(fā)一個數(shù)據(jù)腳本到各個節(jié)點:

/var/flink/test/word.txt

3.2、引入基礎依賴

這里基于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.3、讀取文件數(shù)據(jù)

這里直接讀取文件中的數(shù)據(jù),經(jīng)過程序流程分析出每個單詞出現(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ù)讀取個切割方式
    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));
            }
        }
    }
}

實時計算框架Flink集群搭建與運行機制

3.4、讀取端口數(shù)據(jù)

在hop01服務上創(chuàng)建一個端口,并模擬一些數(shù)據(jù)發(fā)送到該端口:

[root@hop01 ~]# nc -lk 5566

c++,java

通過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ù)讀取個切割方式
        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)境啟動
        environment.execute();
    }
}

四、運行機制

實時計算框架Flink集群搭建與運行機制

4.1、FlinkClient

客戶端用來準備和發(fā)送數(shù)據(jù)流到JobManager節(jié)點,之后根據(jù)具體需求,客戶端可以直接斷開連接,或者維持連接狀態(tài)等待任務處理結(jié)果。

4.2、JobManager

在Flink集群中,會啟動一個JobManger節(jié)點和至少一個TaskManager節(jié)點,JobManager收到客戶端提交的任務后,JobManager會把任務協(xié)調(diào)下發(fā)到具體的TaskManager節(jié)點去執(zhí)行,TaskManager節(jié)點將心跳和處理信息發(fā)送給JobManager。

4.3、TaskManager

任務槽(slot)是TaskManager中最小的資源調(diào)度單位,在啟動的時候就設置好了槽位數(shù),每個槽位能啟動一個Task,接收JobManager節(jié)點部署的任務,并進行具體的分析處理。

五、源代碼地址

GitHub·地址

https://github.com/cicadasmile/big-data-parent

GitEE·地址

https://gitee.com/cicadasmile/big-data-parent

到此,關(guān)于“實時計算框架Flink集群搭建與運行機制”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI