一、环境准备与系统要求
1.1 操作系统兼容性验证
Kafka 3.6.0版本要求Ubuntu 20.04 LTS或更高版本,可通过lsb_release -a命令验证系统版本。建议使用LTS版本以获得长期支持,避免因系统更新导致的兼容性问题。
1.2 Java运行环境配置
Kafka依赖Java 11或更高版本,推荐使用OpenJDK。安装步骤如下:
# 安装OpenJDK 17sudo apt updatesudo apt install openjdk-17-jdk -y# 验证安装java -version# 应输出:openjdk version "17.0.x" 202x-xx-xx
设置JAVA_HOME环境变量,编辑~/.bashrc文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64export PATH=$PATH:$JAVA_HOME/bin
执行source ~/.bashrc使配置生效。
1.3 依赖库安装
Kafka需要Zookeeper进行元数据管理,但3.6.0版本已内置Kraft模式(无需Zookeeper)。如需传统模式,需安装:
sudo apt install zookeeperd -y
推荐使用Kraft模式简化部署,本文后续步骤均基于此模式。
二、Kafka二进制包安装与配置
2.1 下载与解压
从Apache官网获取最新稳定版(如3.6.0):
wget https://dlcdn.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgztar -xzf kafka_*.tgzmv kafka_2.13-3.6.0 /opt/kafka
2.2 Kraft模式配置
编辑/opt/kafka/config/kraft/server.properties,关键参数说明:
# 监听地址与端口listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://localhost:9092# 存储目录(需存在)log.dirs=/tmp/kafka-logs# 进程ID文件路径process.roles=brokernode.id=1controller.quorum.voters=1@localhost:9093
创建日志目录:
sudo mkdir -p /tmp/kafka-logssudo chown -R $(whoami):$(whoami) /tmp/kafka-logs
2.3 初始化集群ID(仅首次需要)
cd /opt/kafkabin/kafka-storage.sh format --cluster-id kafka-cluster-1 --config config/kraft/server.properties
注意:集群ID需全局唯一,生产环境建议通过UUID生成。
三、服务启动与验证
3.1 启动Kafka服务
# 后台启动(推荐)bin/kafka-server-start.sh -daemon config/kraft/server.properties# 前台启动(调试用)# bin/kafka-server-start.sh config/kraft/server.properties
验证进程状态:
ps aux | grep kafka# 应显示kafka-server-start.sh进程
3.2 创建测试主题
bin/kafka-topics.sh --create \--topic test-topic \--bootstrap-server localhost:9092 \--partitions 1 \--replication-factor 1
3.3 生产消费测试
启动生产者发送消息:
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092# 输入任意文本后按Ctrl+D退出
启动消费者接收消息:
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
四、运维管理操作
4.1 服务状态检查
# 检查端口监听netstat -tulnp | grep 9092# 查看日志tail -f /tmp/kafka-logs/controller.log
4.2 配置动态更新
部分参数支持动态修改,无需重启:
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-name 1 --alter --add-config num.network.threads=4
4.3 安全加固建议
- 修改默认端口(9092)
- 启用SASL认证:
# server.properties中添加sasl.enabled.mechanisms=SCRAM-SHA-256security.inter.broker.protocol=SASL_PLAINTEXT
- 创建JAAS配置文件
/opt/kafka/config/jaas.conf:KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="admin-secret";};
启动时指定配置:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"bin/kafka-server-start.sh config/kraft/server.properties
五、常见问题解决方案
5.1 端口冲突处理
若9092端口被占用,修改server.properties中的listeners和advertised.listeners参数,例如:
listeners=PLAINTEXT://:9093advertised.listeners=PLAINTEXT://localhost:9093
5.2 日志目录权限错误
出现Permission denied时,确保运行用户对日志目录有读写权限:
sudo chown -R $(whoami):$(whoami) /tmp/kafka-logs
5.3 内存不足优化
默认JVM堆内存为1GB,如需调整编辑bin/kafka-server-start.sh:
export KAFKA_HEAP_OPTS="-Xms512m -Xmx1g"
生产环境建议根据服务器配置调整至4-8GB。
六、升级与维护
6.1 版本升级流程
- 停止服务:
bin/kafka-server-stop.sh
- 备份配置文件和数据目录
- 下载新版本并解压
- 迁移配置文件
- 启动新版本服务
6.2 监控指标收集
启用JMX监控(端口9999):
# server.properties中添加jmx.port=9999
使用Prometheus+Grafana监控方案:
wget https://github.com/prometheus/jmx_exporter/releases/download/v0.18.0/jmx_prometheus_javaagent-0.18.0.jar# 创建配置文件kafka-metrics.yml# 启动时添加参数:export KAFKA_OPTS="-javaagent:/path/to/jmx_prometheus_javaagent-0.18.0.jar=9999:/path/to/kafka-metrics.yml"
通过以上步骤,您已在Ubuntu系统上成功部署了单机版Kafka服务。该配置适用于开发测试环境,生产环境需考虑集群部署、高可用配置及更严格的安全策略。建议定期备份元数据(/tmp/kafka-logs/meta.properties)并监控磁盘空间使用情况。