10.3.4 – Backup and Restore Strategies
Module: M10 – Advanced Topics & Architecture
Section: 10.3 – High Availability & Disaster Recovery
Goal: Strategies for backing up and restoring Kafka data
What to Backup
1. Message Data (Topic Partitions)
Location: /var/kafka/data/<topic>-<partition>/
Files: .log, .index, .timeindex
Size: TB-scale (largest component)
2. Cluster Metadata
ZK Mode: /var/zookeeper/data
KRaft Mode: /var/kafka/controller-logs
Size: MB-scale
3. Configuration Files
Files: server.properties, log4j.properties, custom configs
Size: KB-scale
4. Consumer Offsets
Topic: __consumer_offsets
Purpose: Resume consumers from last position
Backup Strategies
Strategy 1: Replication-Based (Recommended)
Method: Use Kafka's built-in replication (no external backups).
Config:
replication.factor = 3
min.insync.replicas = 2
Pros:
✅ Real-time replication
✅ No backup overhead
✅ Fast recovery (replicas already available)
Cons:
❌ Doesn't protect against logical errors (accidental deletion, corruption)
❌ All replicas in same cluster
Use Case: Primary HA strategy
Strategy 2: Cross-Cluster Replication
Method: MirrorMaker 2 to DR cluster.
Config:
clusters = primary, dr
primary->dr.enabled = true
topics = critical-topic-.*
Pros:
✅ Geographic redundancy
✅ Fast failover (DR cluster ready)
Cons:
❌ 2x infrastructure cost
❌ Replication lag (RPO > 0)
Use Case: Disaster recovery
Strategy 3: Snapshot to Object Storage
Method: Kafka Connect S3 Sink Connector.
Config:
{
"name": "s3-sink",
"connector.class": "io.confluent.connect.s3.S3SinkConnector",
"topics": "orders,payments",
"s3.bucket.name": "kafka-backups",
"flush.size": "1000",
"storage.class": "io.confluent.connect.s3.storage.S3Storage"
}
Pros:
✅ Long-term retention
✅ Low cost (~$0.023/GB/month)
✅ Compliance-friendly
Cons:
❌ Slow restore (hours)
❌ Not for real-time failover
Use Case: Compliance, audit logs, archival
Strategy 4: Disk-Level Snapshots
Method: EBS snapshots (AWS), disk snapshots (GCP, Azure).
Steps:
- Stop broker (or use consistent snapshot if available)
- Snapshot disk:
aws ec2 create-snapshot --volume-id vol-xxx - Resume broker
Pros:
✅ Full system backup (data + config)
✅ Fast restore (attach snapshot)
Cons:
❌ Requires broker downtime for consistent snapshot
❌ Cloud-specific
Use Case: Infrequent full backups (weekly)
Restore Strategies
Restore from Replication
Scenario: Single broker disk failure.
Steps:
- Replace disk
- Start broker
- Broker auto-syncs from partition leaders
RTO: 2-8 hours (data sync)
RPO: 0
Restore from DR Cluster
Scenario: Primary cluster lost.
Steps:
- Promote DR cluster to primary
- Update DNS/load balancer to point to DR
- Redirect producers/consumers
- Resume operations
RTO: 10-30 minutes
RPO: Replication lag (seconds to minutes)
Restore from S3
Scenario: Need historical data (months/years old).
Steps:
- Create new topic
- Use Kafka Connect S3 Source to replay from S3
- Consumers read from restored topic
RTO: Hours to days (depending on data volume)
RPO: Flush interval (minutes)
Restore from Disk Snapshot
Scenario: Full cluster loss, need fast recovery.
Steps:
- Create new volumes from snapshots
- Attach to new broker instances
- Update broker IDs/configs if needed
- Start brokers
- Verify cluster health
RTO: 1-2 hours
RPO: Snapshot age (hours to days)
Backup Automation
Backup Schedule
Daily:
- Metadata snapshot (ZK/KRaft)
- Consumer offsets backup
- Config files backup
Weekly:
- Full disk snapshots (EBS)
Continuous:
- Cross-cluster replication (MirrorMaker)
- S3 archival (Connect S3 Sink)
Backup Script Example
#!/bin/bash
# Daily metadata backup
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backups/kafka/$DATE
# Backup ZooKeeper data
tar -czf $BACKUP_DIR/zk-data.tar.gz /var/zookeeper/data
# Backup Kafka configs
tar -czf $BACKUP_DIR/kafka-config.tar.gz /etc/kafka/
# Backup consumer offsets (export topic)
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic __consumer_offsets \
--from-beginning \
--formatter kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter \
> $BACKUP_DIR/consumer-offsets.txt
# Upload to S3
aws s3 sync $BACKUP_DIR s3://kafka-backups/$DATE/
# Cleanup old backups (>30 days)
find /backups/kafka/ -mtime +30 -delete
Restore Testing
DR Drill Procedure
Goal: Validate backups work.
Steps:
- Schedule drill (quarterly minimum)
- Select restore scenario (e.g., broker failure, cluster loss)
- Execute restore from backup (follow runbook)
- Verify data integrity (produce/consume test messages)
- Measure RTO/RPO (actual vs target)
- Document issues (update runbook)
- Cleanup test environment
Success Criteria: Restore completes within RTO target, data loss within RPO target.
Key Takeaways
- Replication: Primary HA strategy (RF=3, min.insync.replicas=2).
- Cross-Cluster: DR strategy (MirrorMaker to backup region).
- S3 Archival: Long-term retention, compliance (slow restore).
- Disk Snapshots: Full system backup (infrequent, cloud-dependent).
- Backup Schedule: Daily (metadata), weekly (disk), continuous (replication).
- Test Backups: Quarterly DR drills to validate restore procedures.
- Automation: Script backups, upload to S3, cleanup old backups.
What's Next?
Next Module: 10.3.5 – RTO-RPO Modeling
References:
- MirrorMaker → 10.2.2
- Kafka Connect → M8: Kafka Connect