本页内容
- 先决条件
- 入门
- 安装 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。你应该看到以下页面:

在上述界面中,你应该会看到没有可用的集群。因此你需要先创建一个新集群。
点击 Cluster => Add CLuster(添加集群)。你应该看到以下界面:


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

完成后,你可以继续下一步。
在 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:

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

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

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