整理了在学习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机制采用的是轻量级的分布式快照,实现了每个算子的快照,及流动中的数据的快照。