メインコンテンツまでスキップ

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 を取得できます。

フェーズ処理内容
MirrorMirrorMaker 2 が元の database のすべての topic を mirror VM へ継続的に複製します
Backupスクリプトが mirror VM の Kafka を停止し、データディレクトリを圧縮してから再起動します
Restore選んだ archive を mirror VM に読み込み、MirrorMaker 2 で新しい Kafka service へ複製します

元の database は、どちらの方向でも停止されず、変更もされません。

前提条件​

項目要件
OSUbuntu 20.04 または 22.04
Kafka binarykafka_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 のプライベート IP10.0.1.50
<SOURCE_BOOTSTRAP>元の database の bootstrap server10.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 server10.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.propertiescontroller.quorum.voters追加オプションなし
4.0 以上 4.1.2 未満/kafka/kafka/config/kraft/server.propertiescontroller.quorum.bootstrap.servers--standalone を追加
4.1.2 以上/kafka/kafka/config/server.propertiescontroller.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

次のステップ​