Flink:入门介绍

目录

一、Flink简介

2.1 Flink 架构

2.2 Flink 应用程序 运行模式

二、Flink 集群 部署

2.1 本地集群模式

2.1.1  安装JDK​编辑

2.1.3 启动集群

2.1.4 停止集群

2.2 Standalone 模式

2.2.0 集群规划

2.2.1 安装JDK

2.2.2 设置免密登录

2.2.3 修改配置文件

2.2.4 启动集群

2.2.5 关闭集群

2.2.6 Standalone 高可用服务

2.3 YARN 模式

2.4 K8S 模式

三、Flink 应用 开发

3.1 编写Flink 应用程序

3.1.1 maven引入jar

3.1.2 编写代码

3.1.3 打包程序

3.2 运行 Flink 应用程序

3.2.1 命令行运行

3.2.2 WEB管理端运行

3.2.3 查看完成的任务


一、Flink简介

        Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink 提供了数据分发以及并行化计算的能力,并且可以部署在各种集群环境中,如Hadoop YARN、Kubernetes或独立集群。

2.1 Flink 架构

        Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。

        JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager:负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。
  • Dispatcher:提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
  • JobMaster:负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

        始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。

       TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。

        必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。一个 task slot 中可以执行多个算子。

2.2 Flink 应用程序 运行模式

        当Flink应用程序编写好后,可以通过会话模式、单作业模式和应用模式等三种方式运行:

  • 会话模式(Session Mode)

        会话模式需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就都已经确定,所以所有提交的作业会竞争集群中的资源。

  • 单作业模式(Per-Job Mode)

        会话模式因为资源共享会导致很多问题,所以为了更好地隔离资源,可以为每个提交的作业启动一个集群,作业完成后,集群就会关闭,释放资源,这就是所谓的单作业(Per-Job)模式。单作业模式运行稳定,是实际应用的首选模式。
        需要注意的是,Flink本身无法直接这样运行,所以单作业模式一般需要借助一些资源管理框架来启动集群,比如YARN、Kubernetes(K8s)。

  • 应用模式(Application Mode)

        会话模式和单作业模式应用代码都是在客户端上执行,然后由客户端提交给JobManager的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的资源消耗。
        所以解决办法就是,我们不要客户端了,直接把应用提交到JobManger上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个JobManager,也就是创建一个集群。这个JobManager只为执行这一个应用而存在,执行结束之后JobManager也就关闭了,这就是所谓的应用模式。

        应用程序各种运行模式,需要的Flink集群不一样,本地集群和Standalone集群适合会话模式;YARN模式适合单作业模式和应用模式;K8S模式不熟悉,暂时不介绍。

应用程序运行模式会话模式
(Session Mode)
单作业模式
(Per-Job Mode)
应用模式
(Application Mode)
集群部署模式
本地模式×
Standalone模式×
YARN模式
K8S模式

二、Flink 集群 部署

2.1 本地集群模式

2.1.1  安装JDK

2.1.3 启动集群

$ ./bin/start-cluster.sh

2.1.4 停止集群

$ ./bin/stop-cluster.sh

2.2 Standalone 模式

2.2.0 集群规划

flink01
192.168.179.151
flink02
192.168.179.152
flink01
192.168.179.153
JobManager
TaskManagerTaskManagerTaskManager

2.2.1 安装JDK

        在所有部署Flink的服务器上安装jkd,要求jdk17+,jdk具体安装可参考搭建环境02:安装前准备(配置CentOS7) 中的安装jdk部分。

2.2.2 设置免密登录

        在所有部署Flink的服务器上设置免密登录,具体操作可参考搭建环境02:安装前准备(配置CentOS7) 中的设置免密登录部分。

2.2.3 修改配置文件

  • config.yaml 文件

vi conf/config.yaml

jobmanager:
  bind-host: 0.0.0.0
  rpc:
    address: 192.168.179.151 #修改成本节点IP

taskmanager:
  bind-host: 0.0.0.0
  host: 192.168.179.151  #修改成本节点IP

rest:
  address: 192.168.179.151  #修改成本节点IP
  bind-address: 0.0.0.0
  port: 8081

  • masters文件

vi conf/masters

192.168.179.151:8081

  • workers文件

vi conf/workers

192.168.179.151

192.168.179.152

192.168.179.153

2.2.4 启动集群

$ ./bin/start-cluster.sh

2.2.5 关闭集群

./bin/stop-cluster.sh

2.2.6 Standalone 高可用服务

        具体可参考官方文档。

2.3 YARN 模式

        比较复杂,另开一篇专门介绍。

2.4 K8S 模式

        不熟悉,暂时不做介绍。

三、Flink 应用 开发

        Flink 程序看起来像一个转换 DataStream 的常规程序。每个程序由相同的基本部分组成:

  1. 获取一个执行环境(execution environment);
  2. 加载/创建初始数据;
  3. 指定数据相关的转换;
  4. 指定计算结果的存储位置;
  5. 触发程序执行。

3.1 编写Flink 应用程序

3.1.1 maven引入jar

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>1.20.0</version>
</dependency>

3.1.2 编写代码

package com.yichenkeji.demo.flink;import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;public class Demo {public static void main(String[] args) throws Exception {//1.获取一个执行环境(execution environment)StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//2.加载/创建初始数据DataStreamSource<Integer> source = env.fromCollection(Arrays.asList(1,2,3,4,5,6,7,8,9,10));//3.指定数据相关的转换:乘以2SingleOutputStreamOperator<Integer> map = source.map(x -> x * 2);//4.指定计算结果的存储位置:直接输出到控制台map.print();//5.触发执行env.execute();}
}

3.1.3 打包程序

<?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"><modelVersion>4.0.0</modelVersion><groupId>com.yichenkeji.demo.flink</groupId><artifactId>yichen-demo-flink</artifactId><version>1.0</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>1.20.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>${flink.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.1.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><artifactSet><excludes><exclude>com.google.code.findbugs:jsr305</exclude></excludes></artifactSet><filters><filter><!-- Do not copy the signatures in the META-INF folder.Otherwise, this might cause SecurityExceptions when using the JAR. --><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><!-- Replace this with the main class of your job --><mainClass>com.yichenkeji.demo.flink.Demo</mainClass></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/></transformers></configuration></execution></executions></plugin></plugins></build>
</project>

3.2 运行 Flink 应用程序

3.2.1 命令行运行

]$ ./bin/flink run  /data/flink/demo/yichen-demo-flink-1.0.jar

3.2.2 WEB管理端运行

3.2.3 查看完成的任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RDMA】RDMA read和write编程实例(verbs API)

WRITE|READ编程&#xff08;RDMA read and write with IB verbs&#xff09; &#xff08;本文讲解的示例代码在&#xff1a;RDMA read and write with IB verbs | The Geek in the Corner&#xff09; 将 RDMA 与verbs一起使用非常简单&#xff1a;首先注册内存块&#xff0c…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…

Git 详解

Git 详解 Git 是一个分布式版本控制系统&#xff0c;用于高效地管理项目代码的版本历史。它是目前最流行的版本控制工具之一&#xff0c;广泛应用于软件开发领域。Git 的分布式架构允许开发者在本地进行代码的版本管理&#xff0c;并与远程仓库同步&#xff0c;实现团队协作。…

JMS和消息中间件:Kafka/RocketMQ

文章目录 消息传递模型使用JMS还是KafkaKafka与RocketMQ的优缺点Kafka与RocketMQ的使用场景Kafka与RocketMQ的选型指南 TPM 项目中&#xff0c; iflow之间使用了JMS&#xff0c;后端项目与数据库通信使用Kafka MQ和JMS的区别&#xff1a; JMS是 java 用来处理消息的一个API规范…

深入浅出:Go语言中map的工作原理详解

目录 map 的简介哈希表的基础概念Go 中 map 的内部结构创建和使用 mapmap 的扩容机制处理冲突的方法map 的并发安全map 性能优化策略实际应用案例常见问题解答参考资料 深入浅出&#xff1a;Go 语言中 map 的工作原理与性能优化 map 的简介 在 Go 语言中&#xff0c;map 是…

泷羽sec专题课笔记-- Linux作业--开机自启动方法以及破解

本笔记为 泷羽sec 《红队全栈课程》学习笔记&#xff0c;课程请可自行前往B站学习&#xff0c;课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等&#xff0c;请使用该课程、本笔记以及课程和笔记中提及工具的读者&#xff0c;遵守网络安全相关法律法规&#xff0c;切勿…

Linux内核早期打印机制与RS485通信技术

往期内容 本专栏往期内容&#xff1a;Uart子系统 UART串口硬件介绍深入理解TTY体系&#xff1a;设备节点与驱动程序框架详解Linux串口应用编程&#xff1a;从UART到GPS模块及字符设备驱动 解UART 子系统&#xff1a;Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

如何利用内链策略提升网站的整体权重?

内链是谷歌SEO中常常被低估的部分&#xff0c;实际上&#xff0c;合理的内链策略不仅能帮助提升页面间的关联性&#xff0c;还可以增强网站的整体权重。通过正确的内链布局&#xff0c;用户可以更流畅地浏览你的网站&#xff0c;谷歌爬虫也能更快地抓取到更多页面&#xff0c;有…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据&#xff0c;每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备&#xff0c;将结果存入Redis 中&#xff0c; key 值为 “warning_last3min_everymin_out” &#xff0c; value 值为 “ 窗口结束时间&#xff0c;设备id” &am…

力扣第90题:带重复元素的子集

力扣第90题&#xff1a;带重复元素的子集 问题描述 给定一个整数数组nums&#xff0c;该数组可能包含重复元素。返回该数组所有可能的子集&#xff08;幂集&#xff09;&#xff0c;并且子集中的元素需要去重。返回的子集中的每个元素应按照非递减顺序排列。 例如&#xff0…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装

封装就是将 一个h264&#xff0c;和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件&#xff0c;也就是说&#xff0c;我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream&#xff0c;然后 将这两路的 avstream 合并成一…

LVS默认的工作模式支持哪些负载均衡算法?

LVS默认的工作模式支持哪些负载均衡算法? LVS&#xff08;Linux Virtual Server&#xff09;默认支持多种负载均衡算法&#xff0c;这些算法在不同的场景下具有各自的优势。以下是 LVS 默认支持的负载均衡算法及其特点&#xff1a; 1. 轮询调度&#xff08;Round Robin Sched…

汇编语言学习-二

好吧&#xff0c;已经隔了两天&#xff0c;下完班看了两天&#xff0c;在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统&#xff1b; 这个第二天应该是称为第二章更为合适&#xff0c;目前第二章已经看完&#xff0c;基本的命令也是敲了敲&#xff1b; 下面就进行一…

等差数列末项计算

等差数列末项计算 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给出一个等差数列的前两项a1&#xff0c;a2&#xff0c;求第n项是多少。 输入 一行&#xff0c;包含三个整数a1&#xff0c;a2&#x…

【笔记2-1】ESP32:基于vscode的espidf插件的开发环境搭建

主要参考b站宸芯IOT老师的视频&#xff0c;记录自己的笔记&#xff0c;老师讲的主要是linux环境&#xff0c;但配置过程实在太多问题&#xff0c;就直接用windows环境了&#xff0c;老师也有讲一些windows的操作&#xff0c;只要代码会写&#xff0c;操作都还好&#xff0c;开发…

Redis设计与实现第17章 -- 集群 总结2(执行命令 重新分片)

17.3 在集群中执行命令 接收命令的节点会计算出命令要处理的数据库键属于哪个槽&#xff0c;并检查这个槽是否指派给了自己&#xff1a; 如果是的话&#xff0c;直接执行这个命令 否则&#xff0c;节点向客户端返回一个MOVED错误&#xff0c;指引客户端转向redirect至正确的节…

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

如何在GitHub上Clone项目:一步步指南

GitHub作为全球最大的代码托管平台&#xff0c;汇聚了无数开发者的智慧结晶。对于初学者和资深开发者来说&#xff0c;学会如何从GitHub上克隆&#xff08;Clone&#xff09;项目是一项基本且重要的技能。本文将详细介绍如何在GitHub上克隆项目的步骤&#xff0c;帮助你轻松将他…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…