Ubuntu环境下Kafka配置完整步骤
Kafka是用Java开发的,需先安装Java Development Kit (JDK)。推荐使用OpenJDK 8(兼容性最好):
sudo apt update
sudo apt install openjdk-8-jdk -y
# 验证安装
java -version
输出应包含openjdk version "1.8.x",表示安装成功。
Kafka通过Zookeeper管理集群元数据(如broker信息、Topic分区等),需先安装Zookeeper:
# 下载Zookeeper(以3.4.6为例)
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
# 解压到/usr/local目录
tar xvf zookeeper-3.4.6.tar.gz
sudo mv zookeeper-3.4.6 /usr/local/zookeeper
# 创建数据目录(存储Zookeeper数据)
sudo mkdir -p /var/lib/zookeeper
sudo chown -R $(whoami):$(whoami) /usr/local/zookeeper /var/lib/zookeeper
# 配置Zookeeper
sudo cat > /usr/local/zookeeper/conf/zoo.cfg << EOF
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
EOF
# 启动Zookeeper
sudo /usr/local/zookeeper/bin/zkServer.sh start
# 验证启动(检查2181端口是否监听)
sudo netstat -tulnp | grep 2181
若输出包含2181/tcp,说明Zookeeper启动成功。
从Apache官网下载最新稳定版Kafka(以3.5.2为例),解压到指定目录:
# 下载Kafka
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
# 解压到/usr/local目录
tar -xzf kafka_2.12-3.5.2.tgz
sudo mv kafka_2.12-3.5.2 /usr/local/kafka
# 创建日志目录(存储Kafka消息)
sudo mkdir -p /usr/local/kafka/logs
sudo chown -R $(whoami):$(whoami) /usr/local/kafka
此处将Kafka日志目录设置为/usr/local/kafka/logs(替代默认的/tmp/kafka-logs,避免重启后数据丢失)。
编辑Kafka的主配置文件server.properties(位于/usr/local/kafka/config/目录),修改以下关键参数:
sudo vi /usr/local/kafka/config/server.properties
核心配置项说明:
broker.id:Kafka broker的唯一标识(集群中需唯一,单机可设为0);listeners:Kafka监听的地址和端口(PLAINTEXT://your_server_ip:9092,若仅在本地测试可设为PLAINTEXT://:9092);advertised.listeners:对外暴露的地址和端口(集群中需设置为其他broker能访问的地址,本地测试可省略或与listeners一致);zookeeper.connect:Zookeeper连接地址(localhost:2181,若Zookeeper部署在其他服务器需替换为对应IP);log.dirs:Kafka日志存储目录(/usr/local/kafka/logs,需提前创建并授权);num.partitions:默认分区数(1,生产环境建议根据吞吐量调整,如3);default.replication.factor:默认副本因子(1,生产环境建议设置为3,需与集群broker数量匹配)。使用以下命令启动Kafka(前台模式,便于查看日志):
sudo /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
若需后台运行(推荐),添加-daemon参数:
sudo /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
# 验证启动(检查9092端口是否监听)
sudo netstat -tulnp | grep 9092
若输出包含9092/tcp,说明Kafka启动成功。
创建一个名为test的Topic(1个分区、1个副本):
sudo /usr/local/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
# 验证Topic是否创建成功
sudo /usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
启动一个生产者,向test Topic发送消息:
sudo /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
输入任意消息(如Hello, Kafka on Ubuntu),按Ctrl+C退出。
启动一个消费者,从test Topic接收消息:
sudo /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
应能看到生产者发送的消息,按Ctrl+C退出。
将Kafka的bin目录添加到系统PATH,方便全局使用Kafka命令:
# 编辑~/.bashrc文件
echo 'export KAFKA_HOME=/usr/local/kafka' >> ~/.bashrc
echo 'export PATH=$PATH:$KAFKA_HOME/bin' >> ~/.bashrc
# 生效配置
source ~/.bashrc
# 验证(无需路径可直接运行)
kafka-topics --version
创建systemd服务文件,实现Kafka和Zookeeper开机自动启动:
# 创建Zookeeper服务文件
sudo vi /etc/systemd/system/zookeeper.service
写入以下内容:
[Unit]
Description=Zookeeper service
After=network.target
[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 创建Kafka服务文件
sudo vi /etc/systemd/system/kafka.service
写入以下内容:
[Unit]
Description=Apache Kafka server (broker)
After=zookeeper.service network.target
[Service]
Type=simple
User=$(whoami)
Group=$(whoami)
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 刷新systemd配置并启用服务
sudo systemctl daemon-reload
sudo systemctl enable zookeeper
sudo systemctl enable kafka
# 启动服务
sudo systemctl start zookeeper
sudo systemctl start kafka
# 检查服务状态
sudo systemctl status zookeeper
sudo systemctl status kafka
若状态显示active (running),说明开机自启配置成功。
若服务器开启了防火墙(如ufw),需允许Kafka和Zookeeper的端口:
# 允许Zookeeper端口(2181)
sudo ufw allow 2181
# 允许Kafka端口(9092)
sudo ufw allow 9092
# 重新加载防火墙规则
sudo ufw reload
通过以上步骤,即可在Ubuntu环境下完成Kafka的基本配置与测试。生产环境中还需进一步优化(如集群部署、数据备份、安全认证等)。