flink 梳理

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

?Flink基于zookeeper/yarn(基于zookeeper),zookeeper挂掉如何处理
?slot底层是什么
?什么时候flink的流批进行统一处理
?Flink的datastream与spark的dataframe有什么区别
?从Kafka向Flink输入数据,过程中kafka宕机,如何保证数据不丢失,不重复读取
?ack机制与checkpoint区别
?jvm堆内存一般放什么

flink:
	一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算
优势:
	1高性能,高吞吐,低延迟;(如何实现?)
	2支持event Time(如何实现?)
	3支持有状态计算(如何实现?)
	4支持灵活的window(Time/Count/Session/Data-driven),灵活的触发条件(如何实现?)
	5基于轻量级分布式快照CheckPoint,支持容错,将拆解成的小计算过程分布到节点上处理,checkpoint将执行状态中状态信息进行持久化存储,确保处理数据在过程中的一致性(与ack机制的区别)
	6基于JVM实现独立的内存管理,将所有数据对象转化城二进制在内存中存储,降低存储大小,对内存空间充分利用
	7savePoint将任务执行的快照存储,任务重启时可直接从save点恢复
什么是状态?
	计算过程中产生的中间结果,每次计算新结果是基于中间结果,不需进行全量计算,减少计算过程中间损耗和硬件存储
主要应用:
	实时智能推荐、复杂事件处理(工业领域)、实时欺诈检测、实时数仓、ETL类型、流数据分析类型、实时报班类型等业务场景
流处理案例:
	main
	val env=StreamExecutionEnvironment.getExecutionEnvironment
	import org.apache.flink.streaming.api.scala._
	val stream=env.sockTextStream("node1",8888)
	stream.flatmap(_.split(","))
	.map((_,1))
	.keyby(0)
	.sum(1)
	.print
	env.execute("wordcount")
集群基本架构
	Master-Server架构原则(JobManger TaskManager)
	采用多线程方式,比MR的多JVM进程方式,提高CPU效率,在多个任务和Task之间通过TaskSlot共享系统资源,每个TaskManager管理多个TaSlot资源池对资源进行管理
	Slot与并行度区别:一个是实际拥有能力,一个是实际使用的并发能力
集群运行模式
	Standalone:不依赖其他平台,独立部署
	on yarn:
		(改yarn尝试次数及关闭内存限制;下载Pre-bundied Hadoop 2.7.5连接jar包)
		1session-cluster,yarn中初始化一个集群
		2Pre-job-cluster,每次提交job,创建一个新的flink集群
Flink集群的HA:
	依赖zookeeper和hdfs,分配多台jobmanager(写在masters文件中)
	配置flink-shaded-hadoop-2-uber-2.7.5-10.0.jar依赖包
Flink On Yarn HA:
	部署:
		借助zookeeper完成,
		配置jobmanager元数据存储路径到hdfs(flink-conf.yaml  high-availabilty.storageDir:hdfs://mycluster/flink/yarnha/)
		配置zookeeper集群节点
	实现原理(运行逻辑):
		1.启动Flink Yarn client 会话,申请资源,检查资源是否可用,上传jar包、conf到hdfs
		2.client向Yarn Manager 请求 资源、ApplicationMaster、Container ,同一容器有 ApplicationMaster 和JobManager
		3.Yarn Manager 分配ApplicationMaster 、JobManager
		4.JobManager 分配 taskerManager
		5.taskerManager 从hdfs下载 jar和conf(配置环境)
	提交任务模式
		1.session-cluster
			YARN中提前初始化一个Flink集群(称为Flink yarn-session),开辟指定的资源。Flink集群会常驻在YARN集群中,除非手工停止(yarn application -kill  id)
		2.per-Job 
			每次提交Flink任务都会创建一个新的Flink集群,每个Flink任务之间相互独立
任务并行度设置的优先顺序:
	算子层面(Operator level)>执行环境..(Execution Environment..>客户端..(Client..)>系统..(System..)
Flink常用API
	SQL/Table API(dynamic tables)
	DataStream Api(Streams,windows)
	ProcessFunction(events,state,time)
DataStream
	Environment
	DataSource
		--HDFS:
			env.readTextFile("hdfs://node2:8020/xx")
		--Sqe:
			env.fromCollection(Array(
				new Tuple(,)
				))
		--Element:
			env.fromElement(('A',1),('B',1))
		--Kafka:
			①读取Kafka String
			val pops=new Properties()
			pops.setProperty("bootstrap","nodex:9092")
			pops.setProperty("key.deserializer",classOf[StringDeserializer].getName)
			...
			env.addSource(new FlinkKafkaConsumer[String]("name",new SimpleStringSchema(),pops)
			②读取Kafka KV类型
			...
			val xx=new FlinkKafkaConsumer[(String,Int)])(
							"name",
							new KafkaDeserializationSchema[(Int, String)] {
   
   },
							 props)
							)
			env.addSource(flinkKafkaConsumer.setStartFromLatest())
		--自定义Source:
			实现SourceFunction
			实现ParallelSourceFunction 继承RichParallelSourceFunction 
	Transformation
		--Map(DataStream->D)
		--FlatMap(D->D)
		--Filter(D->D)
		--KeyBy(D->KeyStream)
		--Reduce(K->D)
			val reduceStream = keyedStream.reduce {
   
    (t1, t2) =>
				(t1._1, t1._2 + t2._2)}
		--Aggregations(K->D)
			将reduce函数进行封装,sum min max minby maxby...
		--Union(D->D)
			val unionStream = dataStream1.union(dataStream_02)
		--Connect CoMap CoFlatMap(D->connected stream ->D)
			**Union两流格式必须一样
			**Connect两流或者多流格式可以不一样,connectStream后,需Comap调整为一样的格式
			val connectstream=datastream1.connect(datastream2)
			connectstream.map(t1=>(t1._1,t1._2),t2=>(t2,0))
		--Split select(D->Split stream->D)
			val splitStream=datastream.split(t=>if (t._2%2==0) seq("even")else seq("odd"))
			val eventstream=splitstream.select("even")
			val allstream=splitstream.select("even","odd")
	Sink
		--HDFS
			设置滚动规则 DefaultRollingPolicy.create()
					( *   withInactivityInterval :桶不活跃的间隔时长,如果一个桶最近一段时间都没有写入,那么这个桶被认为是不活跃的,sink 默认会每分钟检查不活跃的桶、关闭那些超过一分钟没有数据写入的桶。
      					*   withMaxPartSize : 设置文件多大后生成新的文件,默认128M。
 					     *   withRolloverInterval :每隔多长时间生成一个新的文件,默认1分钟)
			StreamingFileSink.forRowFormat[StationLog](
    				  new Path("hdfs://mycluster/flinkresult"),
      				new SimpleStringEncoder[StationLog]("UTF-8"))
     				 .withBucketCheckInterval(1000)//检查分桶的间隔时间,默认每分钟检查桶(目录),是否生成新的桶目录,默认是每小时生成一个桶。
     				 .withRollingPolicy(policy) )
		--Redis
			val confg=new FlinkJedisPoolConfig.builder().setDatabase(1).setPort(6379).build()
			result.addSink(new RedisSink[(String, Int)](config,new RedisMapper[(String, Int)] {
   
   
				override def getCommandDescription = new RedisCommandDescription(RedisCommand.HSET,"t_wc") //t_wc是表名
				override def getKeyFromData(data: (String, Int)) = {
   
   
					data._1 //单词
					}
				override def getValueFromData(data: (String, Int)) = {
   
   
					data._2+"" //单词出现的次数
					}
				}))
		--Kafka
			val props = new Properties()
				props.setProperty("bootstrap.servers","hadoop101:9092,
Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uber Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uberFlink 1.11开始,flink-shaded-hadoop-2-uberFlink项目不再正式支持使用发行版。 如果想建立flink-shaded对供应商特定的Hadoop版本,您必须首先描述配置特定供应商的Maven仓库在本地Maven安装在这里。 运行以下命令以flink-shaded针对所需的Hadoop版本(例如对于version 2.6.5-custom)进行构建和安装: mvn c 阅读详情

相关推荐

Flink 内存梳理与遇到的问题修复

flink

努力工作学习的程序员 1416

flink-shaded-hadoop-2-uber-2.7.5-10.0.jar

flink整合Hadoop,注意:以 Yarn 模式部署 Flink 任务时,要求 Flink 是有 Hadoop 支持的版本,Hadoop 环境需要保证版本在 2.2 以上,并且集群中安装有 HDFS 服务。

Flink面试题梳理

公众号:小晨说数据 微信:weixin605405145 基础 1.Flink计算单位是什么? 2.Flink时间类型有那些,他们有什么区别? 3.Flink窗口类型有哪些,你们目前用的什么窗口? 4.Flink的状态你们有没有用过,用的什么类型的状态? 5.Flink如何处理延迟数据? 6.Flink中managed state和raw state区别? 7.Flink的keystate有什...

huzechen的博客 1万+

flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip

flink-shaded-hadoop-2-uber-2.7.5-10.0

Flink集群搭建

Flink-1.11.2集群搭建,StandAlone模式和On Yarn模式

holiday0520的博客 1171

[1133]flink问题集锦

文章目录 问题1: Could not get job jar and dependencies from JAR file: JAR file does not exist: -yn 原因:flink1.8版本之后已弃用该参数,ResourceManager将自动启动所需的尽可能多的容器,以满足作业请求的并行性。解决方法:去掉即可 问题2: java.lang.IllegalStateException: No Executor found. Please make sure to export t

周小董 6648

Flink知识梳理

for_yayun的博客 355

flink 知识点梳理

flink 基础知识梳理

a123147abc的博客 636

Flink、Kafka梳理

flink和kafka梳理

xiaochen_bigdata的博客 8055

Flink概念梳理

Flink分层架构 StateFul Stream Processing,最底层的实现,主要方法是processSunction,编程灵活度高,但是开发比较复杂。

九师兄 1606

flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar

# 解压命令 tar -zxvf flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar.tar.gz # 介绍 用于CDH部署 Flink所依赖的jar

flink-shaded-hadoop-2-uber-2.7.4-11.0.jar

hadoop版本2.7.4,flink 版本1.11,官网没有编译好的flink-shaded-hadoop-2-uber-2.7.4-11.0.jar,自己编译成功的jar,可以直接放到flink下lib目录下即可

flink-shaded-hadoop-2-uber-2.7.5-10.0.zip

flink-shaded-hadoop-2-uber-2.7.5-10.0

Flink DataStream 算子梳理

..前言1.1. Flink算子分类1.2. 数据类型转换关系二 .算子清单2.1. Map2.2. FlatMap2.3. Filter2.4. KeyBy2.5. Reduce2.6. Fold [废弃]2.7. Aggregation2.8. Window2.9. WindowAll2.10. Window Apply2.11. Window reduce2.12. Window Fold [废弃]2.13. Window Aggregation2.14. Window Join2.15.Uni

张伯毅的专栏 1352

Flink heartbeat逻辑梳理

背景 最近看了一个flink相关的issue,主要是在heartbeat来带上TaskManager的status作为payload,主要是为了解决TaskExecutor#updateTaskExecutionState会因为暂时的网络异常原因导致将TM的状态通知到JM失败的问题,如果是terminal state的通知失败会导致JM无法感知TM的结束。具体讨论细节请看issue issue地址: https://issues.apache.org/jira/browse/FLINK-17075 flin

tjq980303的博客 615

flink基础概念梳理

监控 Dashboard 时,先看 JM 的 Checkpoint 和异常,再看 TM 的背压和内存,基本能定位 90% 的问题。

qq_30600959的博客 75

Flink基础知识梳理

Flink入门基础编程框架wordcount批处理版本wordcount流处理版本Flink基本APIExecutionEnvironmentLazy EvaluationSpecifying KeysSpecifying Transformation Functions使用lambda function自定义FunctionRich FunctionFunction体系结构 基础编程框架 不管是...

呼呼的小窝 701
上一篇: kafka 梳理
下一篇: spark 梳理
dchdd
博客等级 码龄10年 18粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值