第3章 核心技能栈梳理:编程语言、大数据组件、数据建模、调度工具、监控体系

面试官通过技能栈提问,考察你对大数据技术全貌的认知深度与选型判断力。掌握五大模块的层次关系、常见对比与落地场景,是回答的基础。下图梳理核心技能树,每个分支包含主流选型与关键权衡点。

数据平台工程师技能栈 编程语言 Java / Scala / Python JVM性能 · 函数式 · 生态 大数据组件 Hive / Spark / Flink 批/流 · 存储计算分离 数据建模 星型 / 雪花 / 宽表 事实表 · 维度退化 调度工具 Airflow / DolphinScheduler DAG依赖 · 重试告警 监控体系 Prometheus + Grafana 数据质量 · 链路延迟 五个模块相互依赖,面试时需展示选型权衡与落地细节

📌 面试问答卡片

🤔 问题1:大数据开发中你会选择 Java、Scala 还是 Python?各自优缺点是什么?

🎯 面试官考察点:

  • 是否理解语言特性与框架的匹配关系(如 Spark 的 Scala 原生性能)
  • 能否根据团队、业务、维护成本做出合理选型
  • 是否具备实际项目中的语言切换经验

📐 回答框架:

  1. 表态:没有最优,取决于场景
  2. 对比:Java 生态成熟、团队常见;Scala 函数式适合 Spark/Flink 性能敏感;Python 开发快但性能弱
  3. 举例:批处理用 Java + Hive,实时用 Scala + Flink,临时分析用 PySpark
  4. 补充:考虑团队技能栈与长期维护

✍️ 简短示例回答:

“我们核心实时链路使用 Scala 开发 Flink 作业,利用其高阶函数提升代码简洁性;离线任务多数用 Java 封装 UDF 以保证稳定性;临时探索用 Python 降低开发成本。选型核心看性能要求与团队主力语言。”
(75字)

🔁 可能追问:

  • “如果团队都是 Java 背景,你会怎么说服他们用 Scala?”
  • “Kotlin 是否适合大数据开发?”
⚠️ 避坑提醒:不要只说“Scala 更好”或“Python 万能”。要体现权衡思维,避免贬低某语言;同时注意提及 JVM 调优经验。

🤔 问题2:Hive、Spark、Flink 三者在你的数据平台中分别承担什么角色?请结合场景说明。

🎯 面试官考察点:

  • 是否清晰理解批处理、微批、流处理的架构差异
  • 能否根据时效性、吞吐量、容错要求进行组件选型
  • 是否了解组件间协同(如 Hive 做元数据,Spark 做 ETL)

📐 回答框架:

  1. Hive:离线数仓,SQL 化,低延迟不敏感,数据量巨大
  2. Spark:批处理 ETL、复杂计算、机器学习,内存计算快
  3. Flink:实时流处理,秒级延迟,精确一次语义
  4. 协同:Hive 表作为 Flink/Spark 的 sink/source,统一元数据

✍️ 简短示例回答:

“我们使用 Hive 存储历史明细,Sparksql 做每日 T+1 聚合,Flink 实时同步 Kafka 数据写入 ClickHouse。三个组件通过 Hive MetaStore 共享元数据,确保数据一致性。”
(65字)

🔁 可能追问:

  • “实时场景为何不用 Spark Streaming 而选 Flink?”
  • “如何保证 Hive 和 Flink 计算结果的准确性?”
💡 加分点:提及统一元数据服务、数据湖(Iceberg/Hudi)以及 Lambda 架构的演进。

🤔 问题3:你如何选择星型模型、雪花模型或宽表?请给一个实际建模决策案例。

🎯 面试官考察点:

  • 是否掌握维度建模理论及实际应用
  • 能否根据查询模式、存储成本、ETL 复杂度做权衡
  • 是否理解 OLAP 引擎(如 ClickHouse、Druid)对宽表的偏好

📐 回答框架:

  1. 星型:查询简洁,性能好,适合常见 OLAP;维度表不多时首选
  2. 雪花:减少冗余,适合维度层次深(如地理层级),但 join 多
  3. 宽表:极致查询性能,适合大宽表引擎(如 ClickHouse),但 ETL 复杂
  4. 案例:用户行为分析用星型(用户维+事件事实);广告报表用宽表预聚合

✍️ 简短示例回答:

“用户行为分析场景,我们采用星型模型:事实表存放事件,关联用户、商品、渠道三个维表。查询只需一次 join,且可以方便地增加维度。对于固定报表,我们会预聚合为宽表写入 ClickHouse,查询响应低于 100ms。”
(90字)

🔁 可能追问:

  • “宽表如何解决数据不一致问题?”
  • “维度缓慢变化(SCD)你如何处理?”
⚠️ 避坑提醒:不要只讲理论缺乏实例;不要忽略 OLAP 引擎特性对模型的约束(如 ClickHouse 不适合多 join)。

🏗️ 项目案例模板:实时数仓建设

项目名称:电商实时数仓(从 Kafka 到 ClickHouse)

业务背景为电商运营提供实时 GMV、PV/UV、转化漏斗,延迟低于 30 秒。
规模指标日均处理消息 50 亿条;实时表数据量 200 TB;支撑 30+ 实时看板。
技术栈Kafka → Flink (SQL + Scala UDF) → ClickHouse 64 节点;Hive 做离线校准;Airflow 管理补数任务;Prometheus + Grafana 监控。
核心难点
  • 数据倾斜导致 Flink 背压与 ClickHouse 写入瓶颈
  • 实时与离线数据对账不一致(乱序消息导致重复或丢失)
  • ClickHouse 大量写入下合并树性能衰减
面试高频追问
  • Flink 如何保证 Exactly-Once?你用的什么 sink 实现?
  • ClickHouse 写入高延迟时你怎么定位?调整过哪些参数?
  • 离线校准逻辑怎么写?Flink 的 2PC 遇到过坑吗?
可迁移回答话术“我们最终通过 Flink 的幂等写入 + ClickHouse 的 ReplacingMergeTree 去重,再结合小时级离线对账脚本修复偏差。同时为每个 Flink 作业配置独立的监控大盘,当 checkpoint 耗时超过阈值立即告警并自动扩容。”
(90字)