Ubuntu 24.04 安装 Kafka_2.13-4.2.0 (最新版,无 Zookeeper) KRaft
Ps:我们考虑 KRaft 模式 , 后期用
- 安装前准备
apt update
apt install openjdk-17-jdk -y
cd /opt/
mkdir kafka
cd /tmp/
mkdir kraft-combined-logs
- 更新系统软件包
sudo apt update && sudo apt upgrade -y
- 安装Java运行环境(Kafka依赖Java 8+)
sudo apt install openjdk-17-jdk -y
- 验证Java安装
java -version
输出应显示Java 17.x版本信息
二、下载Kafka安装包
- 下载kafka_2.13-4.2.0.tgz
wget https://archive.apache.org/dist/kafka/4.2.0/kafka_2.13-4.2.0.tgz
wget https://downloads.apache.org/kafka/4.2.0/kafka_2.13-4.2.0.tgz
- 解压安装包
tar -xzf kafka_2.13-4.2.0.tgz
- 配置环境变量
常用文件说明
cd /opt/kafka/kafka_2.13-4.2.0/
bin/kafka-server-start.sh:启动 Kafka Broker 的核心脚本。
bin/kafka-server-stop.sh:停止脚本。
bin/kafka-topics.sh:用于创建和查看 Topic 的命令行工具。
bin/kafka-console-producer.sh:用于测试发送消息的工具。
bin/kafka-console-consumer.sh:用于测试接收消息的工具。
bin/kafka-storage.sh:KRaft 模式下的重要工具,用于格式化日志目录(在启动前必须执行)。
- 编辑环境变量配置文件
vi /etc/profile
或
sudo nano /etc/profile
- 添加以下内容到文件末尾
export KAFKA_HOME=/opt/kafka/kafka_2.13-4.2.0
export PATH=PATH:KAFKA_HOME/bin
- 使环境变量生效
source /etc/profile
- 生成集群 ID(Kafka 4.x 必需)jdk要17要不然会报错
cd /opt/kafka/kafka_2.13-4.2.0/bin
./kafka-storage.sh random-uuid
生成数值,集群 ID=yVxGm4C4RIqEhpJSyMNUVw
生成集群 ID
cd /opt/kafka/kafka_2.13-4.2.0/bin
bin/kafka-storage.sh random-uuid
root@ecs-25ff:/opt/kafka/kafka_2.13-4.2.0# bin/kafka-storage.sh random-uuid
RxUKPmEgQ2Wau0mrxX_a2A
生成集群 ID
cd /opt/kafka/kafka_2.13-4.2.0
CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
echo $CLUSTER_ID
root@ecs-25ff:/opt/kafka/kafka_2.13-4.2.0# CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
root@ecs-25ff:/opt/kafka/kafka_2.13-4.2.0# echo $CLUSTER_ID
13o4bAfPRZOjwEKCb7ONXg
- 格式化存储目录(替换你的 UUID)
cd /opt/kafka/kafka_2.13-4.2.0
bin/kafka-storage.sh format -t $CLUSTER_ID -c config/kraft/server.properties
Cd 到/opt/kafka/kafka_2.13-4.2.0/config 检查有没有kraft目录,没有的需要mkdir kraft,然后把server.properties拷贝到config/kraft/目录下
将 <your-uuid> 替换成你刚刚生成的 UUID
bin/kafka-storage.sh format -t <your-uuid> -c config/kraft/server.properties
cd /opt/kafka/kafka_2.13-4.2.0/
bin/kafka-storage.sh format -t RxUKPmEgQ2Wau0mrxX_a2A -c config/kraft/server.properties
四、配置Kafka
- 进入Kafka配置目录
cd /opt/kafka/kafka_2.13-4.2.0/config
- 编辑server.properties文件
sudo nano server.properties
或
vi server.properties
- 修改以下关键配置(根据实际需求调整)
broker.id=0 (单节点保持默认)
listeners=PLAINTEXT://localhost:9092
log.dirs=/tmp/kraft-combined-logs
情况A:如果你想要合署模式(同时运行 broker 和 controller)
vim config/kraft/server.properties
角色设置:同时担任broker和controller
process.roles=broker,controller
监听器配置:必须包含CONTROLLER和PLAINTEXT
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
controller监听器名称:必须与上面的listeners中的名称对应
controller.listener.names=CONTROLLER
其他必要配置
node.id=1
controller.quorum.voters=1@localhost:9093
客户端连接的地址,必须配置为客户端能够访问的地址
advertised.listeners=PLAINTEXT://localhost:9092
情况B:如果你想要纯Controller模式(只运行 controller)
角色设置:只担任controller
process.roles=controller
监听器配置:只需要CONTROLLER
listeners=CONTROLLER://0.0.0.0:9093
controller监听器名称:必须与上面的listeners中的名称对应
controller.listener.names=CONTROLLER
其他必要配置
node.id=1
controller.quorum.voters=1@localhost:9093
五、Kafka
启动Kafka(后台运行)
cd /opt/kafka/kafka_2.13-4.2.0/
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-server-start.sh -daemon /opt/kafka/kafka_2.13-4.2.0/config/server.properties
- 验证服务状态
jps
应显示Kafka进程
能看到 Kafka 进程。
ps -ef | grep kafka
检查 Kafka 进程
jps
如果看到 Kafka 进程,说明 Kafka 正在运行:
12346 Jps
如果没有看到 Kafka 进程,检查所有 Java 进程:
ps -ef | grep kafka
方法2:检查 Kafka 监听端口
Kafka 默认使用 9092 端口:
查看端口监听状态
netstat -tlnp | grep 9092
或者使用 ss 命令
ss -tlnp | grep 9092
六、创建测试主题
- 创建名为xingchuangyuan的主题
参数说明:
--create:创建主题
--topic xingchuangyuan:主题名称
--bootstrap-server localhost:9092:Kafka 服务器地址
--partitions 3:设置3个分区(可以根据需要调整)
--replication-factor 1:复制因子为1(如果只有一个 broker)
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-topics.sh --create --topic xingchuangyuan --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
- 验证主题是否创建成功,查看主题列表
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
查看主题的详细信息:
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-topics.sh --describe --topic xingchuangyuan --bootstrap-server localhost:9092
七、测试Kafka功能
- 启动生产者(新终端)
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-console-producer.sh --topic xingchuangyuan --bootstrap-server localhost:9092
- 启动消费者(新终端)
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-console-consumer.sh --topic xingchuangyuan --bootstrap-server localhost:9092 --from-beginning
- 在生产者终端输入消息,消费者终端应能接收消息
八、设置开机自启动
- 创建Kafka服务文件,创建 systemd 服务(开机自启)
vi /etc/systemd/system/kafka.service
添加以下内容:
Unit
Description=Kafka Service
After=zookeeper.service
Service
Type=simple
User=root
ExecStart=/opt/kafka/kafka_2.13-4.2.0/bin/kafka-server-start.sh /opt/kafka/kafka_2.13-4.2.0/config/kraft/server.properties
ExecStop=/opt/kafka/kafka_2.13-4.2.0/bin/kafka-server-stop.sh
Restart=on-failure
Install
WantedBy=multi-user.target
- 启用并启动服务
systemctl daemon-reload
systemctl enable kafka
systemctl start kafka
查看服务状态
sudo systemctl status kafka
显示 active (running) 绿色 → 成功
ss -tulpn | grep java
- 停止Kafka服务
确认 Kafka 是否正在运行
jps | grep Kafka
如果没有看到 Kafka 进程,先启动 Kafka:
/opt/kafka/kafka_2.13-4.2.0/bin/kafka-server-start.sh -daemon /opt/kafka/kafka_2.13-4.2.0/config/server.properties
常见问题解决
- 端口冲突:修改server.properties中的listeners端口
- 启动失败:检查日志文件(/tmp/kafka-log )
- 权限问题:确保Kafka目录有足够权限
查看当前的配置文件
cat config/kraft/server.properties | grep -E "listeners|controller.listener.names|process.roles"
特别检查 controller.quorum.voters 是否存在
grep "controller.quorum.voters" config/kraft/server.properties
