AutoMQ 集成 Kafdrop


产出的第二篇已经发布到官方的文章。

前言

Kafdrop [1] 是一个为 Kafka 设计的简洁、直观且功能强大的 Web UI 工具。它允许开发者和管理员轻松地查看和管理 Kafka 集群的关键元数据,包括主题、分区、消费者组以及他们的偏移量等。通过提供一个用户友好的界面,Kafdrop 大大简化了 Kafka 集群的监控和管理过程,使得用户无需依赖复杂的命令行工具就能快速获取集群的状态信息。

功能亮点

  • 查看**Kafka**代理:包括主题和分区分配以及控制器状态
  • 查看主题— 分区数、复制状态和自定义配置
  • 浏览消息— JSON、纯文本、Avro 和 Protobuf 编码
  • 查看消费者组— 每个分区的停放偏移量、组合和每个分区的滞后
  • 创建新主题
  • 查看 ACL
  • 支持 Azure 事件中心

集成 AutoMQ

AutoMQ [2] ,一个基于 Kafka 改进的消息队列,不仅继承了 Kafka 的所有优点,还进行了定制化扩展,以满足特定业务需求。将 Kafdrop 与 AutoMQ 搭配使用,可以进一步提升消息队列的管理效率和监控能力。无论是在开发阶段快速迭代,还是在生产环境中确保数据流的高可用性和稳定性,Kafdrop 都能为 AutoMQ 用户提供极大的便利。

这篇教程会教你如何启动 Kafdrop 服务,并将其与 AutoMQ 集群搭配起来,实现集群状态的监控和管理。

前置条件

  • Kafdrop 的环境:Kafka 集群以及 JDK17,Maven 3.6.3 以上。

  • Kafdrop 可以通过 JAR 包运行,Docker 部署 以及 protobuf 方式部署。可参考 官方文档 [3] 。

  • 准备 5 台主机用于部署 AutoMQ 集群。建议选择 2 核 16GB 内存的 Linux amd64 主机,并准备两个虚拟存储卷。示例如下:

    角色 IP Node ID 系统卷 数据卷
    CONTROLLER 192.168.0.1 0 EBS 20GB EBS 20GB
    CONTROLLER 192.168.0.2 1 EBS 20GB EBS 20GB
    CONTROLLER 192.168.0.3 2 EBS 20GB EBS 20GB
    BROKER 192.168.0.4 3 EBS 20GB EBS 20GB
    BROKER 192.168.0.5 4 EBS 20GB EBS 20GB

    Tips:

    • 请确保这些机器处于相同的网段,可以互相通信
    • 非生产环境也可以只部署 1 台 Controller,默认情况下该 Controller 也同时作为 Broker 角色
  • AutoMQ Github Releases 下载最新的正式二进制安装包,用于安装 AutoMQ。

下面我将先搭建 AutoMQ 集群,再启动 Kafdrop。

安装并启动 AutoMQ 集群

配置 S3URL

第 1 步:生成 S3 URL

AutoMQ 提供了 automq-kafka-admin.sh 工具,用于快速启动 AutoMQ。只需提供包含所需 S3 接入点和身份认证信息的 S3 URL,即可一键启动 AutoMQ,无需手动生成集群 ID 或进行存储格式化等操作。

### 命令行使用示例
bin/automq-kafka-admin.sh generate-s3-url \
--s3-access-key=xxx  \
--s3-secret-key=yyy \
--s3-region=cn-northwest-1  \
--s3-endpoint=s3.cn-northwest-1.amazonaws.com.cn \
--s3-data-bucket=automq-data \
--s3-ops-bucket=automq-ops

如果遇到报错,请注意验证参数正确性以及格式。

当使用 CubeFS 时,可以采用如下的配置来生成具体的 S3URL。

参数名 本例默认值 说明
–s3-access-key XXX 创建 CubeFS 用户后,记得按照实际情况进行替换
–s3-secret-key YYY 创建 CubeFS 用户后,记得按照实际情况进行替换
–s3-region auto 这里可以设置为集群名称,或者 auto
–s3-endpoint http://主机 ip:17140 该参数是 CubeFS 的 S3 接入点
–s3-data-bucket automq-data CubeFS 的 bucket 名称
–s3-ops-bucket automq-ops CubeFS 的 bucket 名称

输出结果

执行该命令后,将自动按以下阶段进行:

  1. 根据提供的 accessKey 和 secret Key 对 S3 基本功能进行探测,以验证 AutoMQ 和 S3 的兼容性。
  2. 根据身份信息,接入点信息生成 s3url。
  3. 根据 s3url 获取启动 AutoMQ 的命令示例。在命令中,将 –controller-list 和 –broker-list 替换为实际需要部署的 CONTROLLER 和 BROKER。

执行结果示例如下:

############  Ping s3 ########################

[ OK ] Write s3 object
[ OK ] Read s3 object
[ OK ] Delete s3 object
[ OK ] Write s3 object
[ OK ] Upload s3 multipart object
[ OK ] Read s3 multipart object
[ OK ] Delete s3 object
############  String of s3url ################

Your s3url is:

s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=xxx&s3-secret-key=yyy&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA


############  Usage of s3url  ################
To start AutoMQ, generate the start commandline using s3url.
bin/automq-kafka-admin.sh generate-start-command \
--s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" \
--controller-list="192.168.0.1:9093;192.168.0.2:9093;192.168.0.3:9093"  \
--broker-list="192.168.0.4:9092;192.168.0.5:9092"

TIPS: Please replace the controller-list and broker-list with your actual IP addresses.

第 2 步:生成启动命令列表

将上一步生成的命令中的 –controller-list 和 –broker-list 替换为你的主机信息,具体来说,将它们替换为环境准备中提到的 3 台 CONTROLLER 和 2 台 BROKER 的 IP 地址,并且使用默认的 9092 和 9093 端口。

bin/automq-kafka-admin.sh generate-start-command \
--s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" \
--controller-list="192.168.0.1:9093;192.168.0.2:9093;192.168.0.3:9093"  \
--broker-list="192.168.0.4:9092;192.168.0.5:9092"

参数说明

参数名 必选 说明
–s3-url 由 bin/automq-kafka-admin.sh generate-s3-url 命令行工具生成,包含身份认证、集群 ID 等信息
–controller-list 至少需要有一个地址,用作 CONTROLLER 主机的 IP、端口列表。格式为 IP1:PORT1;IP2:PORT2;IP3:PORT3
–broker-list 至少需要有一个地址,用作 BROKER 主机的 IP、端口列表。格式为 IP1:PORT1;IP2:PORT2;IP3:PORT3
–controller-only-mode 决定 CONTROLLER 节点是否只承担 CONTROLLER 角色。默认为 false,即部署的 CONTROLLER 节点同时也作为 BROKER 角色。

输出结果

执行命令后,会生成用于启动 AutoMQ 的命令。

############  Start Commandline ##############
To start an AutoMQ Kafka server, please navigate to the directory where your AutoMQ tgz file is located and run the following command.

Before running the command, make sure that Java 17 is installed on your host. You can verify the Java version by executing 'java -version'.

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker,controller --override node.id=0 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.1:9092,CONTROLLER://192.168.0.1:9093 --override advertised.listeners=PLAINTEXT://192.168.0.1:9092

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker,controller --override node.id=1 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.2:9092,CONTROLLER://192.168.0.2:9093 --override advertised.listeners=PLAINTEXT://192.168.0.2:9092

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker,controller --override node.id=2 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.3:9092,CONTROLLER://192.168.0.3:9093 --override advertised.listeners=PLAINTEXT://192.168.0.3:9092

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker --override node.id=3 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.4:9092 --override advertised.listeners=PLAINTEXT://192.168.0.4:9092

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker --override node.id=4 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.5:9092 --override advertised.listeners=PLAINTEXT://192.168.0.5:9092


TIPS: Start controllers first and then the brokers.

node.id 默认从 0 开始自动生成。

第 3 步:启动 AutoMQ

要启动集群,请在预先指定的 CONTROLLER 或 BROKER 主机上依次执行上一步命令中的命令列表。例如,在 192.168.0.1 上启动第一个 CONTROLLER 进程,执行生成的启动命令列表中的第一条命令模板。

bin/kafka-server-start.sh --s3-url="s3://s3.cn-northwest-1.amazonaws.com.cn?s3-access-key=XXX&s3-secret-key=YYY&s3-region=cn-northwest-1&s3-endpoint-protocol=https&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=40ErA_nGQ_qNPDz0uodTEA" --override process.roles=broker,controller --override node.id=0 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override listeners=PLAINTEXT://192.168.0.1:9092,CONTROLLER://192.168.0.1:9093 --override advertised.listeners=PLAINTEXT://192.168.0.1:9092

参数说明

使用启动命令时,未指定的参数将采用 Apache Kafka 的默认配置。对于 AutoMQ 新增的参数,将使用 AutoMQ 提供的默认值。要覆盖默认配置,可以在命令末尾添加额外的 --override key=value 参数来覆盖默认值。

参数名 必选 说明
s3-url 由 bin/automq-kafka-admin.sh generate-s3-url 命令行工具生成,包含身份认证、集群 ID 等信息
process.roles 可选项为 CONTROLLER 或 BROKER。如果一台主机同时为 CONTROLLER 和 BROKER,则配置值为 CONTROLLER,BROKER。
node.id 整数,用于唯一标识 Kafka 集群中的 BROKER 或 CONTROLLER,在集群内部必须保持唯一性。
controller.quorum.voters 参与 KRAFT 选举的主机信息,包含 nodeid、ip 和 port 信息,例如:0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093
listeners 监听的 IP 和端口
advertised.listeners BROKER 为 Client 提供的接入地址。
log.dirs 存放 KRAFT、BROKER 元数据的目录。
s3.wal.path 在生产环境中,建议将 AutoMQ WAL 数据存放在一个独立挂载的新数据卷裸设备上。这样可以获得更好的性能表现,因为 AutoMQ 支持将数据写入裸设备,从而降低延迟。请确保配置正确的路径以存储 WAL 数据。
autobalancer.controller.enable 默认值为 false,不启用流量重平衡。自动开启流量重平衡后,AutoMQ 的 auto balancer 组件会自动迁移分区,以确保整体流量是均衡的。

Tips:

后台运行

如果需要以后台模式运行,请在命令末尾添加以下代码:

command > /dev/null 2>&1 &

启动 Kafdrop 服务

上述过程中,我们已经搭建了 AutoMQ 集群,并知道了所有的 broker 节点监听的地址和端口。接下来我们将着手启动 Kafdrop 的服务。

注意:要保证 Kafdrop 的服务所在地址是能够访问到 AutoMQ 集群的,否则会导致连接超时等问题。

本例我采用 JAR 包的方式启动 Kafdrop 的服务。步骤如下:

git clone https://github.com/obsidiandynamics/kafdrop.git
  • 使用 Maven 在本地编译打包 Kafdrop,以生成 JAR 文件。

在根目录下执行:

mvn clean compile package
  • 启动服务,需要指定 Kafka 集群 brokers 的地址和端口:
java --add-opens=java.base/sun.nio.ch=ALL-UNNAMED \
    -jar target/kafdrop-<version>.jar \
    --kafka.brokerConnect=<host:port,host:port>,...
  1. kafdrop-<version>.jar需要替换为具体版本,如 kafdrop-4.0.2-SNAPSHOT.jar
  2. --kafka.brokerConnect=<host:port,host:port>需要指定 host 和 port 为具体的集群 broker 节点。

控制台启动效果如下:

如果未指定,则 kafka.brokerConnect默认为 localhost:9092

注意:从 Kafdrop 3.10.0 开始,不再需要 ZooKeeper 连接。所有必要的集群信息都通过 Kafka 管理 API 检索。

打开浏览器并导航到 http://localhost:9000。可以通过添加以下配置来覆盖端口:

--server.port=<port> --management.server.port=<port>

最终效果

  1. 完整界面


展示了分区数,Topics 数以及其他集群状态信息。

  1. 新建 Topic 功能

  1. broker 节点详细信息

  1. Topic 详细信息

5. Topic 下的消息信息

总结

通过本教程,我们探索了 Kafdrop 的关键特性、功能以及与 AutoMQ 集群联动的方法,展示了如何轻松地监控和管理 AutoMQ 集群。Kafdrop 的使用不仅能够帮助团队更好地理解和控制他们的数据流,还能够提升开发和运维效率,确保数据处理流程的高效稳定。

随着消息队列技术在微服务架构、事件驱动架构和实时数据处理领域的广泛应用,有效地监控和管理这些基础设施的能力变得日益重要。希望本教程能够为你在使用 Kafdrop 与 AutoMQ 集群时提供有价值的见解和帮助。

至此,如何将 AutoMQ 集群与 Kafdrop 可视化工具结合使用的方法已经全部结束。

引用

[1] Kafdrop:https://github.com/obsidiandynamics/kafdrop

[2] AutoMQ:https://www.automq.com/zh

[3] Kafdrop 部署方式:https://github.com/obsidiandynamics/kafdrop/blob/master/README.md#getting-started

[4] Kafdrop 项目仓库:https://github.com/obsidiandynamics/kafdrop


文章作者: KTpro
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KTpro !
评论
  目录