Files
ai-security-xdr/haobang-security-dm/upgrade-doc/v1
王绍宏 c1472b9a95 fix(syslog-consumer-rule): 解耦统计物化并解决多实例达梦死锁
- 将设备、规则和采集任务业务统计改为专用 Kafka Topic 异步物化
- 使用维度 ID 作为 Kafka key,保证同一统计维度串行更新
- 物化过程读取小型统计表精确值,确保重复消费不会重复计数
- 增加提交后发布、失败重试及定时小表对账补偿
- 固定日统计聚合键写入顺序,完善达梦死锁识别和事务重试
- JSON 解析失败直接转为非标日志,避免进入 DLT 重试链路
- 非标日志使用独立异步队列,不再阻塞正常消息 Kafka ACK
- Kafka 升级脚本新增 STATS.MATERIALIZE Topic
- 增加统计物化状态指标、配置示例及单元测试
2026-09-11 20:42:22 +08:00
..

系统升级说明(简约版)

本目录用于把旧备份版本升级到当前版本,只需要按下面顺序操作。

1. 升级前

  1. 备份达梦数据库,保留旧版 JAR 和配置。
  2. 记录 Kafka 原始 Topic、当前正在使用的消费组和 offset。
  3. 停止 syslog-consumer-rule、syslog-consumer 全部实例。

不要清空 Kafka,不要重置 offset,不要删除数据库历史数据。

2. 升级数据库

DBA 按顺序执行:

database/01-schema-upgrade.sql
database/02-idempotency-indexes.sql
database/03-direct-stats-baseline.sql
database/04-verify.sql

执行 03、04 前,把脚本中的日期占位符全部替换为升级当天:

BUSINESS_DATE -> 2026-08-24
YYYYMMDD      -> 20260824

日期仅为示例,以实际升级日为准。任一 SQL 报错就停止,不要从头反复执行。

3. 升级 Kafka(Docker)

先在 Kafka 宿主机确认容器名:

docker ps --format '{{.Names}}' | grep -i kafka

进入本升级目录的上级目录(能够看到 upgrade-doc),执行:

export KAFKA_CONTAINER=kafka_ycgy-bt-kafka-1

docker exec -i \
  -e KAFKA_BIN=/opt/kafka/bin \
  -e BOOTSTRAP=localhost:9092 \
  -e RAW_TOPIC=agent-01-syslog-topic \
  "$KAFKA_CONTAINER" \
  bash -s < upgrade-doc/v1/kafka/kafka-upgrade.sh

如果现场容器名不同,只修改 KAFKA_CONTAINER。如果 Kafka 容器内的命令目录或端口不同,再调整 KAFKA_BIN、BOOTSTRAP。

执行结束出现以下内容表示成功:

PASS: Kafka Topic 已创建/确认;脚本未删除 Topic,也未修改消费组 offset。

脚本只新增以下 5 个 Topic,不会删除 Topic,也不会修改消费组 offset:

agent-01-syslog-topic.RETRY.1M
agent-01-syslog-topic.RETRY.10M
agent-01-syslog-topic.RETRY.1H
agent-01-syslog-topic.DLT
agent-01-syslog-topic.REPLAY

4. 应用配置

syslog-consumer-rule:

SYSLOG_RAW_CONSUMER_ENABLED=true
STATS_WRITE_MODE=DIRECT
STATS_INCREMENTAL_CAPTURE_ENABLED=false
STATS_INCREMENTAL_READ_ENABLED=true
STATS_INGRESS_METADATA_ENABLED=true
SPRING_KAFKA_CONSUMER_GROUP_ID=现场原来的活动消费组

syslog-consumer:

SYSLOG_RAW_CONSUMER_ENABLED=false
STATS_WRITE_MODE=DIRECT
STATS_INCREMENTAL_CAPTURE_ENABLED=false
STATS_INCREMENTAL_PROJECTION_ENABLED=false
STATS_INCREMENTAL_READ_ENABLED=true
STATS_LEGACY_FULL_SCAN_ENABLED=false
STATS_INGRESS_METADATA_ENABLED=true

本次升级只使用 DIRECT,禁止再启用以下旧模式开关:

STATS_INCREMENTAL_CAPTURE_ENABLED=true
STATS_INCREMENTAL_PROJECTION_ENABLED=true

5. 启动和确认

按顺序启动:

  1. syslog-consumer
  2. 一台 syslog-consumer-rule 灰度实例
  3. 其余 syslog-consumer-rule 实例
  4. syslog-serve

确认 Kafka 消费延迟持续下降、达梦数据持续写入、Retry/DLT 没有异常增长后,升级完成。

如需回滚,只回滚应用 JAR 和配置;数据库新增表、字段、索引及 Kafka 新 Topic 保留,不要清库或重置 offset。