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 用户:


  1. sudo adduser kafka

按提示设置密码并完成用户创建。随后将 kafka 用户加入 sudo 组,以便安装依赖:


  1. sudo adduser kafka sudo

现在切换到 kafka 用户账户:


  1. su -l kafka

专用用户准备就绪,接下来下载 Kafka 二进制文件。

第二步:下载和解压 Kafka 二进制文件

/home/kafka 目录创建下载文件夹:


  1. mkdir ~/Downloads

使用 curl 下载 Kafka 2.8.2:


  1. curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz

创建 Kafka 安装目录并进入:


  1. mkdir ~/kafka && cd ~/kafka

解压安装包(注意 --strip 1 参数确保文件直接解压到当前目录):


  1. tar -xvzf ~/Downloads/kafka.tgz --strip 1

文件解压完成,现在开始配置 Kafka 服务器。

第三步:配置 Kafka 服务器

Kafka 默认禁止删除 Topic,需修改配置文件启用该功能:


  1. nano ~/kafka/config/server.properties

在文件末尾添加:

~/kafka/config/server.properties

delete.topic.enable = true

修改日志存储路径(定位 log.dirs 并更新为):

/kafka/config/server.properties

log.dirs=/home/kafka/logs

保存退出。接下来创建 systemd 服务单元文件实现开机自启。

第四步:创建 systemd 服务文件并启动 Kafka

Kafka 依赖 Zookeeper 管理集群状态。首先创建 Zookeeper 服务文件:


  1. sudo nano /etc/systemd/system/zookeeper.service

添加以下配置:

/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 服务文件:


  1. sudo nano /etc/systemd/system/kafka.service

添加配置:

/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 服务:


  1. sudo systemctl start kafka

检查服务状态(应显示 active (running)):

  1. 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 ...

设置开机自启:

  1. sudo systemctl enable zookeeper

输出
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.
  1. 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

  1. ~/kafka/bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic TutorialTopic

输出

Created topic TutorialTopic.

发布测试消息:

  1. echo “Hello, World” | ~/kafka/bin/kafka-console-producer.sh –broker-list localhost:9092 –topic TutorialTopic > /dev/null

启动消费者读取消息:

  1. ~/kafka/bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic TutorialTopic –from-beginning

输出

Hello, World

保持消费者运行,在新终端发布第二条消息:

  1. echo “第二条测试消息” | ~/kafka/bin/kafka-console-producer.sh –broker-list localhost:9092 –topic TutorialTopic > /dev/null

新消息将出现在消费者终端,测试完成后按 CTRL+C 退出。

第六步:加固 Kafka 服务器

提升安全性的关键步骤:

  1. 退出当前会话,使用其他 sudo 用户登录
  2. 移除 kafka 用户的 sudo 权限:
    1. sudo deluser kafka sudo
    
    
  3. 锁定 kafka 用户密码防止直接登录:
    1. sudo passwd kafka -l
    
    

现在仅 root 和 sudo 用户可通过以下命令访问:

  1. sudo su – kafka

第七步:安装 KafkaT(可选)

KafkaT 是一款实用的 Kafka 管理工具。安装依赖:

  1. sudo apt install ruby ruby-dev build-essential

安装 KafkaT:

  1. sudo CFLAGS=-Wno-error=format-overflow gem install kafkat

创建配置文件:

  1. nano ~/.kafkatcfg

添加配置:

~/.kafkatcfg

{
  "kafka_path": "/home/kafka/kafka",
  "log_path": "/home/kafka/logs",
  "zk_path": "localhost:2181"
}

测试工具(查看分区信息):

  1. kafkat partitions

结论

您已在 Ubuntu 20.04 上成功部署安全的 Apache Kafka 环境。下一步可探索 Kafka 客户端集成(如 Python/Java 等)或参阅官方文档深入学习流处理特性。

bannerAds