自我介绍
面试官您好,我具备大数据开发工程师背景,专注于实时计算与数据平台架构。工作期间参与了多个核心项目,积累了 Flink、Spark 等组件的开发与调优经验。对 Flink 内核机制、调度策略及状态管理有深入研究,曾负责过流计算平台的版本升级与架构重构。
项目经验:流计算平台
该平台对标阿里云实时计算 Flink,基于 Flink 构建,提供一站式大数据计算与分析能力。核心功能包括多 Source/Sink 插件支持、统一元数据管理、一键提交、应用管理、断点调试、监控告警及 Ranger 鉴权模块。
主要职责包括:
- 版本升级:将底层 Flink 从 1.11.0 升级至 1.14.0,解决兼容性问题。
- 架构重构:优化代码结构,提升系统可维护性。
- 核心模块开发:参与应用管理与 Ranger 鉴权模块的实现。
- 问题解决:解决了多部门任务配置冲突、SQL 语法校验报错及权限鉴权异常等问题。
Ranger 鉴权机制
Ranger 鉴权主要针对表级别的读写权限进行控制。
实现流程:
- SQL 解析:通过 Flink SQL Parser 解析用户提交的 SQL 语句。
- Operation 提取:识别操作类型(DDL/DML/DQL)并提取关键信息(如表名、字段名)。
- 规则匹配:调用自研的 flink-ranger 插件,生成符合 Ranger 格式的鉴权请求。
- 执行决策:若鉴权通过,则继续原生执行逻辑;否则抛出权限异常。
为何选择 Flink SQL 而非 Hive SQL 或 HDFS 鉴权?
- 适配性:平台底层基于 Flink,SQL 提交流程天然经过 Flink SQL Parser,在此处拦截鉴权效率最高。
- 灵活性:Flink SQL 能更好地处理流式场景下的动态表变更,而 Hive SQL 更偏向批处理。
- 粒度:HDFS 鉴权仅针对文件层级,无法精确到 SQL 操作语义(如特定列的访问)。
Flink SQL Operation 解析流程
Flink SQL 的执行计划生成主要经历以下四个阶段:
-
Parse(词法与语法分析)
- 调用
parse()方法,将 SQL 文本转换为未经校验的抽象语法树(AST, SqlNode)。 - 词法分析将 SQL 转为 Token 序列。
- 语法分析采用递归下降算法构建 AST。
- 调用
-
Validate(语义校验)
- 调用
validate()方法,将 AST 转换为校验后的 SqlNode。 - 校验内容包括:表名/字段名是否存在、函数签名是否匹配、Join/GroupBy 嵌套是否合法等。
- 调用
-
Rel(关系代数转换)
- 调用
rel()方法,将 SqlNode 转换为关系代数树(RelNode)和行表达式(RexNode)。 - DDL 语句通常不执行此步骤,因其主要涉及元数据修改而非复杂查询。
- 调用
-
Convert(算子生成)
- 调用
convert()方法,将 RelNode 最终转换为 Execution Plan 中的 Operation。 - 所有 Operation 最终都会汇聚为根节点
ModifyOperation。
- 调用


