第一章:大数据技术概述 | Flink原理与实践
原文整理自《Flink原理与实践》,作者鲁蔚征,第一章
作者:AlgoCraft
时间:2025-08-19
一、什么是大数据?
大数据不仅仅是"数据量大",它具备 5个V特征:
| 特征 |
含义 |
| Volume |
数据量巨大,从TB到ZB级别 |
| Velocity |
数据产生速度快,实时性强 |
| Variety |
数据类型多样,结构化、半结构化、非结构化并存 |
| Veracity |
数据真实性和准确性问题 |
| Value |
最终目标是从数据中挖掘出价值 |
二、从批处理到流处理
1. 数据与数据流
- 数据流(Data Stream):源源不断的、无界的数据集合。
- 事件(Event):数据流中的单个数据记录。
2. 批处理 vs 流处理
| 特点 |
批处理(Batch) |
流处理(Stream) |
| 数据类型 |
有界数据集 |
无界数据流 |
| 延迟 |
高(分钟、小时) |
低(毫秒、秒) |
| 典型场景 |
月度账单、日报统计 |
实时风控、实时监控 |
| 技术代表 |
Hadoop MapReduce |
Flink、Kafka Streams |
3. 为什么需要流处理框架?
- 实时性需求:如股票交易、电商大促实时监控。
- 传统方案痛点 :
- 手动处理分布式逻辑复杂(如MPI)
- 数据倾斜、容错性差、时序错乱等问题突出
三、大数据技术演进
1. 代表性技术
| 技术 |
定位 |
特点 |
| Hadoop |
分布式存储+批处理 |
高容错、适合离线分析 |
| Spark |
批处理+流处理(微批) |
内存计算、生态丰富 |
| Kafka |
消息队列+流处理 |
高吞吐、解耦生产消费 |
| Flink |
纯流处理(事件驱动) |
低延迟、Exactly-Once、支持状态计算 |
2. 流处理框架的三代演进
| 代际 |
代表框架 |
特点 |
| 第一代 |
Storm |
毫秒级延迟,不支持状态、无Exactly-Once |
| 第二代 |
Spark Streaming |
微批处理,秒级延迟,支持状态 |
| 第三代 |
Flink |
事件级处理、毫秒级延迟、状态+Exactly-Once |
四、架构演进:Lambda → Kappa
| 架构 |
核心思想 |
优缺点 |
| Lambda |
批处理层(准确)+ 流处理层(实时) |
实时性强,但维护两套系统复杂 |
| Kappa |
仅用流处理层,Kafka存储历史数据 |
架构简化,但对流处理要求极高 |
五、流处理核心概念
| 概念 |
解释 |
| 延迟(Latency) |
单个事件从产生到处理完成的时间 |
| 吞吐(Throughput) |
单位时间内处理的事件数量 |
| 窗口(Window) |
将无界数据流切分为有限块进行处理 |
| 时间语义 |
Event Time(事件时间)、Processing Time(处理时间) |
| Watermark |
用于处理乱序事件的时间机制 |
| 状态(State) |
跨事件存储的中间结果 |
| 检查点(Checkpoint) |
容错机制,确保故障恢复后状态一致 |
六、编程语言选择
| 语言 |
特点 |
Flink支持情况 |
| Java |
企业级、生态成熟 |
核心API |
| Scala |
函数式、简洁 |
与Java API兼容 |
| Python |
简洁、AI生态强 |
PyFlink(持续完善中) |
| SQL |
易用、适合分析师 |
Table API & SQL |
七、实战:用Kafka构建文本数据流
1. 启动Kafka服务
# 启动Zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
# 启动Kafka
bin/kafka-server-start.sh config/server.properties
2. 创建Topic并发送消息
# 创建Topic
bin/kafka-topics.sh --create --topic Shakespeare --bootstrap-server localhost:9092
# 发送消息
bin/kafka-console-producer.sh --topic Shakespeare --bootstrap-server localhost:9092
> To be, or not to be: that is the question:
3. 消费消息
bin/kafka-console-consumer.sh --topic Shakespeare --from-beginning --bootstrap-server localhost:9092
八、小结
第一章为我们打下了坚实的基础:
- 理解了大数据的5V特征与分而治之的思想;
- 掌握了批处理与流处理的核心区别;
- 熟悉了Flink在流处理领域的技术优势;
- 学会了用Kafka构建实时数据管道。