feat: 实现Redis集成与Kafka消息处理优化

- 新增Redis集成模块,支持心跳写入与控制台日志队列
- 优化Kafka消费者实现,支持多实例与自动重连
- 改进消息处理器,支持批量处理与多层解码
- 更新数据库表结构,调整字段类型与约束
- 添加Redis与Kafka的配置项和环境变量支持
- 补充测试用例和文档说明
This commit is contained in:
2026-01-14 17:58:45 +08:00
parent eb94aaf92b
commit 910f1c353f
28 changed files with 1691 additions and 177 deletions

View File

@@ -1,7 +1,7 @@
## MODIFIED Requirements
### Requirement: 数据库表结构管理
系统必须包含数据库表结构的定义和管理机制。
系统 MUST 提供数据库表结构的定义和管理机制。
#### Scenario: 表结构初始化(高吞吐分区表)
- **WHEN** 系统首次启动或部署数据库时
@@ -18,7 +18,7 @@
## ADDED Requirements
### Requirement: 高吞吐写入友好
系统在高吞吐场景(约 5 万条/分钟量级)下避免单点瓶颈。
系统 MUST 在高吞吐场景(约 5 万条/分钟量级)下避免单点瓶颈。
#### Scenario: 批量写入与分区裁剪
- **WHEN** 进行批量写入

View File

@@ -1,7 +1,7 @@
## ADDED Requirements
### Requirement: 心跳消息载荷格式(生产者约束)
Kafka 心跳消息必须包含数据库落库所需的必填字段,并采用 UTF-8 编码。
Kafka 心跳消息 MUST 包含数据库落库所需的必填字段,并采用 UTF-8 编码。
#### Scenario: JSON 心跳消息
- **WHEN** 生产者向主题推送心跳消息
@@ -10,6 +10,11 @@ Kafka 心跳消息必须包含数据库落库所需的必填字段,并采用 U
- **AND** 可选包含 extrajson object
### Requirement: 分区键友好的 Kafka Key
系统 MUST 支持使用 `hotel_id:device_id` 作为 Kafka message key 以获得更好的分区与有序性。
#### Scenario: 缺失 key 仍可处理
- **WHEN** 消息未携带 key
- **THEN** 系统仍应能够消费与处理该消息
#### Scenario: 使用 device_id 作为 key
- **WHEN** 生产者发送消息

View File

@@ -1,7 +1,19 @@
## MODIFIED Requirements
### Requirement: Kafka 心跳消息解码/解压
系统 MUST 能够将 Kafka 消息 value 解码为 JSON 对象或数组,并支持两层以内的编码/压缩组合。
#### Scenario: 两层以内解码成功
- **WHEN** Kafka 消息 value 为 UTF-8 JSON、base64(二进制)、或 gzip/deflate/raw-deflate/brotli 压缩二进制
- **THEN** 系统应按“最多两层”策略尝试解码/解压
- **AND** 成功时得到 JSON 对象或数组
#### Scenario: 解码失败
- **WHEN** Kafka 消息 value 无法被解码/解压为 JSON
- **THEN** 系统应记录错误并丢弃该消息
### Requirement: 心跳数据转换
系统必须能够将解包后的心跳数据转换为数据库存储格式。
系统 MUST 能够将解包后的心跳数据转换为数据库存储格式。
#### Scenario: 转换为 v2 明细表字段
- **WHEN** 心跳数据验证通过时