
1) 【一句话结论】采用基于Apache Flink的流处理引擎结合Kafka消息队列与Elasticsearch的实时数据仓库架构,通过订单、库存、支付等数据流的秒级消费与计算,支撑库存周转天数、资金周转天数等核心指标实时分析,确保数据延迟低于秒级。
2) 【原理/概念讲解】老师口吻,解释实时数据仓库的核心是流处理。订单、库存、支付等业务数据通过消息队列(Kafka)进行解耦与缓冲,Flink作为流处理引擎,实时消费这些数据流,执行ETL(提取、转换、加载)操作,计算核心指标(如库存周转天数=(平均库存/日均销量)×365),并将结果写入ES,供BI工具实时查询。类比:就像水管(数据流)通过水泵(Flink)实时处理,直接输送到水池(ES),用户可以随时看到实时水位(指标)。
3) 【对比与适用场景】
| 对比项 | 批处理(如Hive) | 流处理(如Flink) |
|---|---|---|
| 数据处理方式 | 一次性批量处理 | 实时连续处理 |
| 延迟 | 分钟级 | 秒级 |
| 适用场景 | 历史数据分析、报表 | 实时监控、指标计算 |
| 注意点 | 无法实时响应 | 需要状态管理、容错 |
4) 【示例】
伪代码(Flink处理订单数据计算库存周转天数并写入ES):
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, DataTypes
env = StreamExecutionEnvironment.get_execution_environment()
t_env = StreamTableEnvironment.create(env)
# 读取Kafka订单数据
t_env.connect(
Kafka()
.version('latest')
.topic('order_stream')
.start_from_latest()
.property('bootstrap.servers', 'kafka:9092')
.property('group.id', 'order_analyzer')
)
t_env.create_temporary_view('orders', ...)
# 定义表
t_env.execute_sql("""
CREATE TABLE orders (
order_id BIGINT,
product_id BIGINT,
quantity BIGINT,
order_time TIMESTAMP(3),
PRIMARY KEY (order_id) NOT ENFORCED
) WITH (
'connector' = 'kafka',
'topic' = 'order_stream',
'properties.bootstrap.servers' = 'kafka:9092',
'properties.group.id' = 'order_analyzer',
'format' = 'json'
)
""")
# 计算库存周转天数(伪代码,实际需结合库存表)
t_env.execute_sql("""
SELECT
product_id,
SUM(quantity) AS total_sold,
AVG(sales_per_day) AS avg_daily_sales,
(SUM(quantity) / AVG(sales_per_day)) * 365 AS inventory_turnover_days
FROM (
SELECT
product_id,
quantity,
EXTRACT(DAY FROM TIMESTAMPDIFF(DAY, LAG(order_time) OVER (PARTITION BY product_id ORDER BY order_time), order_time)) AS sales_per_day
FROM orders
)
GROUP BY product_id
""")
# 写入ES
t_env.execute_sql("""
INSERT INTO TABLE es_table (
product_id,
inventory_turnover_days
) WITH (
'connector' = 'es',
'hosts' = 'es:9200',
'index' = 'inventory_metrics'
)
""")
5) 【面试口播版答案】
面试官您好,针对南光集团能源贸易的实时核心指标分析需求,我设计的实时数据仓库架构核心是采用Flink+Kafka+ES的流处理方案。首先,订单、库存、支付等业务数据会先通过Kafka进行解耦和缓冲,确保数据不丢失且可按需消费。然后,Flink作为流处理引擎,实时消费这些数据流,执行ETL计算,比如计算库存周转天数(公式为平均库存/日均销量×365),并将结果实时写入ES。整个流程确保数据延迟低于秒级,满足实时分析需求。具体来说,订单数据从Kafka消费后,Flink会计算每个产品的销量,结合库存数据,实时计算周转天数,然后通过ES提供秒级查询能力,支撑业务决策。
6) 【追问清单】
7) 【常见坑/雷区】