
书: 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)。