整理了在学习flink的过程中的各项知识的入口,以便查阅、回顾以及一些查漏补缺。持续更新。
文章目录
- 一. flink概述:
- 二. flink部署模式与集群搭建
- 三. flink的编程模型、相关原理
- 四. flink dataStream
- 五. flink sql和table api的操作
- 六. flink的状态管理
- 七. flink监控与性能优化
- 八. 其他经验
- 1. 源码改造
- 2. 排错经验
- 3. 面试问答 ing
一. flink概述:
我们首先从flink的特点、使用场景、作用、架构、运行模型等方面先有一个整体的认识。即它是什么、能做哪些事,怎么做的。
三. flink的编程模型、相关原理
flink的编程模型:编程接口、程序结构、数据类型:类型支持与typeinformation获取。
四. flink dataStream
- 编程模型、时间概念与水印、窗口计算、作业链和资源组、异步操作。
- api中主要有输入源、转换算子、数据输出等api的操作。
五. flink sql和table api的操作
- sql与table api
- 常见场景下的sql使用等
- 自定义函数
- connector
六. flink的状态管理
对于一些任务,比如join、聚合或者是去重等操作需要flink保存状态来实现相关语义。对于flink的状态管理有如下几个方面:
有状态计算的原理是什么
checkpoint和savepoint
状态管理区
querable state
七. flink监控与性能优化
监控指标
反压的监控与优化
checkpoint的监控与优化
Flink内存优化:flink内存配置、Network Buffers的配置
八. 其他经验
1. 源码改造
【源码|编译】flink 12 源码编译及使用idea运行、debug
【源码改造|性能】Flink jdbc connector 源码改造sink之 clickhouse多节点轮询写与性能分析
【源码改造】Flink-jdbc-connector源码简析+改造支持谓词下推
【源码改造】flink JDBC connector 源码改造之 类型转换 java.time.LocalDateTime cannot be cast to java.sql.Timestamp
2. 排错经验
【排错】记一次(flink on yarn) 提交任务的排错之旅(yarn队列、namenode、resourcemanager、flink job全崩盘)
【性能|调优】Flink on yarn双流join问题分析+性能调优思路
【job排错】记一次flink on hadoop with per-job 报错排查
3. 面试问答 ing
怎么做压力测试和监控?
产生的数据流的速度如果过快,而下游的算子消费不过来的话,会产生背压。背压的监控可以使用Flink Web UI来可视化监控Metrics。
反压的场景:
- 因为watermark设置过大导致某一时刻数据量激增导致下游数据出现反压:可以将设置watermark设置的小一点,然后把迟到的元素发送到测输出流中,晚一点更新结果。
- sink消费慢出现反压:横向拓展,增加并行度,让不同slot执行,分散那一点的压力。
flink的相关优化
- 集群角色的内存配置方面
- 合理利用资源:slot和并行度、slot共享
- 数据倾斜:null过多,加盐打散。
- 广播变量:小数据集与大数据进行join:将小数据集广播,避免代价高的冲分区。
- 源码改造:谓词下推、轮询写入
海量key怎么去重?
因为可能有上亿个key,内存放不下,可以考虑使用布隆过滤器(Bloom Filter)来去重。
Flink中的exactly-once语义如何实现的,状态如何存储的?
Flink依靠checkpoint机制来实现exactly-once语义,如果要实现端到端的exactly-once,还需要外部source和sink满足一定的条件。
Flink程序在面对数据高峰期时如何处理?
使用大容量的Kafka把数据先放到消息队列里面作为数据源,再使用Flink进行消费,不过这样会影响一点实时性。
Flink的checkpoint机制对比spark有什么不同和优势?
spark streaming的checkpoint仅仅是针对driver的故障恢复做了数据和元数据的checkpoint。
flink的checkpoint机制采用的是轻量级的分布式快照,实现了每个算子的快照,及流动中的数据的快照。