当前位置: 首页 > news >正文

Flink 大数据 学习详情

参考视频:

         尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili

核心目标:

        数据流上有状态计算

        具体说明: Apache Flink是一个 框架分布式处理引擎,用于对 无界(eg:kafka)有界(eg:文本) 数据流进行有状态计算

        有状态: 存储中间的结果或者计算结果,保存在flink内部(内存/RockSDB),定期存储到磁盘

        状态在内存中: 速度快,但可靠性差

        状态在分布式系统中:速度慢,但可靠性高

特点:

        高吞吐和低延迟:

                每秒处理数百万个事件,毫秒级延迟

        结果的准确性:

                Flink提供了事件时间(event-time) 和处理时间(processing-time)语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果

精确一次(exactly-once)的状态一致性保证

可以连接到最常用的存储系统:

        Kafka,Hive,JDBC,HDFS,Redis等

高可用:

        本身高可用的设置,加上与 K8s,YARN和Mesos的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink能做到以极少的停机时间7*24全天候运行

Flink和SparkStreaming比较

        本质:spark streaming是批处理(RDD模型),flink是流处理

FlinkStreaming
计算模型流计算微批处理
时间语义事件时间,处理时间处理时间
窗口多,灵活少,不灵活(窗口必须是批次的整数倍)
状态
流式sql

ps:

Flink提供了三种时间语义,以满足不同计算场景的需求:处理时间,事件时间和注入时间。

  • 处理时间(Processing Time):一种直观的时间语义,表示数据进入算子并开始处理的实际时间点。
  • 事件时间(Event Time):表示事件实际发生的时间,通常在消息的时间戳字段中找到。由于可能会有数据乱序的问题,但它能保证精确度高的计算场景。
  • 注入时间(Ingestion Time):介于处理时间和事件时间之间的折中选择,代表数据进入Flink处理系统的时间。

Flink分层API

最高层 SQL(最好用)
声明式领域专用语言Table API(像表一样处理数据,还不够好用)
核心APIsDataStream(数据流,流计算,高版本一般都用流计算) / DataSet API(数据集,批处理)
底层APIs(处理函数)有状态流处理

有状态流处理:

        通过底层API(处理函数),对最原始数据加工处理。底层API与DataStream API相集成,可以处理复杂的计算

DataStream API(流处理) 和 DataSet API(批处理)

         封装了底层处理函数,提供了通用的模块,比如转换(transformations,包括map,flatmap等) ,连接(join),聚合(aggregations),窗口(windows)操作等。

        注意:Flink1.12以后,DataStream API已经实现真正的批流一体,所以DataSet API已经过时

Table API

        以表未中心的声明式编程,其中表可能会动态变化。 Table API遵循关系模型:表有二维数据结构,类似于关系数据库中的表;同时API提供可比较的操作,例如:select,project,group-by,aggregate等。 我们可以在表与 DataStream / DataSet之间无缝切换,以允许程序将Table API 与DataStream / DataSet 混合使用

SQL

        这一层在语法与表达能力上与Table API类似,但是以SQL查询表达式的形式表现程序。

        SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行

Flink快速上手

		<dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>1.17.0</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients_2.10</artifactId><version>1.17.0</version></dependency>

看视频吧,不同的引包写法有差异

Flink集群部署

组件流程介绍    

flink提交作业和执行任务,需要几个关键组件:

        客户端(client):代码由客户端获取并作转换,之后提交给 jobManager

        JobManager:就是flink集群里的“管事人”,对作业进行中央调度管理;而它获取到要执行的作业后,会进一步处理转换,然后分发任务给众多的TaskManager

        TaskManager:就是真正“干活的人”,数据的处理操作都是它们来做的

注意:

       

       流程:

                 Flink Client -> 一个JobManager(协调调度中心) -> N个TaskManager(工作节点)

                多个备用 JobManager

Flink是一个非常灵活的处理框架,它支持多种不同的部署场景,还可以和不同的资源管理平台方便地集成

集群搭建:

集群规划:
节点服务器hadoop102hadoop103hadoop104
角色JobManager,TaskManagerTaskManagerTaskManager
下载解压安装包

        eg:flink-1.17.0-bin-scala_2.12.tgz

vim flink-conf.yaml

jobmanager.rpc.address: hadoop102 (rpc连接的地址)
jobmanager.bind-host: 0.0.0.0 (任何机器都可以访问)
rest.address: hadoop102 (Rest Api访问地址)
rest.bind-address: 0.0.0.0taskmanager.bind-host: 0.0.0.0
taskmanager.host: hadoop102 (不同服务器配置相应的ip)还可更改
jobmanager.rpc.port:6123
jobmanager.memory.process.size:48g
taskmanager.memory.process.size:8g
taskmanager.numberOfTaskSlots: 24
parellelism.default: 8 # 并行数量
high-availability: zookeeper
high-availability.storageDir: ftp://sjsy:chianoly@139.6.0.224:6600/flink/ha/
high-availability.zookeeper.quorum: zk01:2181,zk02:2181,zk03:2181
jobmanager.execution.failover-strategy: region
#历史服务器
jobmanager.archive.fs.dir: ftp://sjsy:chianoly@139.6.0.224:6600/flink/completed-jobs/
historyserver.web.address: 0.0.0.0
historyserver.web.port: 8082
historyserver.archive.fs.dir: ftp://sjsy:chianoly@139.6.0.224:6600/flink/completed-jobs/
heartbeat.timeout: 180000
akka.ask.timeout: 60s
web.timeout: 1000000
state.checkpoints.num-retained: 3

vim workers

hadoop102
hadoop103
hadoop104

vim masters(jobmanager)

hadoop102:8081
//可以多个
hadoop105:8081
hadoop106:8081
...

webUI访问:

http://hadoop:8081/

参考文档:

【大数据】Flink 架构(三):事件时间处理-CSDN博客

Flink架构、原理与部署测试_未来链flink-CSDN博客

http://www.lryc.cn/news/312583.html

相关文章:

  • [项目设计] 从零实现的高并发内存池(四)
  • 02.URL的基本知识和使用
  • 人工智能指数报告2023
  • Android如何对应用进行系统签名
  • 【系统安全加固】Centos 设置禁用密码并打开密钥登录
  • 关于我在项目中封装的一些自定义指令
  • react经验11:访问循环渲染的子组件内容
  • Java开发工程师面试题(业务功能)
  • BUUCTF-Misc-百里挑一
  • 【力扣刷题练习】42. 接雨水
  • 鸿蒙实战开发:数据交互【RPC连接】
  • QLC SSD:LDPC纠错算法的优化方案
  • 【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?
  • ChatGPT高效提问——说明提示技巧
  • 从零学算法41
  • FPGA高端项目:FPGA基于GS2971的SDI视频接收+OSD动态字符叠加,提供1套工程源码和技术支持
  • UML-类图详解
  • Python 快速获取PDF文件的页数
  • uniapp开发小程序使用x-www-form-urlencoded; charset=UTF-8 编码格式请求案例
  • 酷开科技服务升级,酷开系统给消费者更好的使用体验!
  • 【leetcode热题】单词拆分
  • 【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习
  • 读书·基于RISC-V和FPGA的嵌入式系统设计·第3章
  • 本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
  • MacOS安装反编译工具JD-GUI 版本需要1.8+
  • 计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现
  • java实现pdf转word
  • 【操作系统概念】 第4章:线程
  • STM32/GD32——I2C通信协议
  • Apache Paimon 使用之Creating Catalogs