flink介绍、安装以及基本使用

本文介绍了Flink用于大数据流式计算的基本概念和优势,包括其解决实时统计问题的场景。详细讲述了如何使用Docker安装Flink集群,调整TaskManager的Task Slot,并提供了简单的批处理和流处理示例。此外,还讨论了Flink作业的线上运行流程和实战应用,如实时统计电商网站《奥特曼》相关商品销量。
摘要由CSDN通过智能技术生成

flink介绍、安装以及基本使用

简介

flink主要解决大数据流式计算问题,举个例子,我们在一个系统中难免会遇到统计功能,例如淘宝里面每间商品每个月销量,微信里面每月支出收入等,当数据达到一定程度,光靠数据库里的sum group by是不现实的,多则千万条数据,更甚多个表关联后会达到数亿计的临时数据,实时的统计会使得数据库占用大量资源,这个时候就需要流式计算,针对实时的数据变更通过流式计算出统计的数据,相当于每时每刻都在增量的计算统计结果,查询统计时直接读取当前的结果即可。

而flink则提供了这么一个分布式平台,我们只需要使用flink提供的java包里的方法,定义好输入,怎么处理数据,输出结果,然后打包成jar,上传到flink集群,flink自会帮我们解析任务,拆分任务,分配给不同机器处理。

请添加图片描述

优点显而易见:低代码,我们不必自己每次都写一个庞大的程序去处理数据,只需要用它提供的方法定义流程即可;分布式,我们不必纠结一台机器能不能稳定提供计算的能力,它会自动帮我们分布到不同机器运行。

docker 安装flink

docker pull flink:scala_2.12-java8(注意,这里尽量不要用latest,因为默认最新一般都是java11版本,使用java8开发的jar包会启动失败)

启动jobmanager(master节点,管理程序,负责调度job运算)

docker run -d --name jm --network mynet -p 8081:8081 -e JOB_MANAGER_RPC_ADDRESS=jm flink:scala_2.12-java8 jobmanager

启动两个taskmanager(真正运算task的节点)

docker run -d --name tm1 --network mynet -e JOB_MANAGER_RPC_ADDRESS=jm flink:scala_2.12-java8 taskmanager

docker run -d --name tm2 --network mynet -e JOB_MANAGER_RPC_ADDRESS=jm flink:scala_2.12-java8 taskmanager

然后可以通过8081打开管理页面,查看集群状态。

请添加图片描述

下面为了更好模拟正常的集群,我们把每个taskmanager的task slot数改为2(默认是1):

进入容器,修改opt/flink/conf/flink-conf.yaml里的taskmanager.numberOfTaskSlots: 2 (注意,这里如果用-v 映射文件出来会导致容器启动失败,具体原因不明,建议启动容器后通过 cp 命令把修改好的配置覆盖进去)

然后重启两个taskmanager容器即可。

基本概念

我们先举一个简单的场景,有个生产者持续向kafka生产文本,我们想要持续统计出现单词的个数,然后输出到mysql,并且希望有两个节点同时进行统计提高效率。

jobmanager:集群的master节点,如简介所说,它负责解析用户开发的jar包,生成job流程,拆分不同的任务,并且分配去不同slot运行。上面的例子可以拆分成4个子任务,监听kafka数据源,统计A,统计B,输出mysql。

taskmanager:集群真正干活的节点。上面拆分的4个子任务会被安排到taskmanager节点执行。

taskslot:一个taskmanager可以有多个slot,每个slot都有自己独立的内存空间,上面拆分的子任务会分配到slot里执行,因此每个子任务都有自己的内存空间存储临时数据,互不干扰。一般情况下,建议与cpu核心数一样,充分利用cpu运算资源。

operation:算子,运算单元,一个子任务包含一个或多个算子,例如上面的统计单词个数,明显就是一个sum操作,就是一个算子。

请添加图片描述

一个job的过程一般存在4个基本的元素:

environment:获取环境,一般就是指的集群环境。

source:读取数据源,就是上面的从kafka获取数据。

transform:就是算子操作,真正运算逻辑。

sink:输出,上面的输出的mysql。

简单开发:

新建一个maven项目

引入flink相关maven包,引入log4j相关maven包,flink默认使用log4j,这里引入log4j的包只是本地启动调试的需要,不然logger初始化会失败

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值