flink是什么
flink是一个框架和分布式处理引擎,对于有界流和无界流进行有状态计算
flink的几种模式
独立集群模式:flink可以不依赖于hadoop集群 flink on yarn:依赖于hadoop集群 yarn-session -jm 1024 -tm 1096 (jm jobmanagermemory tm taskmanagermemory) flink run -c 先在yarn上启动一个jobmanager 所有job共享一个jobmanager flink run -m yarn-cluster per job-cluster 直接提交任务到yarn集群上,每一个job独享一个jobmanager
flink的几种提交模式
web页面提交 flink run -c rpc远程提交( 创建flink环境 StreamExecutionEnvironment.createRemoteEnvironment("ip",PORT,"jarFile") )
kafka
-
kafka架构
producer:消息生产者 consumer:消息消费者 broker:kafka集群的server,负责处理消息读,写请求,存储消息 topic:消息队列、分类 一个topic中的数据结构要一样 queue里面有生产者消费模型
-
kafka的消息存储和生产消费模型
一个topic分成多个partition 每个partition内部有序,都有一个offset 消息不经过内存缓冲,直接写入文件(零拷贝) 根据实践策略删除,不是消费完就删除 producer写入partition可以是轮询也可以是hash
consumer自己维护消费到哪个offset 一个消息在一个组内只被消费一次
-
kafka有哪些特点
消息系统的特点:生产者消费者模型,FIFO(先进先出,一个分区的时候才能保证顺序) 高性能:单节点支持上千个客户端,百MB/s吞吐 持久性:消息直接持久化在普通磁盘上且性能好 分布式:数据副本冗余 、流量负载均衡、可扩展 很灵活:消息长时间持久化+Client维护消费状态
-
为什么kafka快
1.顺序读写 2.零拷贝技术(spark reduce端到map端拉文件也是零拷贝技术) 3.批量读写
-
kafka搭建
修改config/server/properties 1.broker.id=0每一个节点的broker.id不一样 2.zookeeper.connect = master:2181 3.log.dirs 消息存放的位置 分布式的要分发到不同的节点 kafka-server-start.sh -daemon(后台启动) 配置文件的路径
kafka生产消费
-
exactly-once
如何保证kafka结合flink的只消费一次 要实现唯一一次从三个方面来说
生产端
幂等性(保证数据只发送一次) 事务性(提交数据要成功都成功,要失败都失败) ack(保证数据不丢失)
消费端
当消费数据的算子做聚合计算的时候,虽然数据会发送两次,但是算子计算会返回到上个checkpoint时计算,只计算一次。
sink端
开启两次提交,将参数改为EXACTLY_ONCE 模式匹配到EXACTLY_ONCE 会开启事务,数据就不会重复发送 Semantic.EXACTLY_ONCE
flink四大基石
-
Checkpoint
1、jobmanager定时做checkpoint向sourcetask发送触发器 2、sourcetask给数据打上标记,同事将checkpoint存到hdfs中 3、下游算子对标记进行异步处理 4、当所有算子处理完同一个标记,就完成了一次checkpoint
-
State
ValueState、MapState、ListState、ReducingState 状态会保存计算的结果持久化到hdfs 结合Checkpoint
-
Time
事件时间 Event time:数据自带的时间,是数据真实发生的时间。 接收时间 Ingestion time:数据到达DataSource的时间 处理时间 Processing time:数据被处理的时间,处理这条数据的时间 水位线: 默认最新一条数据的事件时间 水位线的主要作用是为了防止乱序
-
Window
时间窗口 Time Window 事件时间窗口(事件滚动窗口,事件滑动窗口) 处理时间窗口(处理滚动窗口,处理滑动窗口) 会话窗口 Session Window(当多久没有数据,对前面的数据进行计算) 事件时间会话窗口 处理时间会话窗口 统计窗口 Count Window 滑动统计窗口 滚动统计窗口 窗口触发的条件 水位线大于窗口的结束时间,窗口内有数据
-