
1) 【一句话结论】采用基于消息队列的流处理架构,通过Kafka采集航班动态数据,Flink实时计算处理,结合Elasticsearch+Kibana实现低延迟展示,确保系统高可用、低延迟,满足实时监控需求。
2) 【原理/概念讲解】老师口吻解释各组件:
数据采集:机场各系统(如航班调度、塔台)将延误、取消等事件封装为JSON消息,发送到Kafka主题(如flight_events)。Kafka作为分布式消息队列,保证数据不丢失、可顺序消费,实现系统解耦。
处理:Flink作为流处理引擎,消费Kafka消息,执行实时计算(如统计延误航班数量、计算取消率),支持状态管理(如维护当前延误航班列表),确保亚秒级延迟。
展示:Elasticsearch存储处理后的数据,Kibana构建实时Dashboard,用户可实时查看延误趋势、取消航班分布,支持交互。
类比:航班数据像流水,Kafka是蓄水池(缓冲、解耦),Flink是水管(实时处理),Dashboard是水龙头(实时展示),确保水流(数据)从源头到展示端低延迟、不中断。
3) 【对比与适用场景】
| 对比项 | 批处理(Hadoop MapReduce) | 流处理(Flink) |
|---|---|---|
| 定义 | 离线处理,批量处理历史数据 | 实时处理,持续处理流数据 |
| 特性 | 高吞吐、高容错(检查点),延迟高(分钟级) | 低延迟(亚秒级),支持状态管理,高吞吐 |
| 使用场景 | 数据仓库、日志分析(历史数据) | 实时监控、实时告警(如航班延误实时统计) |
| 注意点 | 适合离线,不适合实时 | 需考虑状态一致性,资源消耗高 |
4) 【示例】最小可运行示例:
{"flight_id": "CA1234", "status": "delayed", "delay_minutes": 30, "timestamp": "2024-01-15T10:30:00Z"}
DataStream<FlightEvent> stream = env
.addSource(kafkaSource)
.filter(event -> event.getStatus().equals("delayed"))
.keyBy(FlightEvent::getFlightId)
.sum("delay_minutes")
.map(result -> new DelaySummary(result.getKey(), result.getValue()));
GET /flight_delay/_search
{
"query": {
"range": {
"delay_minutes": {
"gt": 0
}
}
}
}
5) 【面试口播版答案】(约90秒)
“面试官您好,针对机场航班信息系统实时处理大量动态数据的需求,我设计的系统采用流处理架构,核心是Kafka + Flink + Elasticsearch + Kibana。首先,数据采集端,机场各系统(如航班调度、塔台)将延误、取消等事件封装为JSON消息,发送到Kafka主题,Kafka作为分布式消息队列,保证数据不丢失且可顺序消费。然后,处理层用Flink消费Kafka消息,执行实时计算,比如统计当前延误航班数量、计算取消率,支持状态管理确保低延迟。最后,展示层用Elasticsearch存储处理后的数据,Kibana构建实时Dashboard,用户可实时查看延误趋势、取消航班分布,支持交互。整个架构确保高可用、低延迟,满足实时监控需求。”
6) 【追问清单】
7) 【常见坑/雷区】