
1) 【一句话结论】
核心选型围绕数据实时性、一致性、可扩展性,采用“消息队列(Kafka)+分布式数据库(TiDB)+列式数据仓库(ClickHouse)”的混合架构,满足上游材料库存的实时更新、供应链数据流处理及历史数据分析需求。
2) 【原理/概念讲解】
首先明确上游材料库存和供应数据的特性:高频实时更新(如供应商每日补货)、多源异构数据(供应商系统、ERP系统)、分析需求(库存周转率、供应商交付准时率)。
3) 【对比与适用场景】
| 组件类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 消息队列(Kafka) | 分布式消息系统,用于异步传输数据 | 高吞吐、低延迟、持久化、容错 | 上游数据采集(异步)、数据流处理、解耦系统 | 需要考虑分区和副本策略,避免数据丢失 |
| 分布式数据库(TiDB) | 兼容MySQL的分布式数据库 | 高并发读写、强一致性、水平扩展 | 实时库存数据存储(增删改查) | 需要合理设计表结构(如分区、索引),避免性能瓶颈 |
| 列式数据仓库(ClickHouse) | 列式存储的MPP数据仓库 | 查询速度快(聚合、统计)、支持SQL | 历史数据分析(库存周转、供应商评估) | 适合分析型查询,不适合实时事务操作 |
4) 【示例】
{
"material_id": "MX-001",
"supplier_id": "S-1001",
"action": "add",
"quantity": 500,
"timestamp": "2024-01-15T10:30:00Z"
}
INSERT INTO real_time_inventory (material_id, supplier_id, quantity, update_time)
VALUES ('MX-001', 'S-1001', 500, NOW());
INSERT INTO historical_inventory (material_id, supplier_id, quantity, update_time)
VALUES ('MX-001', 'S-1001', 500, NOW());
SELECT material_id, SUM(quantity) AS total_quantity
FROM real_time_inventory
WHERE material_id = 'MX-001'
GROUP BY material_id;
SELECT material_id, supplier_id, SUM(quantity) AS total_supply
FROM historical_inventory
WHERE material_id = 'MX-001'
AND update_time BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY material_id, supplier_id;
5) 【面试口播版答案】
“面试官您好,针对存储上游材料库存和供应数据的平台,核心选型要考虑实时性、数据一致性和可扩展性。首先,上游供应商的库存变动是高频、异步的,所以用Kafka作为消息队列,解耦数据源和存储系统,保证数据不丢失且高吞吐。然后,实时库存存储用TiDB,它兼容MySQL,支持高并发读写和强一致性,比如库存扣减、补货操作能快速响应,同时保证数据准确。最后,对于历史数据分析,用ClickHouse这样的列式数据仓库,因为供应链数据有大量历史记录,列式存储查询速度快,比如分析某材料过去3个月的供应波动,或者供应商的交付准时率。这样整体架构是:上游供应商系统通过API将库存变动推送到Kafka,Kafka消费者将数据写入TiDB的实时库存表,同时写入ClickHouse的历史数据表,既保证了实时库存的准确性,又能支持后续的分析需求。”
6) 【追问清单】
7) 【常见坑/雷区】