生而为人

程序员的自我修养

0%

突击汇总

[toc]

大数据面试终极突击一页纸(全栈合集)

直接背这一张,面试 80% 知识点全覆盖,全程精简无废话。

一、Kafka 核心

核心组件

生产者、Broker、Topic、Partition 分区、副本、消费者组、Offset。

核心原理

  • 单分区有序,全局无序;分区决定并行度。
  • Leader 负责读写,Follower 同步做高可用。
  • acks:0 最快易丢;1 落 Leader;-1/all 最安全。
  • 削峰填谷:磁盘可堆积,高峰缓存、低峰匀速消费,解耦护下游。

常见问题 & 解决

  • 消息丢失:acks=-1 + 多副本 + 先消费后提交 offset。
  • 重复消费:业务唯一主键幂等、手动提交 offset。
  • 重平衡频繁:调大会话超时、稳定消费者数量。
  • 消息积压:加分区、扩消费并行度、优化消费逻辑。

调优

生产者:批量 + 压缩 + acks=-1;

消费者:关闭自动提交、手动批量提交;

分区数和 Flink/Spark 并行度对齐,生产 3 副本。

核心特性

原生事件驱动流式、EventTime+Watermark 水位线、窗口、Checkpoint、状态管理、Exactly-Once。

关键概念

  • 时间语义:事件时间、处理时间、摄入时间。
  • 水位线:解决乱序 / 迟到数据,触发窗口计算。
  • Checkpoint:保存 offset 和算子状态,故障自动恢复。
  • 状态后端:生产用RocksDB,配 TTL 防状态膨胀 OOM。

项目难点 & 解法

  • 数据倾斜:局部 + 全局聚合、热点 key 加盐打散、Runtime Filter。
  • 反压:定位瓶颈算子、增加并行度、简化计算逻辑。
  • 迟到数据:水位线 + 允许迟到 + 侧输出兜底。
  • 小文件:窗口攒批、分区合并、控制写入频次。

三、Spark 核心

原理

RDD 惰性求值、DAG 宽窄依赖、遇到 Shuffle 切分 Stage、Task 按分区执行。

版本区别

  • Spark Streaming:固定微批,老旧已淘汰。
  • Spark Structured Streaming:默认底层仍是微批轮询,非事件驱动,只适合准实时。

常见问题

  • 数据倾斜:空值过滤、加盐打散、两阶段聚合。
  • OOM:Driver 不做 Collect、合理分区、加大内存。
  • 小文件:repartition/coalesce 合并、离线定时清理。

优化口诀

尽早过滤、谓词下推、广播小表、少 Shuffle、合理缓存。

  • 离线数仓、批量 ETL、报表画像 → Spark
  • 实时大屏、秒级低延迟、乱序严重、窗口精准、强一致性 → Flink
  • 流批一体:全站 Flink,离线保留 Spark 做复盘。

五、CDC 增量同步

定义

CDC 变更数据捕获,监听 MySQL Binlog,实时抓取Insert/Update/Delete增量,不用全量拉表,秒级延迟、业务无侵入。

三种实现

定时轮询、数据库触发器(不用)、Binlog 监听(Flink CDC/Canal/Debezium)

一条任务自动全量快照 + 增量无缝切换,无需中间件,和 Flink 原生集成,支持 Exactly-Once。

实时数仓标准链路

MySQL → Flink CDC → Kafka → Flink 清洗加工 → Doris/ClickHouse 落地。

六、实时数仓 & 离线数仓

四层架构通用

ODS 原始层、DWD 明细宽表层、DWS 聚合层、ADS 应用指标层。

离线数仓

Hive+Spark、T+1 / 小时级、定时全量 / 增量调度、用于日报月报、用户画像、业务复盘,可反复重跑数据精准。

实时数仓

Flink+Kafka+CDC+Doris、秒级延迟、流式增量加工、用于实时大屏、风控告警、订单指标。

双仓价值

实时看当下业务、离线做复盘口径校准;湖仓一体 Hudi/Paimon 实现一套数据、流批共用

七、Doris vs ClickHouse

ClickHouse

单表查询性能极强、压缩率高;Join 弱、更新差、并发低、运维重;适合日志、时序、离线大宽表。

Apache Doris

全能 OLAP、CBO 优化器多表 Join 强、支持实时 UPSERT/DELETE、兼容 MySQL、运维简单、高并发 BI、湖仓一体友好。

选型

复杂关联 / 实时更新 / 高并发 BI / 低运维 → Doris

纯日志时序、无复杂 Join、几乎不更新 → ClickHouse

八、大数据主流 SQL 分清

  1. Hive SQL:离线数仓标配
  2. Spark SQL:高性能通用大数据 SQL
  3. Flink SQL:实时流处理专用
  4. Presto/Trino:跨数据源统一查询
  5. T-SQL:SQL Server、Azure Synapse
  6. Cosmos DB SQL:微软 Cosmos 自研类 SQL,不是 T-SQL

九、面试必背 SQL 模板

分组取 Top1

1
2
3
SELECT * FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY id ORDER BY time DESC) rn
) t WHERE rn=1;

行转列

1
CONCAT_WS(',',COLLECT_LIST(field))

列转行

1
LATERAL VIEW EXPLODE(SPLIT(str,',')) tmp AS field

广播 Join

1
SELECT /*+ BROADCAST(b) */ a.* FROM 大表a JOIN 小表b

十、项目自我介绍通用话术

我负责大数据离线与实时数仓开发,采用标准四层 ODS/DWD/DWS/ADS 架构。

离线基于 Hive+Spark,定时同步业务库,做分层建模、指标计算,支撑 T+1 报表和用户画像;

实时采用 Flink+Kafka+Flink CDC+Doris,通过 CDC 监听 MySQL Binlog 做增量同步,秒级入仓,Flink 完成清洗、维度关联、窗口聚合,落地 Doris 支撑实时大屏和风控指标。

项目解决过数据倾斜、Kafka 积压、Flink 反压、状态 OOM、小文件、CDC 重复消费等问题,采用离在线双仓架构,实时看业务、离线做复盘校准。