10.7.7 备份、数据修复与灾备演练
备份、数据修复与灾备演练应围绕“数据可恢复性、业务连续性、演练可验证性”展开,结合Kafka的多副本机制、外部存储与跨集群复制能力,形成可执行的运维规范。
原理草图(多副本+跨集群复制)
1. 备份策略与范围界定(含示例)
- 配置与元数据:Broker/Controller配置、ACL、安全证书、配额、主题配置。
- 日志与审计:保留变更记录、运维流水与审计日志。
- 数据层:多副本是核心保障,但跨区域容灾或合规仍需额外备份。
- 外部依赖:Kafka Connect、Schema Registry、监控系统配置同步备份。
配置与元数据备份示例(定期快照)
# 1) 备份 Broker 配置与证书
mkdir -p /backup/kafka/$(date +%F)/conf
cp -a /opt/kafka/config /backup/kafka/$(date +%F)/conf
cp -a /etc/kafka/ssl /backup/kafka/$(date +%F)/conf
# 2) 导出 Topic 配置(示例:kafka-topics.sh + kafka-configs.sh)
/opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka1:9092 --list > /backup/kafka/$(date +%F)/topics.txt
# 批量导出 Topic 配置
while read -r t; do
/opt/kafka/bin/kafka-configs.sh --bootstrap-server kafka1:9092 \
--entity-type topics --entity-name "$t" --describe \
>> /backup/kafka/$(date +%F)/topic-configs.txt
done < /backup/kafka/$(date +%F)/topics.txt
# 3) 导出 ACL
/opt/kafka/bin/kafka-acls.sh --bootstrap-server kafka1:9092 --list \
> /backup/kafka/$(date +%F)/acls.txt
2. 多副本与数据保护机制(关键参数与命令)
- 副本因子:关键业务Topic建议副本因子≥3,跨机架部署。
- ISR健康:监控ISR数量、OutOfSync副本。
- 最小ISR与acks:min.insync.replicas + acks=all。
验证副本与ISR状态
/opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka1:9092 \
--describe --topic critical_topic
# 预期:Replica 与 ISR 数量一致,避免 ISR 缩减
3. 备份手段与实施路径(含安装与配置示例)
- 跨集群复制(推荐):MirrorMaker 2 / Replicator近实时灾备。
- 冷备份:周期性将日志段归档至对象存储。
- 配置快照:定期导出Topic、ACL与配额。
MirrorMaker 2 安装与运行(Kafka发行包内置)
# 1) 准备配置文件 /opt/kafka/config/mm2.properties
cat >/opt/kafka/config/mm2.properties <<'EOF'
clusters = dc1, dc2
dc1.bootstrap.servers = kafka1:9092,kafka2:9092,kafka3:9092
dc2.bootstrap.servers = kafka4:9092,kafka5:9092
# 复制全部 Topic
dc1->dc2.enabled = true
dc1->dc2.topics = .*
dc1->dc2.emit.heartbeats.enabled = true
dc1->dc2.emit.checkpoints.enabled = true
# 同步消费者 offset
dc1->dc2.sync.group.offsets.enabled = true
# 控制并发
tasks.max = 4
EOF
# 2) 启动 MirrorMaker 2
/opt/kafka/bin/connect-mirror-maker.sh /opt/kafka/config/mm2.properties \
> /var/log/kafka/mm2.log 2>&1 &
# 预期:dc2 中出现镜像 Topic,日志无持续 ERROR
4. 数据修复与恢复流程(含命令解释)
- 副本重建:Broker损坏后通过副本自动重建;必要时重分配分区。
- 日志损坏修复:定位异常段、评估截断。
- 元数据修复:确保Controller选举正常。
分区重分配与副本修复
# 1) 生成分区重分配计划
cat > /tmp/reassign.json <<'EOF'
{
"version": 1,
"partitions": [
{"topic":"critical_topic","partition":0,"replicas":[1,2,3]},
{"topic":"critical_topic","partition":1,"replicas":[2,3,1]}
]
}
EOF
# 2) 执行重分配
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server kafka1:9092 \
--reassignment-json-file /tmp/reassign.json --execute
# 3) 查看执行状态
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server kafka1:9092 \
--reassignment-json-file /tmp/reassign.json --verify
# 预期:Reassignment completed successfully
日志段修复(定位损坏并截断)
# 1) 查看损坏日志段
/opt/kafka/bin/kafka-dump-log.sh \
--files /data/kafka/critical_topic-0/00000000000000000000.log \
--print-data-log | head -n 20
# 2) 如需截断到安全 offset
/opt/kafka/bin/kafka-delete-records.sh --bootstrap-server kafka1:9092 \
--offset-json-file <(cat <<'EOF'
{
"partitions": [
{"topic": "critical_topic", "partition": 0, "offset": 123456}
],
"version": 1
}
EOF
)
# 预期:仅保留 offset>=123456 的记录,避免损坏段传播
5. 灾备演练设计(步骤与命令)
- 演练场景:单Broker/多Broker故障、多机架断电、控制器故障、跨集群切换。
- 演练步骤:
1) 明确RPO/RTO
2) 故障注入(停机、网络隔离、磁盘故障)
3) 观察ISR恢复、消费者延迟
4) 跨集群切换测试
5) 验证数据一致性与业务恢复
故障注入与验证(示例)
# 1) 停止单个 Broker(模拟宕机)
systemctl stop kafka
# 2) 观察 ISR 是否缩减
/opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka1:9092 \
--describe --topic critical_topic
# 3) 查看消费者延迟(示例:kafka-consumer-groups)
/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server kafka1:9092 \
--describe --group critical_group
6. 灾备切换与回切策略(示例)
- 切换条件:主集群不可用超过RTO或指标持续异常。
- 切换流程:DNS/网关/客户端配置统一切换;确保Offset一致性。
- 回切策略:主集群恢复后数据补偿、延迟对齐再回切。
切换示例(客户端配置切换)
# application.properties
# 主集群不可用时切换到灾备集群
bootstrap.servers=dc2-kafka1:9092,dc2-kafka2:9092
7. 运维规范与风险控制
- 备份一致性:固定时间窗口执行备份,避免高峰IO冲突。
- 权限与审计:备份/恢复操作双人审批,记录可追溯。
- 定期验证:定期恢复演练,确保“可恢复”。
常见排错清单(快速定位)
- ISR持续缩减:检查网络、磁盘I/O、replica.lag.time.max.ms。
- MirrorMaker 2 不同步:检查连接凭证、topics规则、mm2日志。
- 重分配卡住:检查目标Broker磁盘空间与网络带宽。
- 消费者偏移不同步:确认sync.group.offsets.enabled=true。
练习题
1) 创建副本因子为3、min.insync.replicas=2的Topic,并验证ISR。
2) 配置MirrorMaker 2复制指定Topic,验证dc2数据一致性。
3) 模拟Broker宕机并完成分区重分配,记录RTO时间。
4) 执行一次日志段截断修复并评估数据完整性。