
1) 【一句话结论】采用Flink+Kafka构建实时数据管道,整合销售与库存数据,通过动态清洗、聚合及季节性调整的异常检测,实现月度销量、库存周转率等指标的实时监控,快速识别库存过高或销量骤降等业务问题。
2) 【原理/概念讲解】流处理技术用于实时处理数据流,核心组件包括:
model_id、date、sales、inventory等字段);3) 【对比与适用场景】
| 特性 | 批处理(如Hadoop MapReduce) | 流处理(如Flink) |
| 定义 | 定期(如每天)处理历史数据 | 实时处理数据流 |
| 延迟 | 小时/天级(如每天凌晨处理前一天数据) | 毫秒/秒级(如1分钟内处理实时数据) |
| 适用场景 | 历史数据分析、报表生成(如年度销售报告) | 实时监控、实时决策、预警(如库存过高预警) |
| 注意点 | 无法处理实时事件,延迟大 | 需处理状态、容错、窗口计算,对配置敏感 |
4) 【示例】:假设数据源为销售系统API,发送JSON:{"model_id": "X1", "date": "2023-10-21", "sales": 120, "inventory": 450}。流处理步骤:
sales <= 0或inventory <= 0的记录(无效数据),以及数据格式校验(如日期是否为有效格式);model_id和month聚合销量(sum(sales))和库存周转率(sales / average(inventory),计算平均库存);env = StreamExecutionEnvironment.get_execution_environment()
kafka_source = env.add_source(...) # 从Kafka读取数据
cleaned = kafka_source.filter(lambda x: x['sales'] > 0 and x['inventory'] > 0 and is_valid_date(x['date']))
aggregated = cleaned.key_by('model_id', 'month').sum('sales').window(TumblingProcessingTimeWindow.of(Time.seconds(30))) # 30分钟滚动窗口
turnover = aggregated.map(lambda x: {'model_id': x['model_id'], 'month': x['month'], 'sales': x['sum_sales'], 'avg_inventory': x['avg_inventory'], 'turnover': x['sum_sales'] / x['avg_inventory']})
anomalies = turnover.filter(lambda x: is_anomaly(x, historical_data, seasonality_factor)) # is_anomaly包含季节性调整
anomalies.print()
5) 【面试口播版答案】:面试官您好,针对宝马构建实时销售数据看板的需求,我会设计一个基于流处理的实时数据管道。核心思路是用Kafka作为数据中转,Flink处理数据清洗、聚合和异常检测,最终推送到看板。具体来说,数据从销售系统和库存系统实时流出到Kafka,Flink先清洗数据(比如过滤无效值,比如销量为负或库存为0),然后按月、车型聚合销量(sum(sales))和库存周转率(sales除以平均库存),接着用季节性调整的异常检测方法,比如计算某车型销量的移动平均,结合冬季的基准销量(因为冬季自然销量下降),如果某月销量环比下降超过20%且残差超过3个标准差,系统会实时报警。这样就能快速发现库存过高(比如周转率低于2次/月)或销量骤降的问题,帮助销售和库存部门及时调整策略,比如降低库存或分析销量下降原因。
6) 【追问清单】:
7) 【常见坑/雷区】: