# OpenSpec Proposal: bls-oldrcu-heartbeat-backend ## 功能概述 从 Kafka topic `blwlog4Nodejs-oldrcu-heartbeat-topic` 消费 OldRCU 心跳数据, 经过去重与批处理后,upsert 写入 PostgreSQL G5 库的 `room_status.room_status_moment_g5` 表。 ## 数据流 ``` Kafka (blwlog4Nodejs-oldrcu-heartbeat-topic) ↓ 消费消息 Message Parser (提取 ts_ms, hotel_id, room_id, device_id) ↓ 投入缓冲 HeartbeatBuffer (Map, key=hotel_id:room_id, 每5秒flush) ↓ 批量写库 PostgreSQL G5 (room_status.room_status_moment_g5) → INSERT ON CONFLICT (hotel_id, room_id) DO UPDATE → SET ts_ms, device_id, online_status=1 ``` ## 关键约束 - **写库频率**:每5秒最多写一次 - **去重策略**:同一 hotel_id+room_id 只保留 ts_ms 最大的记录 - **online_status**:每次写库强制置为 1 ## npm 依赖 | 包名 | 版本策略 | 用途 | |------|----------|------| | kafka-node | ^5.0.0 | Kafka 消费 | | pg | ^8.11.5 | PostgreSQL 连接池 | | redis | ^4.6.13 | Redis 心跳/日志 | | dotenv | ^16.4.5 | 环境变量 | | node-cron | ^4.2.1 | 定时指标上报 | | zod | ^4.3.6 | 消息Schema校验 | ## 目标数据库表 - Schema: `room_status` - Table: `room_status_moment_g5` - PK: `(hotel_id, room_id)`