2022-09-14-Flink-53(Flink 面试题)

1. 内存模型与计算案例

假设参数默认条件下,提交DMsize内存为4G,内存分配如下:
JVM执行开销:4g0.1 = 409.6M
flink内存开销:4g - 256m - 409.6 = 3430.4m
网络内存3430.4m
0.1
托管内存:3430.4m*0.4
框架内存,堆外和堆内都是128m
task堆内内存=3430.4m - 128m -128m - 343.04m -1372.16m

flink提供了大量参数来设置对应区块的大小:


参数设置

官网不建议同时设置进程总内存和 Flink 总内存。 这可能会造成内存配置冲突,从而导致部署失败。 额外配置其他内存部分时,同样需要注意可能产生的配置冲突。所以Flink的内存配置是三选一:要么配置进程总内存、要么配置Flink总内存、要么配置堆内内存+托管内存

2. 并行度的设置

开发完成后,先进行压测,任务并行度建议给10以下,测试单个并行度的处理上限,然后根据总QPS/单并行度的处理能力 = 并行度(最好根据高峰期的QPS,并行度*1.2,富余一些资源)

source端并行度的配置:一般数据源为kafka,source的并行度设置为kafka对应的topic分区数.flink的一个并行度可以处理一至多个分区的数据,如果并行度多于kafka的分区数,那么就会造成并行度空闲,浪费资源,也可能出现数据倾斜的情况
transform端并行度的配置:keyby之前的例如map,filter可以和source保持一致,keyby之后如果并发比较大建议调整成2的整数次幂
sink端并行度的配置:sink端的数据量比较小,比如是一些监控告警的场景,并行度可以设置的小一些,如果是kafka,可以设置对应的分区数,具体情况具体分析,,要根据下游服务的抗压能力进行综合评估

3. 大状态调优

RocksDB
RocksDB是基于LSM Tree实现的,写数据都是先缓存到内存中,所以RocksDB的写请求效率是比较高的,RocksDB使用内存结合磁盘的方式来存储数据,每次获取数据时,先从内存中blockcache中查找,如果内存中没有再去次磁盘中查询,使用RocksDB时,状态大小仅受磁盘空间量的限制,性能瓶颈主要在于RocksDB对磁盘的读请求,每次读写操作都必须对数据进行反系列化和序列化,当处理性能不够时,仅需要横向扩展并行度即可提高整个job的吞吐量
开启增量检查点和本地恢复
RocksDB是目前唯一可用于支持状态流处理应用程序增量检查点的状态后端,可以修改参数开启增量检查点:

state.backend.incremental:true
new EmbeddedRocksDBStateBacken(true)

当flink任务失败时,可以基于本地的状态信息进行恢复任务,可能不需要从dfs拉取,本地恢复目前仅涵盖键控类型的状态后端(RocksDB)
调整预定义选项
blockcache和writebuffer调优

  1. 增大block缓存:整个RocksDB共享一个block cache,读取数据时内存cacke大小,该参数值越大,读取数据缓存的命中率越高
  2. 增大write buffer 和level阈值大小
  3. 增大write buffer数量
  4. 增大后台线程数和write buffer合并数
  5. 开启分区索引:对RocksDB增加了分区索引功能,复用了RocksDB的partitioned index & filter功能,简单来说就是对RocksDB的partitioned index做了多级索引,也就是将内存中的最上层常驻,下层根据需要再load回来,这样就大大降低了数据swap竞争,再线上测试中,相对内存比较小的场景下,性能提升10倍左右
4. Checkpoint

一般的需求,我们的Checkpoint时间间隔可以设置分钟级别,但是对于一些状态很大的任务每次Checkoing访问dfs比较耗时,可以设置为5-10min一次,并且调大每次Checkpoint的间隔,例如设置两次Checkpoint之间至少4/8min,同时也要结合时效性的要求和性能之间做一个平衡.如果Checkpoint语义设置配置是EXACTLY_ONCE,那么在Checkpoint过程中还会存在barrier对其的过程,可以通过Flink-UI的Checkpoint的选项卡来查看Checkpoint过程中各个阶段的耗时情况

5. 反压

Flink 中文社区 | Apache Flink 进阶教程(七):网络流控及反压剖析 (flink-learning.org.cn)

参考维表关联实战参考:Flink 中文社区 | Flink DataStream 关联维表实战
维度数据实时关联的实践(w/ Flink、Vert.x & Guava Cache)

6. 数据倾斜
  1. keyby之后的聚合
    使用locakeyby的思想:在keyby上游算子数据发送前,首先对上游算子本地数据进行聚合后,在发送到下游,使得下游接收到的数据量大大减少,从而使得keybu之后的聚合操作不再是任务的瓶颈,类似于mapreduce中combiner思想
  2. keyby之前的数据倾斜
    产生该情况大概是由于数据源的数据本身就是不均匀的,这种情况,需要使用flink强制shuffle
  3. keyby之后窗口发生数据倾斜
    二次聚合
    SQL写法参考:Flink教程-keyby 窗口数据倾斜的优化
7. job优化
  1. 算子指定UUID,默认情况下,算子是根据Jobgraph自动生成的,Jobgraph的更改可能会导致UUID改变,手动指定算子UUID,可以让Flink有效地将算子从savepoint映射到作业修改后的正确的算子上
  2. 链路延迟测量,关注数据输入,计算和输出的及时性
  3. 开启对象重用
  4. 细粒度滑动窗口优化思路:思路一,加上新增的步长数据,减去滑动的步长数据,思路二:数据分片
8. flinksql优化
  1. TTL
  2. minbatch
  3. localglobal解决数据倾斜
  4. split distinct
  5. 多维distinct使用fliter
9. 常见故障配置
  1. 非法配置异常
  2. java堆内存异常
  3. 直接缓冲存储器异常
  4. 元空间异常
  5. 网络缓冲区数量不足
  6. 超出容器内存异常
  7. checkpoint失败
  8. checkpoint慢
  9. kafka动态发现分区
  10. 水位线不更新
  11. 依赖冲突
  12. 超出文件描述符限制
  13. 脏数据导致数据转发失败
  14. 通讯超时
10. 状态一致性

内部保证 -- checkpoint
source端 -- 可重设数据的读取位置
sink端 -- 从故障恢复时,数据不会重复写入外部系统
幂等性 :就是说一个操作,可以重复执行很多次,但是只会导致一次结果变更,也就是说再重复的数据执行就不起作用了

事务写入

仅支持幂等性写入,有如下问题,例如是: 10 30 50 | 70 90
在50的时候有保存点,但是消费到90的时候,挂掉了,然后数据需要从50开始重新消费,就业务来看数据是不对的: 10 30 50 | 70 90 70 90
所以我们需要事务实现的思想是:构建的事务对应checkpoint,等到checkpoint真正完成的时候,才把所有对应的结果写入sink系统中

  1. 预写日志的方案不可行
  2. 两阶段提交:对于每一个checkpoint,sink任务会启动一个事务,并将接下来所有接受到的数据添加到事务中,然后将这些数据写入到外部sink系统,但是不提交他们--这个时候只是预提交,当它收到checkpoint完成的通知时,它才正式提交事务,实现结果的真正写入
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容