简要flink

1.flink运行模式
基于流式处理模型,支持批流计算,SLA(服务等级协议)不通
2.10大特性:

有状态计算(exactly-once)
\带有事件时间语义的流式处理和窗口处理
\高度灵活的窗口方便、快速的做出失败重试操作
\通过轻量的state snapshots实现轻量的容错处理
\高吞吐、低延迟、高性能的流式处理
\支持保存点(savepoint)机制
\支持大规模集群模式
\具有背压功能
\支持迭代计算
\JVM内部实现了自己的内存管理
3.

2大API:流式处理DataStream API、批处理DataSet API
4.

库:流式(CEP/Table)、批处理(ML/Gelly)
5.

任务提交3角色:client、JobManager(HA、任务拆分)、TaskManager(实现任务)
通信:client与JobManager、JM与TM使用akka框架(actor system),前者发送指令,后置发送状态和统计
client与JobManager数据交互:netty框架
TM之间数据传输:网络
standalone JobManager HA :zk
6. Flink on yarn两种该模式:

单个yarn session:先启动集群再提交作业,接着向yarn申请资源,资源不足下一作业等待。
多个yarn session:一个任务对应一个Job,向yarn申请资源,不影响其他job

7.flink支持的各种数据源
socket/文件数据源(hdfs)/集合/自定义
8.datastream3类算子:

transformation/partition(重新分区、解决数据倾斜)/sink
9. 窗口类型:
无限数据切分为有限数据,时间窗口、计数窗口countWindow、会话窗口和自定义窗口
滚动窗口、滑动窗口:timeWindow、countWindow
窗口数值聚合统计分2中:增量聚合统计、全量聚合统计
10.三种时间类型:
eventtime(指定watermark)\IngestionTime(获取记录的数据源系统时间)\ProcessingTime(执行操作的系统时间)
性能:ProcessingTime> IngestionTime> EventTime
延迟:ProcessingTime< IngestionTime< EventTime
确定性:EventTime> IngestionTime> ProcessingTime
11. watermark:
解决乱序与数据延迟,通常结合窗口来实现
生成watermark两大时机:收到数据立即生成、收到数据简单处理后生成
生成watermark两方式:Periodic Watermark(定义一个允许乱序的最大时间),
12.触发Flink窗口调用2条件:
watermark时间>=eventtime,  窗口内有数据
13.从容错和消息处理语义exactly-once,引入:state(一个具体的task/operator状态、Jvm堆内存即TM内存)、checkpoint(将state持久化,所有task/operator状态即JM内存)
14.2种类型state:keyed state(基于keyedstream的状态)、operator state,state存在的2种方式:raw state(用户自行管理,用户自定义operator时)、managed state(Flink框架管理,datastream上推荐)
15.3种statebackend:
MemoryStateBackend(基于内存存储,jobmanager)、
FsStateBackend(基于文件系统存储,filesystem)、
RocksDBStateBackend(基于数据库存储,rocksdb)
16.checkpoint,默认只保留最近生成的1个,支持保留多个CP(state.checkpoints.num-retained:20)
savepoint:程序升级后继续从升级前的那个点开始执行计算,保证数据不中断。
flink消费kafka,并非完全通过跟踪kafka消费组的offset保证exactly-once,而是通过Flink内部跟踪offset、设置checkpoint,对于kafka的partition,Flink会启动对应的并行度处理。
17.dataset内置数据源:文件、集合、通用
18.dataset常用算子:
transformation/partition(重新分区,rebalance/hashPartition/rangePartition/custom)
dataset sink算子
19.Dataset文件系统连接器:hdfs(hdfs://)、S3(s3://)、MapR(maprfs://)、Alluxio(alluxio://)
20.广播变量(broadcast):datastream(广播到所有分区,可能会重复处理)、dataset(每台服务器一个只读的缓存变量,不是传送变量副本给Task)
累加器(accumulator)
分布式缓存(distributedcache,在并行函数中很方便的读取本地文件):env注册命名缓存文件,flink自动复制至所有TM的本地文件系统
21.两个关系型API:Table、SQL(统一批流处理)
TableSink支持:多种文件格式(csv/parquet/avro)、存储系统(jdbc/hbase/es)、消息传递系统(kafka、rabbitmq)
批量:batchtablesink,流:appendstreamtablesink/retractstreamtablesink/upsertstreamtablesink
将表转换为datastream两种模式:appendmode(只查询、添加)/retracemode
实现流的连接:cogroup(联合分组,得到CoGroupedStream,转换后为WithWindow,方法apply是重点)
/interval join(解决乱序和延时,跨窗口情况,基于keyedstream实现)
22.两类SQL join:
global join、Time-windowed join(支持EventTime/ProcessingTime、多种Join)
23.CEP(复杂事件处理):
pattern(模式,处理事件的规则):个体模式(单个事件、量词、迭代条件、简单条件、组合条件、停止条件)
/组合模式(模式序列,多个个体模式、连续条件[严格连续性、宽松连续性、非确定性宽松连续性])
/模式组(将模式序列作为条件嵌套在个体模式里。匹配跳过策略:NO_SKIP、SKIP_PAST_LAST_EVENT、SKIP_TO_FIRST、SKIP_TO_LAST)
24.监控指标:任务监控(是否出错失败)、监控系统指标(CPU、内存等)
自定义监控指标:继承RichFunction,调用getRuntimeContext().getMetricGroup(),实现自定义指标
四种监控指标:Counter\Gauge\Histogram\Meter(吞吐)
25.反压机制:对数据处理预警(生产是否快于处理),及时采取策略。
反压线程采样:通过线程循环进行数据抽样,监控数据处理速度 Thread.getStackTrace()
反压线程配置:refresh-interval\num-samples\delay-between-samples
checkpoint监控:OverView、History、Summary、Configuration
checkpoint调优:同步进行效率低下,checkpoint排队则消耗系统资源
\衡量checkpoint速度:checkpoint每次开始时间,是否存在空闲、数据缓存量
\相邻checkpoint间隔时间设置:强行在checkpoint之间塞入空闲时间
\checkp资源设置:先在Task上做checkpoint,再在外部存储持久化,为每个task设置更多的并行度
\checkpoint的Task本地性恢复:加快,每个Task同时将checkpoint数据写到本地磁盘和远程分布式存储
\异步checkpoint设置:大幅提升checkpoint性能,但可能覆盖。两个条件:托管状态、支持异步
\checkpoint数据压缩
26.Flink将堆分为三个区域:网络缓冲区(taskmanager启动时分配,2048*32)、内存管理器缓冲区(缓冲记录、序列化存储)、剩余堆(用户代码、TM数据结构)
内存段管理:将内存表示为内存段集合,Flink在某处存储数据时将其序列化为若干内存段,序列化格式由Flink定义
内存段和字节缓冲区:不使用java.nio.ByteBuffer,原因:字节数组上使用sun.misc.unsafe()\绝对get|put方法,线程安全
JVM默认值:-XX:NewRatio=2,即OldGen两倍于NewGen。运行任务,NewGen短期对象执行垃圾回收,很少终身代垃圾回收
内存分配仅定义内存管理器和剩余堆,相对值taskmanager.memory.fraction指定剩余堆多少作为托管页面,绝对值taskmanager.memory.size在TM启动时分配托管页
堆外内存:零拷贝溢出到磁盘/ssd,并网络发送零拷贝。增加最大直接内存量-XX:MaxDirectMemorySize

猜你喜欢

转载自blog.csdn.net/victory0508/article/details/122043446
今日推荐