Flink入门篇-概念

什么是Flink

概念

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算会保留之前的状态)。Flink设计为在所有常见的集群环境(yarn、本地等都可以)中运行,以内存速度和任何规模执行计算。
在这里插入图片描述

特点

在这里插入图片描述
flink是事件驱动应用(来一个数据就计算,来一个就计算)
spark是时间驱动,几秒处理一次

  • 支持高吞吐、低延迟、高性能的流处理
  • 支持带有事件时间的窗口(Window)操作
  • 支持有状态计算的Exactly-once语义(只处理一次)
  • 支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作,三个大类,八种小类窗口
  • 支持具有反压功能的持续流模型(比如spark假如是五秒处理一次,假如一个五秒数据没有处理完成,数据会积压,会造成各种问题,但flink没有处理完数据,会减缓数据来的速度)
  • 支持基于轻量级分布式快照(Snapshot)实现的容错
  • 一个运行时同时支持Batch on Streaming处理和Streaming处理
  • Flink在JVM内部实现了自己的内存管理,避免了出现oom(spark容易内存溢出,不稳定)
  • 支持迭代计算
  • 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

Flink技术栈

local:idea中右键运行
cluster:standalone自己就是一个集群的模式、yarn集群运行模式
cloud:云,比如阿里云之类的

flink实现了流批统一
在这里插入图片描述

本地安装flink

加载配置文件:
我这里安装的是2.11版本,额外只需要加上scala和Java的编译环境即可,flink就是Java写的

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ShuJia01</artifactId>
        <groupId>ShuJia</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>flink</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <flink.version>1.11.2</flink.version>
        <scala.binary.version>2.11</scala.binary.version>
        <scala.version>2.11.12</scala.version>
        <log4j.version>2.12.1</log4j.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-walkthrough-common_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>




        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <!-- Java Compiler -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <!-- Scala Compiler -->
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>


</project>

写代码之前的准备工作

1、在运行flink程序代码之前,一定要导入隐式转换(每一次写程序都要导入这个
在这里插入图片描述
2、先对共同的代码做一个封装,再写之后的代码

abstract class FlinkTool {
  def main(args: Array[String]): Unit = {
    //创建flink的环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度
    env.setParallelism(2)
    run(env)
    env.execute()//启动flink
  }
  def run(env:StreamExecutionEnvironment)
}

3、做一个日志的打印
在flink项目的resources中加上log4j2.properties的配置,打印日志信息
在这里插入图片描述

Flink处理数据模型

在这里插入图片描述

Flink分布式运行架构

在这里插入图片描述

  • Client:Flink 作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出DataFlow graph,然后通过Client提交给JobManager。

  • JobManager:是主(master)节点,相当于Spark的Driver,相当于YARN里面的ResourceManager,生产环境中需要做高可用。JobManager会将任务进行拆分,发送到TaskManager上面执行。

  • TaskManager:是从节点(slave),相当于Spark的Executor,执行task

taskmanager相当于executor,一个task相当于一个线程池,一个task相当于一个并行度,用来启动task
Memory & I/O Manager 相当于blockmanager
Network Manager,管理连接
Actor System用于通信,Scala框架

jobmanager相当于driver,所有任务都部署完成,任务才启动

按照spark的情况部署

在这里插入图片描述
运行一个wordcount程序,起码需要五个task槽位,一个槽位对应一个并行度(一个core(核))

优化之后的槽位

在这里插入图片描述
只需要前两个,也就是两个槽位(两个并行度),一个并行度占用一个资源

Flink standalone模式

搭建

flink集群搭建
1、standallone cluster
1、准备工作
配置FLINK_HOME
免密钥
2、上传解压
tar -xvf flink-1.11.0-bin-scala_2.11.tgz
配置环境变量

3、修改配置文件
vim conf/flink-conf.yaml
jobmanager.rpc.address: master 主节点ip地址

vim conf/workers
增加从节点 node1 node2

vim conf/masters
改成主节点ip

同步到所有节点
scp -r flink-1.11.0/ node1:pwd

4、启动集群
start-cluster.sh

http://master:8081 访问web界面
在这里插入图片描述

Flink集群提交任务

web页面提交任务

在这里插入图片描述
成功运行

在这里插入图片描述

Flink on yarn模式

搭建

flink on yarn 只需要部署一个节点
1、配置HADOOP_CONF_DIR
vim /etc/profile
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-2.7.6/etc/hadoop/

2、将hadoop依赖jar上传到flink lib目录
flink-shaded-hadoop-2-uber-2.6.5-10.0

flink和spark一样都是粗粒度资源申请

flink启动方式
1、yarn-session 在yarn里面启动一个flink集群 jobManager
先启动hadoop
yarn-session.sh -jm 1024m -tm 1096m

提交任务  任务提交的是偶根据并行度动态申请taskmanager
	1、在web页面提交任务

	2、同flink命令提交任务
	flink run -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar 

	3、rpc方式提交任务

2、直接提交任务到yarn 每一个任务都会有一个jobManager
flink run -m yarn-cluster -yjm 1024m -ytm 1096m -c com.shujia.flink.core.Demo1WordCount flink-1.0.jar

杀掉yarn上的任务
yarn application -kill application_1599820991153_0005

yarn-session先在yarn中启动一个jobMansager ,所有的任务共享一个jobmanager (提交任务更快,任务之间共享jobmanager , 相互有影响)
直接提交任务模型,为每一个任务启动一个joibmanager (每一个任务独立jobmanager , 任务运行稳定)

在这里插入图片描述

感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊帅和和。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值