保姆级教程:在Ubuntu/CentOS上安装Kafka 3.9.1(Kraft模式+SASL认证)

张开发
2026/4/6 22:54:05 15 分钟阅读

分享文章

保姆级教程:在Ubuntu/CentOS上安装Kafka 3.9.1(Kraft模式+SASL认证)
跨平台Kafka 3.9.1实战部署指南Kraft模式与SASL安全认证深度配置最近在帮一家金融科技公司搭建实时风控系统时发现他们需要在Ubuntu和CentOS混合环境中部署Kafka集群。这个过程中Kraft模式带来的简化架构和SASL认证的安全保障成为了最佳选择。本文将分享我在多平台部署Kafka 3.9.1的完整实战经验特别是那些官方文档没有明确说明的细节问题。1. 环境准备与基础配置在开始安装前我们需要确保系统环境满足Kafka 3.9.1的基本要求。根据Apache Kafka官方文档3.x版本至少需要Java 11运行环境。这里有个小技巧建议使用OpenJDK而不是Oracle JDK因为前者在Linux上的兼容性更好。1.1 JDK安装与验证对于不同的Linux发行版JDK的安装命令有所区别# CentOS/RHEL系统 sudo yum install -y java-11-openjdk-devel # Ubuntu/Debian系统 sudo apt update sudo apt install -y openjdk-11-jdk安装完成后务必验证Java版本java -version注意如果系统已安装其他Java版本可以通过update-alternatives命令设置默认版本。我在CentOS 7上就遇到过默认Java 8导致的问题。1.2 系统参数优化Kafka对文件描述符数量和内存管理有较高要求建议在安装前调整以下系统参数# 修改文件描述符限制 echo * soft nofile 100000 | sudo tee -a /etc/security/limits.conf echo * hard nofile 100000 | sudo tee -a /etc/security/limits.conf # 调整内核参数 echo vm.swappiness 1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p这些优化能显著提升Kafka在高负载下的稳定性特别是在机械硬盘环境中。2. Kafka 3.9.1安装与Kraft模式配置2.1 二进制包获取与解压推荐使用国内镜像源加速下载wget https://mirrors.aliyun.com/apache/kafka/3.9.1/kafka_2.12-3.9.1.tgz tar -zxvf kafka_2.12-3.9.1.tgz -C /usr/local ln -s /usr/local/kafka_2.12-3.9.1 /usr/local/kafka创建符号链接是个好习惯方便后续版本升级时路径保持不变。2.2 Kraft模式核心配置Kraft模式是Kafka 3.0引入的重要特性它消除了对Zookeeper的依赖使架构更加简洁。配置时需要特别注意以下几点集群ID生成每个Kraft集群需要唯一ID存储目录格式化类似文件系统格式化控制器配置Kraft模式下控制器节点承担更多责任生成集群ID并格式化存储/usr/local/kafka/bin/kafka-storage.sh random-uuid # 假设生成的ID为IAtPev4fQu6b_OkrXGpciw /usr/local/kafka/bin/kafka-storage.sh format -t IAtPev4fQu6b_OkrXGpciw -c /usr/local/kafka/config/kraft/server.properties3. SASL/PLAIN认证深度配置安全是生产环境不可忽视的环节。SASL/PLAIN虽然简单但在内网环境中已经足够安全。下面是我在多个项目中验证过的配置方案。3.1 服务端认证配置首先创建JAAS认证文件vim /usr/local/kafka/config/kraft/kafka_server_jaas.conf文件内容示例KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordadmin-secret user_adminadmin-secret user_alicealice-secret; };安全提示实际生产环境中密码应该使用更复杂的组合并定期轮换。我曾经遇到过因为简单密码导致的安全事件。3.2 服务端属性配置关键的server.properties配置项# SASL配置 sasl.enabled.mechanismsPLAIN sasl.mechanism.inter.broker.protocolPLAIN security.inter.broker.protocolSASL_PLAINTEXT # 监听器配置 listenersSASL_PLAINTEXT://:9092,CONTROLLER://:9093 inter.broker.listener.nameSASL_PLAINTEXT advertised.listenersSASL_PLAINTEXT://your_server_ip:90923.3 客户端认证配置客户端需要对应的认证文件vim /usr/local/kafka/config/kraft/kafka_client_jaas.conf内容示例KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required usernamealice passwordalice-secret; };4. 服务管理与实战测试4.1 服务启动与停止启动Kafka服务/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/kraft/server.properties查看日志确认启动状态tail -f /usr/local/kafka/logs/server.log停止服务命令/usr/local/kafka/bin/kafka-server-stop.sh4.2 生产消费测试创建测试Topic/usr/local/kafka/bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --command-config /usr/local/kafka/config/kraft/client.properties \ --topic test-topic \ --partitions 3 \ --replication-factor 1启动控制台生产者/usr/local/kafka/bin/kafka-console-producer.sh \ --broker-list localhost:9092 \ --producer.config /usr/local/kafka/config/producer.properties \ --topic test-topic启动控制台消费者/usr/local/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --consumer.config /usr/local/kafka/config/consumer.properties \ --topic test-topic \ --from-beginning4.3 常见问题排查在实际部署中我遇到过几个典型问题认证失败检查JAAS文件路径和内容确保服务端和客户端配置一致端口冲突确认9092和9093端口未被占用磁盘空间不足Kafka对磁盘空间敏感至少保留20%空闲空间内存不足适当调整KAFKA_HEAP_OPTS环境变量# 内存设置示例 export KAFKA_HEAP_OPTS-Xms4G -Xmx4G5. 进阶配置与优化建议5.1 性能调优参数根据硬件配置调整以下参数# 网络线程数 num.network.threads3 # IO线程数 num.io.threads8 # 发送缓冲区 socket.send.buffer.bytes102400 # 接收缓冲区 socket.receive.buffer.bytes1024005.2 日志保留策略合理的日志保留策略能平衡存储成本和数据可用性log.retention.hours168 log.segment.bytes1073741824 log.retention.check.interval.ms3000005.3 监控与告警建议集成Prometheus和Grafana进行监控关键指标包括请求处理时间网络吞吐量磁盘使用率未同步副本数配置示例# 启用JMX监控 export JMX_PORT9999 export KAFKA_JMX_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse在完成所有配置后建议进行压力测试。我通常使用kafka-producer-perf-test.sh工具模拟生产环境负载/usr/local/kafka/bin/kafka-producer-perf-test.sh \ --topic test-topic \ --num-records 1000000 \ --record-size 1000 \ --throughput -1 \ --producer-props bootstrap.serverslocalhost:9092 \ --producer.config /usr/local/kafka/config/producer.properties

更多文章