Ubuntu 20.04安装配置Apache Kafka 2.8.2:超详细教程与最佳实践
引言
Apache Kafka 是一款高性能的分布式消息流处理平台,专为海量实时数据处理而设计。Kafka 集群具备卓越的高可扩展性和容错能力。与 ActiveMQ、RabbitMQ 等传统消息中间件相比,Kafka 在吞吐量方面具有显著优势。虽然主要用作发布/订阅消息系统,但许多企业也将其用于日志聚合,因为它为消息提供了可靠的持久化存储。
发布/订阅模式的核心特点是:生产者发布消息时无需关心消费者数量或处理方式,订阅者会自动接收新消息通知。相比客户端轮询机制,这种架构更加高效且易于扩展。
本教程将指导您在 Ubuntu 20.04 上完成 Apache Kafka 2.8.2 的完整安装和配置过程。
先决条件
开始前请确保满足以下条件:
- 具有至少 4GB RAM 的 Ubuntu 20.04 服务器,并配置了具有 sudo 权限的非 root 用户(参考我们的服务器初始化指南)。内存不足可能导致 Kafka 服务启动失败。
- 服务器已安装 OpenJDK 11(安装步骤参考Ubuntu APT 安装 Java 教程)。Kafka 基于 Java 开发,依赖 JVM 运行。
第一步:创建 Kafka 专用用户
为提升安全性,我们应创建专门运行 Kafka 服务的用户账户。这能有效限制潜在攻击对系统造成的影响。
以非 root sudo 用户登录服务器,执行以下命令创建 kafka
用户:
- sudo adduser kafka
按提示设置密码并完成用户创建。随后将 kafka
用户加入 sudo 组,以便安装依赖:
- sudo adduser kafka sudo
现在切换到 kafka
用户账户:
- su -l kafka
专用用户准备就绪,接下来下载 Kafka 二进制文件。
第二步:下载和解压 Kafka 二进制文件
在 /home/kafka
目录创建下载文件夹:
- mkdir ~/Downloads
使用 curl 下载 Kafka 2.8.2:
- curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz
创建 Kafka 安装目录并进入:
- mkdir ~/kafka && cd ~/kafka
解压安装包(注意 --strip 1
参数确保文件直接解压到当前目录):
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
文件解压完成,现在开始配置 Kafka 服务器。
第三步:配置 Kafka 服务器
Kafka 默认禁止删除 Topic,需修改配置文件启用该功能:
- nano ~/kafka/config/server.properties
在文件末尾添加:
delete.topic.enable = true
修改日志存储路径(定位 log.dirs
并更新为):
log.dirs=/home/kafka/logs
保存退出。接下来创建 systemd 服务单元文件实现开机自启。
第四步:创建 systemd 服务文件并启动 Kafka
Kafka 依赖 Zookeeper 管理集群状态。首先创建 Zookeeper 服务文件:
- sudo nano /etc/systemd/system/zookeeper.service
添加以下配置:
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
保存退出。然后创建 Kafka 服务文件:
- sudo nano /etc/systemd/system/kafka.service
添加配置:
[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
启动 Kafka 服务:
- sudo systemctl start kafka
检查服务状态(应显示 active (running)
):
- sudo systemctl status kafka
● kafka.service Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2023-02-01 23:44:12 UTC; 4s ago Main PID: 17770 (sh) Tasks: 69 (limit: 4677) Memory: 321.9M CGroup: /system.slice/kafka.service ├─17770 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1 └─17793 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 ...
设置开机自启:
- sudo systemctl enable zookeeper
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.
- sudo systemctl enable kafka
Created symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.
Kafka 现在运行在默认端口 9092,接下来进行功能测试。
第五步:测试 Kafka 安装
通过生产/消费消息验证安装:
- 生产者(Producer):向主题发布消息
- 消费者(Consumer):从主题读取消息
创建测试主题 TutorialTopic
:
- ~/kafka/bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic TutorialTopic
Created topic TutorialTopic.
发布测试消息:
- echo “Hello, World” | ~/kafka/bin/kafka-console-producer.sh –broker-list localhost:9092 –topic TutorialTopic > /dev/null
启动消费者读取消息:
- ~/kafka/bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic TutorialTopic –from-beginning
Hello, World
保持消费者运行,在新终端发布第二条消息:
- echo “第二条测试消息” | ~/kafka/bin/kafka-console-producer.sh –broker-list localhost:9092 –topic TutorialTopic > /dev/null
新消息将出现在消费者终端,测试完成后按 CTRL+C
退出。
第六步:加固 Kafka 服务器
提升安全性的关键步骤:
- 退出当前会话,使用其他 sudo 用户登录
- 移除 kafka 用户的 sudo 权限:
- sudo deluser kafka sudo
- 锁定 kafka 用户密码防止直接登录:
- sudo passwd kafka -l
现在仅 root 和 sudo 用户可通过以下命令访问:
- sudo su – kafka
第七步:安装 KafkaT(可选)
KafkaT 是一款实用的 Kafka 管理工具。安装依赖:
- sudo apt install ruby ruby-dev build-essential
安装 KafkaT:
- sudo CFLAGS=-Wno-error=format-overflow gem install kafkat
创建配置文件:
- nano ~/.kafkatcfg
添加配置:
{
"kafka_path": "/home/kafka/kafka",
"log_path": "/home/kafka/logs",
"zk_path": "localhost:2181"
}
测试工具(查看分区信息):
- kafkat partitions
结论
您已在 Ubuntu 20.04 上成功部署安全的 Apache Kafka 环境。下一步可探索 Kafka 客户端集成(如 Python/Java 等)或参阅官方文档深入学习流处理特性。