本页内容

  • 先决条件
  • 入门
  • 安装 Java
  • 下载 Kafka
  • 为 Kafka 和 Zookeeper 创建 Systemd 文件
  • 安装并配置 CMAK
  • 启动 CMAK 服务
  • 配置 SELinux 和防火墙
  • 访问 CMAK Web 界面
  • 在 Kafka 上添加你的第一个 Topic
  • 结论

Apache Kafka 是一个免费的开源流处理平台,用于流分析、数据集成和关键任务应用。与 ActiveMQ 和 RabbitMQ 相比,Kafka 具有更高的吞吐量、内置的分区、复制和容错能力。Kafka 是一个分布式消息代理,能够有效处理海量实时信息。

CMAK 也称为“Cluster Manager”(集群管理器),是由 Yahoo 开发的用于管理 Kafka 集群的工具。使用 CMAK,你可以管理多个集群并检查集群状态,包括 topic、消费者、偏移量、broker、副本分布、分区分布等等。

在本教程中,我们将演示如何在 CentOS 8 服务器上安装带 CMAK 的 Apache Kafka 流处理平台。

先决条件

  • 一台运行 CentOS 8 的服务器。
  • 服务器已配置 root 密码。

入门

首先,建议将系统软件包更新到最新版本。你可以使用以下命令更新所有软件包:

dnf update -y

所有软件包更新完成后,使用以下命令安装其他所需依赖:

dnf install git unzip -y

完成后,你可以继续下一步。

安装 Java

Kafka 基于 Java,因此你的服务器上必须安装 Java。如果尚未安装,可以使用以下命令安装:

dnf install java-11-openjdk-devel -y

Java 安装完成后,你可以使用以下命令验证已安装的 Java 版本:

java --version

你应该看到以下输出:

openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-CentOS-0centos8)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-CentOS-0centos8, mixed mode, sharing)

完成后,你可以继续下一步。

下载 Kafka

在下载 Kafka 之前,创建一个用于存储 Kafka 的目录。你可以使用以下命令创建:

mkdir /usr/local/kafka-server

接下来,切换到 kafka-server 目录并使用以下命令下载最新版本的 Kafka:

cd /usr/local/kafka-server
wget https://downloads.apache.org/kafka/2.6.0/kafka_2.13-2.6.0.tgz

下载完成后,使用以下命令解压下载的文件:

tar -xvzf kafka_2.13-2.6.0.tgz --strip 1

完成后,你可以继续下一步。

为 Kafka 和 Zookeeper 创建 Systemd 文件

接下来,你需要创建一个 systemd 服务文件来管理 Zookeeper 和 Kafka 服务。

首先,使用以下命令创建一个 Zookeeper 服务文件:

nano /etc/systemd/system/zookeeper.service

添加以下行:

[Unit]
Description=Apache Zookeeper Server
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
ExecStart=/usr/local/kafka-server/bin/zookeeper-server-start.sh /usr/local/kafka-server/config/zookeeper.properties
ExecStop=/usr/local/kafka-server/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

完成后保存并关闭文件。

接下来,使用以下命令创建一个 Kafka 服务文件:

nano /etc/systemd/system/kafka.service

添加以下行:

[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/jre-11-openjdk"
ExecStart=/usr/local/kafka-server/bin/kafka-server-start.sh /usr/local/kafka-server/config/server.properties
ExecStop=/usr/local/kafka-server/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

保存并关闭文件,然后使用以下命令重新加载 systemd 守护进程:

systemctl daemon-reload

接下来,使用以下命令启动这两个服务并设置开机自启:

systemctl enable --now zookeeper
systemctl enable --now kafka
systemctl start zookeeper
systemctl start kafka

接下来,使用以下命令验证两个服务的状态:

systemctl status zookeeper kafka

你应该看到以下输出:

? zookeeper.service - Apache Zookeeper Server
   Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-08-29 08:48:42 EDT; 30s ago
 Main PID: 26722 (java)
    Tasks: 31 (limit: 12523)
   Memory: 68.8M
   CGroup: /system.slice/zookeeper.service
           ??26722 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCIn>

Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,326] INFO maxSessionTimeout set to 60000 (org.apache.zookeeper.>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,327] INFO Created server with tickTime 3000 minSessionTimeout 6>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,344] INFO Using org.apache.zookeeper.server.NIOServerCnxnFactor>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,348] INFO Configuring NIO connection handler with 10s sessionle>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,355] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zook>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,391] INFO zookeeper.snapshotSizeFactor = 0.33 (org.apache.zooke>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,397] INFO Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapsho>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,401] INFO Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapsho>
Aug 29 08:48:44 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:44,431] INFO Using checkIntervalMs=60000 maxPerMinute=10000 (org.a>
Aug 29 08:48:53 centos8 zookeeper-server-start.sh[26722]: [2020-08-29 08:48:53,030] INFO Creating new log file: log.1 (org.apache.zookeeper.se>

? kafka.service - Apache Kafka Server
   Loaded: loaded (/etc/systemd/system/kafka.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-08-29 08:48:50 EDT; 22s ago
     Docs: http://kafka.apache.org/documentation.html
 Main PID: 27100 (java)
    Tasks: 66 (limit: 12523)
   Memory: 306.4M
   CGroup: /system.slice/kafka.service
           ??27100 /usr/lib/jvm/jre-11-openjdk/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancy>

Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,733] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.c>
Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,747] INFO [ExpirationReaper-0-AlterAcls]: Starting (kafka.server.De>
Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,846] INFO [/config/changes-event-process-thread]: Starting (kafka.c>
Aug 29 08:48:56 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:56,877] INFO [SocketServer brokerId=0] Starting socket server acceptor>
Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,236] INFO [SocketServer brokerId=0] Started data-plane acceptor and>
Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,237] INFO [SocketServer brokerId=0] Started socket server acceptors>
Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,246] INFO Kafka version: 2.6.0 (org.apache.kafka.common.utils.AppIn>
Aug 29 08:48:57 centos8 kafka-server-start.sh[27100]: [2020-08-29 08:48:57,246] INFO Kafka commitId: 62abe01bee039651 (org.apache.kafka.common>

安装并配置 CMAK

接下来,你需要安装用于管理 Apache Kafka 集群的 CMAK。你可以使用以下命令从 Git 仓库下载它:

cd /root
git clone https://github.com/yahoo/CMAK.git

下载完成后,你需要编辑 application.conf 文件并定义 zookeeper 主机。

nano ~/CMAK/conf/application.conf

修改以下行:

cmak.zkhosts="localhost:2181"

完成后保存并关闭文件。然后,创建一个 zip 文件以部署该应用。

cd ~/CMAK/
./sbt clean dist

你应该看到以下输出:

model contains 640 documentable templates
[info] Main Scala API documentation successful.
[info] LESS compiling on 1 source(s)
[success] All package validations passed
[info] Your package is ready in /root/CMAK/target/universal/cmak-3.0.0.5.zip
[success] Total time: 150 s (02:30), completed 29-Aug-2020, 8:55:40 AM

接下来,使用以下命令解压上一步创建的 zip 文件:

cd ~/CMAK/target/universal
unzip cmak-3.0.0.5.zip

完成后,你可以继续下一步。

启动 CMAK 服务

现在,切换到 ~/CMAK/target/universal/cmak-3.0.0.5 目录并使用以下命令启动 CMAK 服务:

cd ~/CMAK/target/universal/cmak-3.0.0.5
bin/cmak

此时,CMAK 已启动并在 9000 端口监听。

配置 SELinux 和防火墙

默认情况下,CentOS 8 中 SELinux 是启用的。因此你需要为 CMAK 配置 SELinux。你可以使用以下命令进行配置:

chcon -t httpd_sys_rw_content_t ~/CMAK/target/universal/cmak-3.0.0.5 -R
setsebool -P httpd_can_network_connect 1

接下来,你需要通过 firewalld 放行 9000 端口。你可以使用以下命令实现:

firewall-cmd --permanent --zone public --add-port 9000/tcp
firewall-cmd --reload

完成后,你可以继续下一步。

访问 CMAK Web 界面

现在,打开你的网页浏览器,使用 URL http://your-server-ip:9000 访问 CMAK。你应该看到以下页面:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

在上述界面中,你应该会看到没有可用的集群。因此你需要先创建一个新集群。

点击 Cluster => Add CLuster(添加集群)。你应该看到以下界面:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

填写你的集群名称、zookeeper 主机和其他所需信息,然后点击 Save(保存)按钮。你应该看到以下界面:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

完成后,你可以继续下一步。

在 Kafka 上添加你的第一个 Topic

接下来,你需要在 Kafka 上创建一个 topic 来测试功能。为此,打开另一个终端,切换到 kafka-server 目录,并通过运行以下命令指定 topic 名称和复制因子来创建一个新的 topic:

cd /usr/local/kafka-server
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic MyNewTopic

现在,前往 CMAK 仪表板并点击 Topic。你应该会在以下界面中看到你之前创建的 Topic:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

点击 Topic 编号。你应该会在以下界面中看到你新创建的 topic:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

现在,点击你的 Topic 名称。你应该会在以下界面中看到你的 topic 的所有信息:

在 CentOS 8 上安装带 CMAK 的 Apache Kafka

结论

恭喜!你已成功在 CentOS 8 服务器上安装了带 CMAK 的 Apache Kafka。你现在可以开始探索 CMAK 的更多功能。如果你有任何问题,欢迎随时问我。