在 Ubuntu 上,Kafka 的数据持久化由“磁盘落盘 + 多副本 + 日志留存策略”共同保障。下面给出可直接落地的配置与验证步骤。
一、核心原理与关键配置
- 磁盘落盘与目录:通过配置 log.dirs 指定持久化目录(建议使用独立磁盘或高性能存储),Kafka 将消息写入日志段文件并在检查点进行刷盘。
- 多副本容错:主题 replication.factor ≥ 3、min.insync.replicas ≥ 2,确保即使单节点故障数据仍可从 ISR 副本读取/恢复。
- 日志留存与清理:通过 log.retention.ms / log.retention.hours / log.retention.bytes 控制保留时长与容量上限;log.segment.bytes 控制段文件大小;log.cleanup.policy=delete|compact|delete,compact 决定过期数据删除或键级压缩策略。
- 可靠性语义:生产者 acks=all、重试与幂等/事务可进一步提升端到端不丢数据能力(与持久化相辅相成)。
以上参数与行为是 Kafka 实现数据持久化的关键。
二、Ubuntu 上的两种部署与持久化落地
三、主题与副本配置建议
- 创建高可用主题(示例):
bin/kafka-topics.sh --create --topic my_topic --partitions 3 --replication-factor 3 --bootstrap-server 你的IP:9092
- 生产环境建议:
- replication.factor=3、min.insync.replicas=2,保证在节点故障下仍满足写入可用性(acks=all 时)。
- 单节点或测试环境可将副本因子设为 1(不具容错)。
四、持久化与备份的运维要点
- 日志留存与段管理
- 保留策略:同时支持按时间与按大小清理,优先级为 ms > minutes > hours;例如 log.retention.ms=86400000 表示保留 24 小时。
- 段与清理:通过 log.segment.bytes 控制段滚动;log.cleanup.policy=delete 按时间/大小删除,compact 做键级压缩(适合变更日志/状态存储)。
- 备份与容灾
- 备份思路:Kafka 并非传统数据库,常用“复制机制 + 外部备份”。
- 工具与方法:
- 全量导出:kafka-console-consumer.sh 将主题数据导出到文件(适合小规模/一次性)。
- 增量/跨集群:使用 MirrorMaker 或 Confluent 的 kafka-backup 工具做跨集群镜像与增量备份。
- 跨区域容灾:通过跨数据中心镜像 Topic 实现备份与灾备。
- 操作建议:备份前先备份配置文件与元数据;恢复时按工具指引执行,必要时短暂停写以保证一致性。
五、快速验证
- 生产消息:
bin/kafka-console-producer.sh --topic my_topic --bootstrap-server 你的IP:9092
- 消费消息(从最早开始):
bin/kafka-console-consumer.sh --topic my_topic --from-beginning --bootstrap-server 你的IP:9092
若能稳定生产/消费且重启后仍能读取历史消息,即表明磁盘持久化与副本机制生效。