Kafka の手動 backup と restore
プラットフォームの backup は 2026年9月15日に Kafka から削除されたため、Kafka のデータ保護はお客様自身の運用になりました。このページでは専用の mirror VM を用意し、MirrorMaker 2 で topic を継続的に複製し、定期的に snapshot を取得して、選んだ snapshot を新しい Kafka service へ restore します。
Kafka の database に Backup タブは表示されなくなり、その日より前にあった backup ファイルも削除されています。変更点は Backup と restore の概要 を参照してください。
仕組み
mirror VM はお客様が保有する通常の VM で、single node の Kafka と MirrorMaker 2 を動かします。topic の生きた複製を保持するため、元の database を止めずに一貫性のある snapshot を取得できます。
| フェーズ | 処理内容 |
|---|---|
| Mirror | MirrorMaker 2 が元の database のすべての topic を mirror VM へ継続的に複製します |
| Backup | スクリプトが mirror VM の Kafka を停止し、データディレクトリを圧縮してから再起動します |
| Restore | 選んだ archive を mirror VM に読み込み、MirrorMaker 2 で新しい Kafka service へ複製します |
元の database は、どちらの方向でも停止されず、変更もされません。
前提条件
| 項目 | 要件 |
|---|---|
| OS | Ubuntu 20.04 または 22.04 |
| Kafka binary | kafka_2.13-<KAFKA_VERSION>.tgz。元の database のバージョンと一致するか互換性があること |
| ディスク | 2 本: OS 用とデータ用 |
| ネットワーク | mirror VM から元の database へ port 9092 で到達できること |
MirrorMaker 2 は Kafka 2.4.0 以降に同梱されているため、別途インストールするものはありません。
このページで使う placeholder
| Placeholder | 意味 | 例 |
|---|---|---|
<KAFKA_VERSION> | インストールする Kafka のバージョン | 3.8.0 または 4.1.2 |
<BACKUP_VM_IP> | mirror VM のプライベート IP | 10.0.1.50 |
<SOURCE_BOOTSTRAP> | 元の database の bootstrap server | 10.0.0.1:9092,10.0.0.2:9092 |
<SOURCE_ADMIN_USER> | 元の database の admin ユーザー名 | admin |
<SOURCE_ADMIN_PASS> | 元の database の admin パスワード | — |
<BACKUP_ADMIN_PASS> | mirror VM に設定する admin パスワード | — |
<RESTORE_BOOTSTRAP> | 新しい Kafka service の bootstrap server | 10.0.2.10:9092,10.0.2.11:9092 |
<RESTORE_ADMIN_USER> | 新しい Kafka service の admin ユーザー名 | admin |
<RESTORE_ADMIN_PASS> | 新しい Kafka service の admin パスワード | — |
<JAVA_HEAP_GB> | JVM heap サイズ (GB) | 4 |
<DISK_DEVICE> | データディスクのデバイス名 | VMware は /dev/sdb、OpenStack は /dev/vdb |
<CONFIG_PATH> | Kafka の設定ファイル。バージョンによって場所が変わります | 下表を参照 |
設定ファイルの場所と controller quorum の設定は、Kafka のバージョンによって変わります。
| Kafka バージョン | <CONFIG_PATH> | controller quorum の設定 | format コマンド |
|---|---|---|---|
| 4.0 未満 | /kafka/kafka/config/kraft/server.properties | controller.quorum.voters | 追加オプションなし |
| 4.0 以上 4.1.2 未満 | /kafka/kafka/config/kraft/server.properties | controller.quorum.bootstrap.servers | --standalone を追加 |
| 4.1.2 以上 | /kafka/kafka/config/server.properties | controller.quorum.bootstrap.servers | --standalone を追加 |
Part 1 — mirror VM に Kafka をインストールする
システムを準備する
# Update system packages
apt update -y
# Install Java (required by Kafka)
apt install -y default-jdk
# Verify Java installation
java -version
# Create Kafka system user and group
groupadd kafka
useradd -g kafka -s /bin/bash kafka
# Create base directories
mkdir -p /kafka
データディスクを準備する
<DISK_DEVICE> は基盤に合わせて置き換えてください。VMware は /dev/sdb、OpenStack は /dev/vdb です。
# Partition the disk
parted <DISK_DEVICE> --script mklabel gpt
parted <DISK_DEVICE> --script mkpart primary 0% 100%
parted <DISK_DEVICE> --script set 1 lvm on
# Create LVM
pvcreate <DISK_DEVICE>1
vgcreate vg_data <DISK_DEVICE>1
lvcreate -l 100%FREE -n lv_data vg_data
# Format and mount
mkfs.xfs /dev/vg_data/lv_data
mkdir -p /data
mount /dev/vg_data/lv_data /data
# Persist mount across reboots
echo "/dev/mapper/vg_data-lv_data /data xfs users,noatime,auto,rw,nodev,exec,nosuid 0 0" >> /etc/fstab
# Set ownership
chown -R kafka:kafka /data
Kafka binary をインストールする
Kafka のパッケージを VM にコピーしてから展開します。
# Copy the Kafka binary package to the VM, then extract it
tar -xzf kafka_2.13-<KAFKA_VERSION>.tgz -C /kafka/
mv /kafka/kafka_2.13-<KAFKA_VERSION> /kafka/kafka
# Set ownership
chown -R kafka:kafka /kafka
Kafka の service を作成する
cat > /lib/systemd/system/kafka.service << 'EOF'
[Unit]
Description=Apache Kafka
After=syslog.target network.target
[Service]
Type=simple
User=kafka
ExecStart=/kafka/kafka/bin/kafka-server-start.sh <CONFIG_PATH>
ExecStop=/kafka/kafka/bin/kafka-server-stop.sh
TimeoutStopSec=180
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
実行する前に、上表から自分のバージョンに合う <CONFIG_PATH> に置き換えてください。
Kafka の設定を書く
single node の KRaft モードとして、基本の設定を作成します。
# Create the config (single-node, KRaft mode)
# Replace <BACKUP_VM_IP> and <BACKUP_ADMIN_PASS> with actual values
cat > <CONFIG_PATH> << EOF
############################# KRaft Mode - Single Node #############################
process.roles=broker,controller
node.id=1
listener.security.protocol.map=CONTROLLER:SASL_PLAINTEXT,PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT
listeners=PLAINTEXT://localhost:9091,CONTROLLER://0.0.0.0:9094,SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://localhost:9091,SASL_PLAINTEXT://<BACKUP_VM_IP>:9092
inter.broker.listener.name=SASL_PLAINTEXT
############################# Controller #############################
EOF
続いて、バージョンに合う controller quorum の設定を追記します。
Kafka 4.0 未満の場合:
cat >> <CONFIG_PATH> << EOF
controller.quorum.voters=1@<BACKUP_VM_IP>:9094
EOF
Kafka 4.0 以上の場合:
cat >> <CONFIG_PATH> << EOF
controller.quorum.bootstrap.servers=<BACKUP_VM_IP>:9094
EOF
最後に、すべてのバージョンで共通の残りを追記します。
cat >> <CONFIG_PATH> << EOF
controller.listener.names=CONTROLLER
############################# SASL Authentication #############################
sasl.mechanism.controller.protocol=PLAIN
listener.name.controller.sasl.enabled.mechanisms=PLAIN
listener.name.controller.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="<BACKUP_ADMIN_PASS>" \
user_admin="<BACKUP_ADMIN_PASS>";
listener.name.sasl_plaintext.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="<BACKUP_ADMIN_PASS>" \
user_admin="<BACKUP_ADMIN_PASS>";
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
############################# ACL #############################
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
############################# Storage & Log #############################
log.dirs=/data/kafka/combine-logs
num.partitions=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
default.replication.factor=1
log.retention.hours=168
log.retention.bytes=-1
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
############################# Network #############################
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
EOF
JVM heap を設定する
VM の RAM のおよそ 25%、最小 2 GB、最大 24 GB を目安にします。
# Set heap size (adjust <JAVA_HEAP_GB> based on available RAM)
sed -i 's/export KAFKA_HEAP_OPTS="-Xmx[0-9]*G -Xms[0-9]*G"/export KAFKA_HEAP_OPTS="-Xmx<JAVA_HEAP_GB>G -Xms<JAVA_HEAP_GB>G"/' \
/kafka/kafka/bin/kafka-server-start.sh
storage を format して Kafka を起動する
mirror VM 用の cluster ID を生成します。これは元の database の ID とは無関係です。
CLUSTER_ID=$(/kafka/kafka/bin/kafka-storage.sh random-uuid)
echo "Cluster ID: $CLUSTER_ID"
storage を format します。Kafka 4.0 未満の場合:
/kafka/kafka/bin/kafka-storage.sh format \
-t $CLUSTER_ID \
-c <CONFIG_PATH>
Kafka 4.0 以上の場合:
/kafka/kafka/bin/kafka-storage.sh format \
-t $CLUSTER_ID \
-c <CONFIG_PATH> \
--standalone
続いて service を起動します。
chown -R kafka:kafka /data
systemctl enable kafka
systemctl start kafka
# Verify Kafka is listening
ss -tlnp | grep 9092
Kafka が動作していることを確認する
CLI 用の認証情報ファイルを作り、使い捨ての topic を作成してから削除します。
# Create admin.properties for CLI access
cat > /kafka/kafka/config/kraft/admin.properties << EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="<BACKUP_ADMIN_PASS>";
EOF
# Create a test topic to confirm Kafka is operational
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <BACKUP_VM_IP>:9092 \
--command-config /kafka/kafka/config/kraft/admin.properties \
--create \
--topic test-connectivity \
--partitions 1 \
--replication-factor 1
# List topics
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <BACKUP_VM_IP>:9092 \
--command-config /kafka/kafka/config/kraft/admin.properties \
--list
# Delete test topic
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <BACKUP_VM_IP>:9092 \
--command-config /kafka/kafka/config/kraft/admin.properties \
--delete \
--topic test-connectivity
Part 2 — MirrorMaker 2 を設定する
MirrorMaker 2 は元の database から mirror VM へ topic を複製します。以下の設定では IdentityReplicationPolicy を使い、prefix を付けずに元の topic 名をそのまま保ちます。snapshot が忠実な複製になるのは、この設定によるものです。
MirrorMaker 2 の設定を書く
cat > /kafka/kafka/config/kraft/mm2.properties << EOF
# Cluster identifiers
clusters = source, target
# Source cluster (existing Kafka service)
source.bootstrap.servers = <SOURCE_BOOTSTRAP>
source.security.protocol = SASL_PLAINTEXT
source.sasl.mechanism = PLAIN
source.sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required \
username="<SOURCE_ADMIN_USER>" \
password="<SOURCE_ADMIN_PASS>";
# Target cluster (mirror VM)
target.bootstrap.servers = <BACKUP_VM_IP>:9092
target.security.protocol = SASL_PLAINTEXT
target.sasl.mechanism = PLAIN
target.sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="<BACKUP_ADMIN_PASS>";
# Replication direction: source -> target
source->target.enabled = true
source->target.topics = .*
source->target.emit.checkpoints.enabled = false
source->target.sync.topic.acls.enabled = false
# Keep original topic names (no prefix added)
replication.policy.class = org.apache.kafka.connect.mirror.IdentityReplicationPolicy
# Internal topic replication factors (set to 1 for single-node mirror)
offset-syncs.topic.replication.factor = 1
heartbeats.topic.replication.factor = 1
checkpoints.topic.replication.factor = 1
mm2-offsets.topic.replication.factor = 1
config.storage.replication.factor = 1
status.storage.replication.factor = 1
offset.storage.replication.factor = 1
replication.policy.separator = .
replication.factor = 1
EOF
chown kafka:kafka /kafka/kafka/config/kraft/mm2.properties
source->target.topics = .* はすべての topic を複製します。特定の topic だけを mirror する場合は、.* をカンマ区切りのリストか正規表現に置き換えてください。たとえば orders,payments,user-events のように指定します。
MirrorMaker 2 の service を作成する
cat > /lib/systemd/system/kafka-mirror-maker.service << 'EOF'
[Unit]
Description=Kafka MirrorMaker 2 Service
After=network.target kafka.service
[Service]
Type=simple
User=kafka
ExecStart=/kafka/kafka/bin/connect-mirror-maker.sh /kafka/kafka/config/kraft/mm2.properties
StandardOutput=append:/kafka/kafka/logs/mm2.log
StandardError=append:/kafka/kafka/logs/mm2.log
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
MirrorMaker 2 のログをローテーションする
MirrorMaker 2 はログを出し続けるため、ローテーションしないとディスクを使い切ります。
cat > /etc/logrotate.d/mm2 << 'EOF'
/kafka/kafka/logs/mm2.log {
maxsize 100M
copytruncate
rotate 2
delaycompress
compress
notifempty
missingok
su root root
}
EOF
# Run logrotate every 15 minutes
crontab -l 2>/dev/null | { cat; echo "15 * * * * /usr/sbin/logrotate /etc/logrotate.d/mm2"; } | crontab -
複製を開始して確認する
systemctl enable kafka-mirror-maker
systemctl start kafka-mirror-maker
# Check service status
systemctl status kafka-mirror-maker
# Monitor MM2 logs
tail -f /kafka/kafka/logs/mm2.log
数分待ってから mirror VM の topic 一覧を確認します。prefix が付かず、元の database と一致しているはずです。
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <BACKUP_VM_IP>:9092 \
--command-config /kafka/kafka/config/kraft/admin.properties \
--list
Part 3 — backup を取得する
backup は、mirror VM のデータディレクトリをある時点で固めた archive です。スクリプトは先に MirrorMaker 2 と Kafka を停止して archive の内部整合性を保ち、その後で両方を起動し直します。
backup スクリプトを作成する
cat > /usr/local/bin/kafka-backup.sh << 'SCRIPT'
#!/bin/bash
set -e
KAFKA_DATA_DIR=/data/kafka/combine-logs
BACKUP_DIR=/backup/kafka
TIMESTAMP=$(date +%F_%H-%M-%S)
BACKUP_FILE=${BACKUP_DIR}/kafka-backup-${TIMESTAMP}.tar.gz
LOCKFILE=/tmp/kafka-backup.lock
# Prevent concurrent runs
if [ -f "$LOCKFILE" ]; then
echo "ERROR: Another backup is already running (lock file: $LOCKFILE). Exiting."
exit 1
fi
touch "$LOCKFILE"
cleanup() {
rm -f "$LOCKFILE"
}
trap cleanup EXIT
mkdir -p "$BACKUP_DIR"
echo "[$(date)] Starting Kafka backup..."
# Step 1: Stop MirrorMaker 2 to freeze incoming replication
echo "[$(date)] Stopping MirrorMaker 2..."
systemctl stop kafka-mirror-maker
# Step 2: Stop Kafka to ensure data consistency
echo "[$(date)] Stopping Kafka..."
systemctl stop kafka
# Step 3: Create compressed archive of the data directory
echo "[$(date)] Creating archive: $BACKUP_FILE"
tar -czf "$BACKUP_FILE" -C / data/kafka/combine-logs
echo "[$(date)] Backup size: $(du -sh $BACKUP_FILE | cut -f1)"
# Step 4: Restart Kafka
echo "[$(date)] Starting Kafka..."
systemctl start kafka
sleep 10
# Step 5: Restart MirrorMaker 2
echo "[$(date)] Starting MirrorMaker 2..."
systemctl start kafka-mirror-maker
echo "[$(date)] Backup completed successfully: $BACKUP_FILE"
SCRIPT
chmod +x /usr/local/bin/kafka-backup.sh
手動またはスケジュールで実行する
すぐに backup を取得する場合:
/usr/local/bin/kafka-backup.sh
毎日 02:00 に backup を実行し、7 日より古い archive を削除する設定:
crontab -l 2>/dev/null | { cat; echo "0 2 * * * /usr/local/bin/kafka-backup.sh >> /var/log/kafka-backup.log 2>&1"; } | crontab -
crontab -l 2>/dev/null | { cat; echo "30 2 * * * find /backup/kafka -name 'kafka-backup-*.tar.gz' -mtime +7 -delete"; } | crontab -
保持期間を変えるときは -mtime +7 の日数を変更します。
取得済みの backup を確認する
ls -lh /backup/kafka/
# Example output:
-rw-r--r-- 1 root root 2.3G 2026-04-10_02-00-01 kafka-backup-2026-04-10_02-00-01.tar.gz
-rw-r--r-- 1 root root 2.4G 2026-04-11_02-00-02 kafka-backup-2026-04-11_02-00-02.tar.gz
-rw-r--r-- 1 root root 2.4G 2026-04-12_02-00-01 kafka-backup-2026-04-12_02-00-01.tar.gz
Part 4 — 新しい Kafka service へ restore する
restore は 3 つのフェーズに分かれます。選んだ archive を mirror VM に読み込み、新しい Kafka service へ複製し、最後に mirror VM を通常の役割へ戻します。
その間、元の database からの mirror job は停止します。元の database 自体には何も行いません。
フェーズ 1 — archive を mirror VM に読み込む
使用する archive を選び、両方の service を停止します。
# List available backups
ls -lh /backup/kafka/
# Set the target backup filename
BACKUP_FILE=kafka-backup-<TIMESTAMP>.tar.gz
systemctl stop kafka-mirror-maker
systemctl stop kafka
次のコマンドは mirror VM の現在のデータを完全に削除し、archive の内容で置き換えます。取り消しはできません。実行する前に、選んだ時刻が正しいことを確認してください。
# Remove current data
rm -rf /data/kafka/combine-logs
# Extract the selected backup archive
tar -C /data -xzf /backup/kafka/$BACKUP_FILE --strip-components 1
# Fix ownership
chown -R kafka:kafka /data
systemctl start kafka
ss -tlnp | grep 9092
これで mirror VM は、選んだ時刻のデータをそのまま提供します。
フェーズ 2 — 新しい service へ複製する
portal で新しい Kafka service を作成し、bootstrap server、admin ユーザー名、admin パスワードを控えます。database の作成 を参照してください。
2 つ目の MirrorMaker 2 設定を、今度は mirror VM から新しい service 向けに作成します。
cat > /kafka/kafka/config/kraft/mm2-restore.properties << EOF
# Cluster identifiers
clusters = source, target
# Source cluster (mirror VM holding the point-in-time snapshot)
source.bootstrap.servers = <BACKUP_VM_IP>:9092
source.security.protocol = SASL_PLAINTEXT
source.sasl.mechanism = PLAIN
source.sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="<BACKUP_ADMIN_PASS>";
# Target cluster (new Kafka service)
target.bootstrap.servers = <RESTORE_BOOTSTRAP>
target.security.protocol = SASL_PLAINTEXT
target.sasl.mechanism = PLAIN
target.sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required \
username="<RESTORE_ADMIN_USER>" \
password="<RESTORE_ADMIN_PASS>";
# Replication direction: source -> target
source->target.enabled = true
source->target.topics = .*
source->target.emit.checkpoints.enabled = false
source->target.sync.topic.acls.enabled = false
# Keep original topic names (no prefix added)
replication.policy.class = org.apache.kafka.connect.mirror.IdentityReplicationPolicy
# Replication factor = 1 (single-node mirror VM)
offset-syncs.topic.replication.factor = 1
heartbeats.topic.replication.factor = 1
checkpoints.topic.replication.factor = 1
mm2-offsets.topic.replication.factor = 1
config.storage.replication.factor = 1
status.storage.replication.factor = 1
offset.storage.replication.factor = 1
replication.policy.separator = .
replication.factor = 1
EOF
chown kafka:kafka /kafka/kafka/config/kraft/mm2-restore.properties
その service を作成して起動します。
cat > /lib/systemd/system/kafka-mirror-maker-restore.service << 'EOF'
[Unit]
Description=Kafka MirrorMaker 2 Restore Service
After=network.target kafka.service
[Service]
Type=simple
User=kafka
ExecStart=/kafka/kafka/bin/connect-mirror-maker.sh /kafka/kafka/config/kraft/mm2-restore.properties
StandardOutput=append:/kafka/kafka/logs/mm2-restore.log
StandardError=append:/kafka/kafka/logs/mm2-restore.log
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start kafka-mirror-maker-restore
# Monitor progress
tail -f /kafka/kafka/logs/mm2-restore.log
新しい service に topic が届いたか確認します。
cat > /kafka/kafka/config/kraft/restore-admin.properties << EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="<RESTORE_ADMIN_USER>" \
password="<RESTORE_ADMIN_PASS>";
EOF
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <RESTORE_BOOTSTRAP> \
--command-config /kafka/kafka/config/kraft/restore-admin.properties \
--list
一覧は archive の内容と一致するはずです。一致したら restore の job を停止します。
systemctl stop kafka-mirror-maker-restore
systemctl disable kafka-mirror-maker-restore
フェーズ 3 — mirror VM を通常状態に戻す
snapshot を消し、新しい cluster ID で storage を format し直してから、mirror を再開します。
systemctl stop kafka
rm -rf /data/kafka/combine-logs
CLUSTER_ID=$(/kafka/kafka/bin/kafka-storage.sh random-uuid)
echo "Cluster ID: $CLUSTER_ID"
/kafka/kafka/bin/kafka-storage.sh format \
-t $CLUSTER_ID \
-c <CONFIG_PATH>
/kafka/kafka/bin/kafka-storage.sh format \
-t $CLUSTER_ID \
-c <CONFIG_PATH> \
--standalone
Part 1 と同じく、自分のバージョンに合う format コマンドを実行してから、次を行います。
chown -R kafka:kafka /data
systemctl start kafka
sleep 10
systemctl start kafka-mirror-maker
MirrorMaker 2 が元の database から再同期を始め、スケジュールされた backup も自動的に再開します。
トラブルシューティング
MirrorMaker 2 が複製しない
ログを確認し、mirror VM から元の database へ実際に到達できるかを確かめます。
# Check MM2 logs for errors
tail -100 /kafka/kafka/logs/mm2.log | grep -i error
# Create source-admin.properties
cat > /kafka/kafka/config/kraft/source-admin.properties << EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="<SOURCE_ADMIN_USER>" \
password="<SOURCE_ADMIN_PASS>";
EOF
# Verify connectivity to the source cluster
/kafka/kafka/bin/kafka-topics.sh \
--bootstrap-server <SOURCE_BOOTSTRAP> \
--command-config /kafka/kafka/config/kraft/source-admin.properties \
--list
restore 後に Kafka が起動しない
よくある原因は、展開時にディレクトリが 1 階層深くなっていることです。/data/kafka/combine-logs/ の直下には partition のディレクトリが並ぶはずで、もう一つの combine-logs があってはいけません。
ls -la /data/kafka/combine-logs/
# Should show partition directories, not a nested combine-logs folder
# Check Kafka logs
journalctl -u kafka -n 50
backup スクリプトが途中で止まった
Kafka と MirrorMaker 2 が停止したままで、lock ファイルも残っている可能性があります。起動し直してから削除してください。
systemctl start kafka
sleep 10
systemctl start kafka-mirror-maker
# Remove the stale lock file if present
rm -f /tmp/kafka-backup.lock
次のステップ
- Backup と restore の概要。プラットフォームの backup が残っている engine を確認できます
- database バージョンのアップグレード。Kafka を新しいバージョンへ移す前に snapshot が必要な場合はこちらです
- RabbitMQ の手動 backup と restore。RabbitMQ も運用している場合、手順がまったく異なります