feat(go): batch tdengine history writes

This commit is contained in:
lingniu
2026-07-03 18:37:38 +08:00
parent 3b0c5fbd5a
commit 09f3e68891
8 changed files with 447 additions and 12 deletions

View File

@@ -50,10 +50,9 @@
| 指标 | 含义 |
| --- | --- |
| `vehicle_history_batch_flush_total{table,status}` | 批写成功/失败次数 |
| `vehicle_history_batch_rows_total{table,status}` | 批写行数 |
| `vehicle_history_batch_flush_duration_ms{table,status}` | 批写耗时 |
| `vehicle_history_batch_pending_rows{table}` | 当前待 flush 行数 |
| `vehicle_history_batch_flush_total{status}` | 批写成功/失败次数 |
| `vehicle_history_batch_rows_total{status}` | 批写行数 |
| `vehicle_history_batch_flush_duration_ms{status}` | 批写耗时 |
| `vehicle_history_kafka_lag` | 下游是否追得上 Kafka |
## Rollout
@@ -63,3 +62,28 @@
3. 在测试环境打开 batch writer。
4. 生产先用小批次 `100/100ms`,观察 TDengine latency 和 Kafka lag。
5. 逐步提升到 `200-500/100ms`
## Implementation Status
2026-07-03 已完成第一阶段实现:
- `history.Writer.AppendAllBatch` 按 raw child table 和 location child table 生成多行 `INSERT ... VALUES (...),(...)`
- oversized payload chunks 仍写入 `raw_frame_payload_chunks`,同样按 child table 批量写。
- `history-writer` Kafka 消费默认按 `HISTORY_BATCH_SIZE=200``HISTORY_BATCH_WAIT_MS=100` 收集消息。
- TDengine batch 成功后才批量提交 Kafka messagesbatch 失败不提交 offset让 Kafka 保留可重放语义。
- 保留 `processHistoryMessage``AppendAll` 单条路径,便于回退和测试。
新增指标:
```text
vehicle_history_batch_flush_total{status}
vehicle_history_batch_rows_total{status}
vehicle_history_batch_flush_duration_ms{status}
```
生产 rollout 建议:
1. 先部署默认 `200/100ms`
2. 观察 `vehicle_history_batch_*``vehicle_history_kafka_lag`
3. 如果 TDengine latency 上升或 Kafka lag 不下降,将 `HISTORY_BATCH_SIZE` 降到 `100`
4. 如果稳定且有 backlog再逐步提升到 `500`