乐趣区

关于flink:实时计算框架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.7

2、集群配置

治理节点

[root@hop01 opt]# cd /opt/flink1.7/conf
[root@hop01 conf]# vim flink-conf.yaml

jobmanager.rpc.address: hop01

散布节点

[root@hop01 conf]# vim slaves

hop02
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.txt

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、读取文件数据

这里间接读取文件中的数据,通过程序流程剖析出每个单词呈现的次数。

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>> {
        @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));
            }
        }
    }
}

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>>()
        {
            @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、打印剖析后果
        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 集群治理
退出移动版