温馨提示×

kafka数据持久化在centos如何配置

小樊
40
2025-11-29 21:06:37
栏目: 智能运维

在 CentOS 上配置 Kafka 数据持久化

一 准备环境

  • 安装 Java 11+(Kafka 4.x 建议使用 JDK 17):
    • 安装命令:sudo yum install -y java-11-openjdk-devel
    • 配置环境变量(示例):
      • echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" | sudo tee -a /etc/profile
      • echo "export PATH=\$PATH:\$JAVA_HOME/bin" | sudo tee -a /etc/profile
      • source /etc/profile
  • 创建数据与日志目录(示例):
    • sudo mkdir -p /data/kafka-logs /var/log/kafka
    • sudo chown -R $USER:$USER /data/kafka-logs /var/log/kafka
  • 说明:Kafka 4.1.1 官方二进制包内置 KRaft 模式(无需单独部署 ZooKeeper),以下以 KRaft 为例。

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

  • 下载并解压 Kafka(示例版本 4.1.1):
    • cd /tmp && wget https://downloads.apache.org/kafka/4.1.1/kafka_2.13-4.1.1.tgz
    • tar -xzf kafka_2.13-4.1.1.tgz && sudo mv kafka_2.13-4.1.1 /opt/kafka
  • 生成 clusterId 并格式化存储目录(KRaft 必要步骤):
    • KAFKA_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.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(键控表场景可改为 compactdelete,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.log 2>&1 &
    • 验证:$KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server <你的服务器IP>:9092 --list

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

  • 准备目录并启动(将容器内日志目录挂载到宿主机):
    • mkdir -p /data/kafka-logs
    • docker 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
    • 说明:
      • 官方镜像脚本位于容器内 /opt/kafka/bin,进入容器后可用绝对路径执行 CLI。
      • 若需持久化创建 topic 等管理操作,请进入容器执行或挂载脚本目录。

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

  • 主题级复制与一致性(强烈建议生产环境使用):
    • replication.factor >= 3
    • min.insync.replicas >= 2
    • unclean.leader.election.enable=false
  • 生产者端(应用侧保障“已提交”语义):
    • acks=all
    • retries 设置为较大的值(配合幂等或事务可进一步降低丢失风险)
  • 说明:上述组合可在 Broker/Producer 协同下显著降低消息丢失概率,提升数据“持久化”的可靠性。

0