
采用基于消息队列(如Kafka)的流处理架构(如Apache Flink),通过分布式并行计算处理高并发,结合状态管理(如Flink检查点)保证低延迟和容错,实现实时旅客流量监控。
老师口吻解释核心概念:
以批处理 vs 流处理为例,表格对比核心差异:
| 对比项 | 批处理(如Spark批处理) | 流处理(如Flink) |
|---|---|---|
| 定义 | 定期(如每小时)处理历史数据 | 实时处理持续数据流 |
| 特性 | 低延迟(但非实时),适合离线分析 | 低延迟(毫秒级),支持状态计算 |
| 使用场景 | 日报、月报生成 | 实时监控、预警(如旅客流量超限) |
| 注意点 | 数据延迟大,不适合实时 | 需要状态管理,容错复杂(需检查点) |
伪代码展示核心流程(数据采集→Kafka→Flink处理→结果存储):
# 伪代码:Flink处理Kafka数据
from pyflink import StreamExecutionEnvironment
env = StreamExecutionEnvironment.get_execution_environment()
# 1. 从Kafka读取数据
kafka_source = env.add_source(
"kafka://localhost:9092/passenger_flow",
# 解析数据为字典
value_type=lambda x: json.loads(x),
# 指定分区和消费者组
partitioner=lambda x: x['timestamp'].hour,
consumer_group="passenger_monitor"
)
# 2. 转换:按时间窗口聚合
windowed = kafka_source
.map(lambda x: (x['timestamp'], x['count'])) # 提取时间戳和旅客数
.key_by(lambda x: x['timestamp'].hour) # 按小时分片
.window(TumblingProcessingTimeWindow.of(Time.seconds(60))) # 60秒窗口
.aggregate(lambda acc, cur: acc + cur['count'], lambda acc: acc) # 聚合
# 3. 输出到Redis(支持快速查询)
windowed.write_output(
output_format=RedisOutputFormat(),
topic="realtime_flow",
key=lambda x: x['timestamp'].strftime("%Y-%m-%d %H:%M"),
value=lambda x: str(x['count'])
)
env.execute("Passenger Flow Monitor")
(约90秒,自然表达)
“面试官您好,针对机场高峰时段实时监控旅客流量,我设计的系统核心是基于Kafka的流处理架构,通过分布式计算处理高并发,并优化低延迟。具体来说:
数据采集端(如闸机传感器)将实时数据发送到Kafka消息队列,作为缓冲解耦数据源和计算层。计算层使用Apache Flink,通过并行处理(多节点分片)处理高并发数据,同时利用Flink的检查点机制保证状态一致性,实现毫秒级低延迟。处理后的数据(如每分钟各航站楼旅客数)存储在Redis中,支持快速查询,并通过可视化大屏实时展示。这样既能应对高峰时段的百万级数据量,又能保证数据实时性,满足监控需求。”