在 CentOS 上配置 Kafka 数据持久化
一 准备环境
sudo yum install -y java-11-openjdk-develecho "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" | sudo tee -a /etc/profileecho "export PATH=\$PATH:\$JAVA_HOME/bin" | sudo tee -a /etc/profilesource /etc/profilesudo mkdir -p /data/kafka-logs /var/log/kafkasudo chown -R $USER:$USER /data/kafka-logs /var/log/kafka二 二进制方式配置持久化(KRaft)
cd /tmp && wget https://downloads.apache.org/kafka/4.1.1/kafka_2.13-4.1.1.tgztar -xzf kafka_2.13-4.1.1.tgz && sudo mv kafka_2.13-4.1.1 /opt/kafkaKAFKA_HOME=/opt/kafka$KAFKA_HOME/bin/kafka-storage.sh random-uuid(生成 clusterId)$KAFKA_HOME/bin/kafka-storage.sh format -t <clusterId> -c $KAFKA_HOME/config/kraft/server.propertieslog.dirs=/data/kafka-logslisteners=PLAINTEXT://0.0.0.0:9092advertised.listeners=PLAINTEXT://<你的服务器IP>:9092log.retention.hours=168(默认 7 天;也可用 log.retention.ms 精确到毫秒)log.retention.bytes=1073741824(示例:每个分区段上限 1GB)log.segment.bytes=104857600(示例:每 100MB 切分一个新段)log.cleanup.policy=delete(键控表场景可改为 compact 或 delete,compact)$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/kraft/server.propertiesnohup $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/kraft/server.properties >/var/log/kafka/server.log 2>&1 &$KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server <你的服务器IP>:9092 --list三 Docker 方式配置持久化(官方镜像)
mkdir -p /data/kafka-logsdocker run -d --name kafka -p 9092:9092 \ -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<你的服务器IP>:9092 \ -e KAFKA_KRAFT_CLUSTER_ID=<clusterId> \ -v /data/kafka-logs:/var/lib/kafka/data \ apache/kafka:4.1.1四 持久化与高可用关键参数建议
replication.factor >= 3min.insync.replicas >= 2unclean.leader.election.enable=falseacks=allretries 设置为较大的值(配合幂等或事务可进一步降低丢失风险)