在CentOS上配置Kafka数据持久化

一准备环境

安装Java11+(Kafka4.x建议使用JDK17):

安装命令:

sudoyuminstall-yjava-11-openjdk-devel

配置环境变量(示例):

echo"exportJAVA_HOME=/usr/lib/jvm/java-11-openjdk"|sudotee-a/etc/profile

echo"exportPATH=\$PATH:\$JAVA_HOME/bin"|sudotee-a/etc/profile

source/etc/profile

创建数据与日志目录(示例):

sudomkdir-p/data/kafka-logs/var/log/kafka

sudochown-R$USER:$USER/data/kafka-logs/var/log/kafka

说明:Kafka4.1.1官方二进制包内置KRaft模式(无需单独部署ZooKeeper),以下以KRaft为例。

二二进制方式配置持久化(KRaft)

下载并解压Kafka(示例版本4.1.1):

cd/tmp&&wgethttps://downloads.apache.org/kafka/4.1.1/kafka_2.13-4.1.1.tgz

tar-xzfkafka_2.13-4.1.1.tgz&&sudomvkafka_2.13-4.1.1/opt/kafka

生成clusterId并格式化存储目录(KRaft必要步骤):

KAFKA_HOME=/opt/kafka

$KAFKA_HOME/bin/kafka-storage.shrandom-uuid
(生成clusterId)

$KAFKA_HOME/bin/kafka-storage.shformat-t-c$KAFKA_HOME/config/kraft/server.properties

编辑配置文件config/kraft/server.properties(关键持久化与存储项):

存储目录(核心):

log.dirs=/data/kafka-logs

监听与对外地址(按实际网卡IP填写):

listeners=PLAINTEXT://0.0.0.0:9092

advertised.listeners=PLAINTEXT://<你的服务器IP>:9092

日志留存策略(按容量或时间清理旧数据):

log.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按“段文件”管理日志,删除与压缩均基于段粒度执行。

启动与验证:

前台启动:

$KAFKA_HOME/bin/kafka-server-start.sh$KAFKA_HOME/config/kraft/server.properties

后台启动(建议配合systemd):

nohup$KAFKA_HOME/bin/kafka-server-start.sh$KAFKA_HOME/config/kraft/server.properties>/var/log/kafka/server.log2>&1&

验证:

$KAFKA_HOME/bin/kafka-topics.sh--bootstrap-server<你的服务器IP>:9092--list

三Docker方式配置持久化(官方镜像)

准备目录并启动(将容器内日志目录挂载到宿主机):

mkdir-p/data/kafka-logs

dockerrun-d--namekafka-p9092:9092\-eKAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092\-eKAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<你的服务器IP>:9092\-eKAFKA_KRAFT_CLUSTER_ID=\-v/data/kafka-logs:/var/lib/kafka/data\apache/kafka:4.1.1

说明:

官方镜像脚本位于容器内/opt/kafka/bin,进入容器后可用绝对路径执行CLI。

若需持久化创建topic等管理操作,请进入容器执行或挂载脚本目录。

四持久化与高可用关键参数建议

主题级复制与一致性(强烈建议生产环境使用):

replication.factor>=3

min.insync.replicas>=2

unclean.leader.election.enable=false

生产者端(应用侧保障“已提交”语义):

acks=all

retries
设置为较大的值(配合幂等或事务可进一步降低丢失风险)

说明:上述组合可在Broker/Producer协同下显著降低消息丢失概率,提升数据“持久化”的可靠性。