实时计算框架:Flink集群搭建与运行机制

实时计算框架:Flink集群搭建与运行机制Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。主要特性包括:批流一体化、精密的状态管理、事

实时计算框架:Flink集群搭建与运行机制

一、Flink概述

1、基础简介

Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink不仅可以运行在包括YARN、Mesos、Kubernetes在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。

实时计算框架:Flink集群搭建与运行机制

这里要说明两个概念:

  • 边界:无边界和有边界数据流,可以理解为数据的聚合策略或者条件;
  • 状态:即执行顺序上是否存在依赖关系,即下次执行是否依赖上次结果;

2、应用场景

Data Driven

实时计算框架:Flink集群搭建与运行机制

事件驱动型应用无须查询远程数据库,本地数据访问使得它具有更高的吞吐和更低的延迟,以反欺诈案例来看,DataDriven把处理的规则模型写到DatastreamAPI中,然后将整个逻辑抽象到Flink引擎,当事件或者数据流入就会触发相应的规则模型,一旦触发规则中的条件后,DataDriven会快速处理并对业务应用进行通知。

Data Analytics

实时计算框架:Flink集群搭建与运行机制

和批量分析相比,由于流式分析省掉了周期性的数据导入和查询过程,因此从事件中获取指标的延迟更低。不仅如此,批量查询必须处理那些由定期导入和输入有界性导致的人工数据边界,而流式查询则无须考虑该问题,Flink为持续流式分析和批量分析都提供了良好的支持,实时处理分析数据,应用较多的场景如实时大屏、实时报表。

Data Pipeline

实时计算框架:Flink集群搭建与运行机制

与周期性的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/

实时计算框架:Flink集群搭建与运行机制

三、开发入门案例

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

实时计算框架:Flink集群搭建与运行机制

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();
    }
}

四、运行机制

实时计算框架:Flink集群搭建与运行机制

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集群管理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6208.html

(0)
上一篇 2023-04-15
下一篇 2023-04-15

相关推荐

  • 一键部署MySQL8+keepalived双主热备高可用「终于解决」

    一键部署MySQL8+keepalived双主热备高可用「终于解决」概述 本次的文章会格外的长,网上大多的配置流程已经不可使用,本篇文章可以称为保姆级教程,而且通过shell脚本大大减少了部署mysql主从,双主的工作量。 如上图,VIP地址为192.168.10.1

    2023-06-19
    150
  • Python中的断言: 定义及用法

    Python中的断言: 定义及用法在Python中,断言(assert)是一种用于调试的有效工具,它允许你核实某个条件是否为真,如果该条件不满足,就会抛出异常。

    2024-01-27
    134
  • 三分钟快速搭建分布式高可用的Redis集群

    三分钟快速搭建分布式高可用的Redis集群Redis Cluster是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求,让我们一起快速搭建出分布式高可用的Redis集群吧!

    2023-02-27
    161
  • SQL之DDL、DML、DCL、TCL

    SQL之DDL、DML、DCL、TCL SQL SQL(structured query language)是一种领域特定语言(DSL,domain-specific language),用于管理关系型数据库(relational…

    2023-03-26
    141
  • mysql全量备份、增量备份实现方法_删除Windows日志

    mysql全量备份、增量备份实现方法_删除Windows日志基于 mysql.exe、mysqldump.exe、mysqlbinlog.exe 开发,mysql 数据备份。 此工具在使用前 请开启 log_bin,在 my.ini 文件里 log-bin=…

    2023-02-14
    144
  • Python def详解

    Python def详解Python中的def是定义函数的关键字。函数是一段代码,可以在不同的地方多次调用,并且可重复使用。函数可以接受一个或多个参数,并在函数内部进行处理,然后返回处理结果。使用函数可以使代码更加模块化,更易于维护。

    2024-07-27
    34
  • DB concept 恢复系统[通俗易懂]

    DB concept 恢复系统[通俗易懂]aries 减少恢复时间 减少检查点开销 避免重做日志冗余重做 减少日质量 LSN:日志序列号,标识操作在页上实施 物理逻辑redo,物理上标识受影响的页,页内逻辑 脏页表:内存已更新,未刷盘,减少…

    2023-04-06
    188
  • mysql的三种锁_Mysql死锁

    mysql的三种锁_Mysql死锁导读 正所谓有人(锁)的地方就有江湖(事务),人在江湖飘,怎能一无所知? 今天来细说一下Mysql中的三类锁,分别是全局锁、表级锁、行级锁。 文章首发于作者公众号【码猿技术专栏】,原创不易,喜欢的点个

    2023-02-12
    175

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注