
书: https://pan.baidu.com/s/1jDVnfhmGRwu5jeEuV63Kcg?pwd=bmyj
笔记如下:
- Flink核心架构:基于事件驱动的分布式流处理引擎,采用JobManager(协调者)与TaskManager(执行者)分离设计,支持水平扩展。
 - 流批统一模型:通过DataStream API实现流(Streaming)与批(Batch)处理的代码复用,底层自动优化执行计划。
 - 时间语义:
 
- 事件时间(Event Time):基于数据自带时间戳处理乱序事件(如日志时间)。
 - 处理时间(Processing Time):依赖系统时钟,低延迟但结果不可重现。
 
- 状态管理机制:
 
- Keyed State:与键(Key)绑定的状态(如ValueState/ListState),适用于KeyBy后的操作。
 - Operator State:算子级状态(如Kafka消费偏移量),支持List/Union模式。
 
- 容错与一致性:
 
- Checkpoint:周期性快照(Snapshot)持久化状态,默认异步存储至HDFS/S3。
 - 精确一次(Exactly-Once):结合Kafka事务实现端到端一致性。
 
- 窗口计算:
 
- 滚动窗口(Tumbling):固定大小、无重叠(如每分钟统计)。
 - 滑动窗口(Sliding):固定大小、可重叠(如每10秒统计近1分钟数据)。
 - 会话窗口(Session):基于事件间隔动态划分(如用户活跃会话)。
 
- 水位线(Watermark):
 
- 解决乱序数据问题,通过
BoundedOutOfOrderness或自定义生成器。 - 触发窗口计算的逻辑时钟,延迟容忍度可配置。
 
- 复杂事件处理(CEP):
 
Pattern API定义事件模式(如“连续登录失败3次”)。- 支持
Within时间约束,检测超时事件。 
- Table API & SQL:
 
- 声明式编程,兼容标准SQL(如
GROUP BY/JOIN)。 - 与DataStream互转:
tableEnv.toDataStream/tableEnv.fromDataStream。 
- Connector生态系统:
- Source:Kafka、Socket、FileSystem。
 - Sink:JDBC、Elasticsearch、Redis、Kafka。
 
 - 资源与并行度:
- Task Slot:TaskManager的资源单元,共享网络/内存。
 - 并行度:根据数据量调整(
env.setParallelism(4)),影响吞吐与延迟。 
 - 反压(Backpressure):
- 基于信用(Credit-Based)的流量控制,自动减缓上游发送速率。
 - 通过监控
outPoolUsage指标识别反压源头。 
 - 部署模式对比:
- Session模式:共享集群,适合短作业测试。
 - Per-Job模式:独享集群,生产环境推荐。
 - Application模式:K8s原生支持,容器化部署。
 
 - 性能调优:
- 序列化:使用Kryo(
env.getConfig().enableForceKryo())减少序列化开销。 - 网络缓冲区:调整
taskmanager.network.memory.fraction避免瓶颈。 - 状态后端:RocksDBStateBackend适合超大状态,但吞吐较低。
 
 - 序列化:使用Kryo(
 - 监控与诊断:
- Metrics:通过Prometheus采集
numRecordsIn/latency等指标。 - 日志:定位
Checkpoint失败或Task异常原因。 
 - Metrics:通过Prometheus采集
 - 状态后端选型:
- MemoryStateBackend:仅测试用,宕机丢失状态。
 - FsStateBackend:生产常用,依赖分布式文件系统。
 - RocksDBStateBackend:超大规模状态,支持增量Checkpoint。
 
 - Savepoint与版本升级:
- 手动触发Savepoint(
flink savepoint <jobId>),用于作业暂停/恢复。 - 版本间状态兼容性需验证(如Flink 1.13→1.15)。
 
 - 手动触发Savepoint(
 - Flink与AI集成:
- ML Pipeline:在线模型推理(如TensorFlow SavedModel加载)。
 - Stateful Functions:结合有状态函数处理复杂逻辑。
 
 - 典型场景案例:
- 实时风控:CEP检测欺诈行为,窗口聚合统计。
 - IoT数据处理:设备状态监控,异常告警。
 - 实时数仓:Kafka→Flink→Hudi,构建流式ETL。
 
 - 未来演进方向:
- 统一批流存储:Apache Paimon(原Flink Table Store)集成。
 - Serverless化:Flink on K8s的自动扩缩容(如Flink Kubernetes Operator)。