Bare Metal Installation
Install OSO Kafka Backup directly on Linux servers or virtual machines.
Prerequisites
- Linux (x86_64 or ARM64) or macOS
- Network access to Kafka brokers
- Storage space for backups (local or mounted)
Download
Linux (x86_64)
# Download latest release
curl -L -o kafka-backup.tar.gz \
https://github.com/osodevops/kafka-backup/releases/latest/download/kafka-backup-linux-amd64.tar.gz
# Extract
tar xzf kafka-backup.tar.gz
# Move to PATH
sudo mv kafka-backup /usr/local/bin/
# Verify installation
kafka-backup --version
Linux (ARM64)
curl -L -o kafka-backup.tar.gz \
https://github.com/osodevops/kafka-backup/releases/latest/download/kafka-backup-linux-arm64.tar.gz
tar xzf kafka-backup.tar.gz
sudo mv kafka-backup /usr/local/bin/
macOS
# Intel Mac
curl -L -o kafka-backup.tar.gz \
https://github.com/osodevops/kafka-backup/releases/latest/download/kafka-backup-darwin-amd64.tar.gz
# Apple Silicon (M1/M2)
curl -L -o kafka-backup.tar.gz \
https://github.com/osodevops/kafka-backup/releases/latest/download/kafka-backup-darwin-arm64.tar.gz
tar xzf kafka-backup.tar.gz
sudo mv kafka-backup /usr/local/bin/
Directory Setup
Create directories for configuration and data:
# Create directories
sudo mkdir -p /etc/kafka-backup
sudo mkdir -p /var/lib/kafka-backup/data
sudo mkdir -p /var/log/kafka-backup
# Set permissions (create dedicated user)
sudo useradd -r -s /bin/false kafka-backup
sudo chown -R kafka-backup:kafka-backup /var/lib/kafka-backup
sudo chown -R kafka-backup:kafka-backup /var/log/kafka-backup
Configuration
Create a backup configuration file:
sudo tee /etc/kafka-backup/backup.yaml << 'EOF'
mode: backup
backup_id: "daily-backup"
source:
bootstrap_servers:
- kafka-1.example.com:9092
- kafka-2.example.com:9092
- kafka-3.example.com:9092
topics:
include:
- "*"
exclude:
- "__consumer_offsets"
- "_schemas"
storage:
backend: filesystem
path: "/var/lib/kafka-backup/data"
backup:
compression: zstd
compression_level: 3
checkpoint_interval_secs: 30
include_offset_headers: true
EOF
Running Manually
# Run as the kafka-backup user
sudo -u kafka-backup kafka-backup backup --config /etc/kafka-backup/backup.yaml
# With verbose logging
sudo -u kafka-backup kafka-backup -v backup --config /etc/kafka-backup/backup.yaml
Systemd Service
Create a systemd service for automated backups:
sudo tee /etc/systemd/system/kafka-backup.service << 'EOF'
[Unit]
Description=OSO Kafka Backup Service
After=network.target
[Service]
Type=oneshot
User=kafka-backup
Group=kafka-backup
ExecStart=/usr/local/bin/kafka-backup backup --config /etc/kafka-backup/backup.yaml
StandardOutput=append:/var/log/kafka-backup/backup.log
StandardError=append:/var/log/kafka-backup/backup.log
# Security hardening
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/kafka-backup /var/log/kafka-backup
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
EOF
Scheduled Backups with Systemd Timer
Create a timer for scheduled execution:
sudo tee /etc/systemd/system/kafka-backup.timer << 'EOF'
[Unit]
Description=Run Kafka Backup daily at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=300
[Install]
WantedBy=timers.target
EOF
Enable and start the timer:
sudo systemctl daemon-reload
sudo systemctl enable kafka-backup.timer
sudo systemctl start kafka-backup.timer
# Check timer status
sudo systemctl list-timers kafka-backup.timer
Scheduled Backups with Cron
Alternative to systemd timer:
# Edit crontab for kafka-backup user
sudo -u kafka-backup crontab -e
# Add daily backup at 2 AM
0 2 * * * /usr/local/bin/kafka-backup backup --config /etc/kafka-backup/backup.yaml >> /var/log/kafka-backup/backup.log 2>&1
Log Rotation
Configure log rotation:
sudo tee /etc/logrotate.d/kafka-backup << 'EOF'
/var/log/kafka-backup/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 kafka-backup kafka-backup
}
EOF
Monitoring
Check Backup Status
# List backups
kafka-backup list --path /var/lib/kafka-backup/data
# Describe latest backup
kafka-backup describe --path /var/lib/kafka-backup/data --backup-id daily-backup
# Validate backup integrity
kafka-backup validate --path /var/lib/kafka-backup/data --backup-id daily-backup
Log Monitoring
# Follow backup logs
tail -f /var/log/kafka-backup/backup.log
# Check for errors
grep -i error /var/log/kafka-backup/backup.log
Disk Space Monitoring
# Check backup storage usage
du -sh /var/lib/kafka-backup/data/*
# Monitor with df
df -h /var/lib/kafka-backup
NFS/Mounted Storage
For shared or network storage:
# Mount NFS volume
sudo mount -t nfs nfs-server:/kafka-backups /var/lib/kafka-backup/data
# Add to /etc/fstab for persistence
echo "nfs-server:/kafka-backups /var/lib/kafka-backup/data nfs defaults 0 0" | sudo tee -a /etc/fstab
# Update configuration
storage:
backend: filesystem
path: "/var/lib/kafka-backup/data"
S3 Storage (Instead of Local)
For cloud storage:
# Set AWS credentials
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_REGION="us-west-2"
# Or use instance profile (recommended)
# No credentials needed if running on EC2 with IAM role
Update configuration:
storage:
backend: s3
bucket: my-kafka-backups
region: us-west-2
prefix: production/daily
Backup Rotation Script
Create a script to manage backup retention:
sudo tee /usr/local/bin/kafka-backup-rotate << 'EOF'
#!/bin/bash
BACKUP_PATH="/var/lib/kafka-backup/data"
RETENTION_DAYS=30
# List backups older than retention period
find "$BACKUP_PATH" -maxdepth 1 -type d -mtime +$RETENTION_DAYS -name "backup-*" | while read dir; do
echo "Removing old backup: $dir"
rm -rf "$dir"
done
# Log disk usage
echo "Current disk usage:"
du -sh "$BACKUP_PATH"/*
EOF
chmod +x /usr/local/bin/kafka-backup-rotate
# Add to cron (run daily at 3 AM)
echo "0 3 * * * /usr/local/bin/kafka-backup-rotate >> /var/log/kafka-backup/rotation.log 2>&1" | sudo -u kafka-backup crontab -
Troubleshooting
Permission Denied
# Check file ownership
ls -la /var/lib/kafka-backup/
# Fix permissions
sudo chown -R kafka-backup:kafka-backup /var/lib/kafka-backup/
Connection Refused
# Test Kafka connectivity
nc -zv kafka-1.example.com 9092
# Check firewall
sudo iptables -L -n | grep 9092
Out of Disk Space
# Check disk usage
df -h /var/lib/kafka-backup
# Find large backups
du -sh /var/lib/kafka-backup/data/*
# Remove old backups
kafka-backup list --path /var/lib/kafka-backup/data
rm -rf /var/lib/kafka-backup/data/old-backup-001
Next Steps
- Configuration Reference - All configuration options
- Security Setup - TLS and SASL configuration
- Performance Tuning - Optimize backup speed