
1) 【一句话结论】
采用“流式数据管道+分层存储+实时计算+多级查询”的分布式架构,以Kafka保证数据可靠传输(Exactly-Once事务),Spark Streaming实现低延迟实时处理(1秒批处理间隔),HBase/HDFS分层存储(原始数据存HDFS,处理数据存HBase),通过副本、检查点及WAL日志保障数据一致性与系统容错,支持高并发查询。
2) 【原理/概念讲解】
老师口吻:咱们先拆解核心组件的作用,再讲它们如何协同工作。
3) 【对比与适用场景】
| 组件 | 定义 | 关键特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Kafka | 分布式消息队列 | 高吞吐(百万级)、持久化、多副本、分区、Exactly-Once事务 | 实时数据缓冲、日志收集、微服务通信 | 需合理配置分区数(如生产者数量×2-3),避免数据积压 |
| HDFS | Hadoop分布式文件系统 | 高容错(数据副本)、适合批处理、本地化访问 | 存储原始数据、离线分析 | 部署复杂,不适合实时查询 |
| Spark Streaming | Spark流处理组件 | 内存计算、微批处理(1-10秒)、低延迟 | 实时流处理(如负荷计算) | 批处理间隔需根据数据延迟要求调整(如1秒满足实时监控) |
| HBase | 列式数据库 | 实时随机访问、水平扩展(RegionServer)、WAL日志 | 高并发结构化数据查询(如负荷监控) | RegionSplit影响查询性能,需合理分区 |
4) 【示例】
展示数据从生产者到Kafka,再到Spark Streaming处理并写入HBase的流程:
# Kafka生产者(模拟变电站数据发送)
producer = KafkaProducer(bootstrap_servers='kafka:9092', value_serializer=lambda v: v.encode('utf-8'))
producer.send('grid_load', key='station1', value='station1,120,45.6')
producer.flush()
# Spark Streaming消费并处理
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.sql import SparkSession
sc = SparkContext("local[*]")
ssc = StreamingContext(sc, 1) # 1秒批处理间隔
kafka_stream = ssc.socketTextStream("localhost", 9999) # 模拟Kafka消费
# 数据格式:station_id,load_value,timestamp
loads = kafka_stream.map(lambda x: (x.split(',')[0], float(x.split(',')[1])))
# 计算每个站点的实时负荷总和
station_load = loads.reduceByKey(lambda a, b: a + b)
station_load.foreachRDD(lambda rdd: rdd.foreachPartition(lambda it:
HBaseTable("load_table").put("station1", {"load": rdd.map(lambda x: x[1]).sum()})))
ssc.start()
ssc.awaitTermination()
5) 【面试口播版答案】
面试官您好,针对电网调度中心处理TB级实时数据和高并发查询的需求,我设计的分布式架构核心是“流式数据管道+分层存储+实时计算+多级查询”。首先,用Kafka作为实时数据缓冲,它支持高吞吐(能处理百万级消息/秒),数据持久化且通过Exactly-Once事务保证消息不丢失、不重复。变电站数据通过Kafka生产者发送到主题(如“grid_load”),Kafka多副本机制确保数据不丢失。然后,Spark Streaming消费Kafka数据流,采用1秒的微批处理间隔(根据实时监控需求调整),计算各变电站的负荷总和,并将结果写入HBase(结构化存储),同时同步到Elasticsearch(支持搜索查询)。HBase通过WAL日志保证写入一致性,支持高并发随机访问,满足负荷实时监控的查询需求。系统通过Kafka副本、Spark检查点、HDFS数据副本等机制保障容错,通过增加Kafka broker、Spark executor、HBase RegionServer实现水平扩展,确保系统可扩展。
6) 【追问清单】
7) 【常见坑/雷区】