AutoMQ 生态集成 MinIO

MinIO[7] 是一款高性能、分布式的对象存储系统,能够在标准硬件上运行,提供极高的性价比和广泛的适用性。专为高性能私有云设计,MinIO 采用简洁高效的架构,确保在提供全面对象存储功能的同时保持卓越性能。无论是传统的辅助存储、灾难恢复和归档,还是机器学习、大数据、私有云和混合云等新兴领域,MinIO 都展现了其强大的适应性和优越性。

得益于 MinIO 对 S3 API 的完全兼容,即使在私有数据中心,你仍然可以部署 AutoMQ 集群来获得一个与 Kafka 完全兼容,但是具备更好成本效益、极致弹性、个位数毫秒延迟的流系统。本文将指导你如何将 AutoMQ 集群部署在你私有数据中心的 MinIO 之上。

01

前置条件

  • 一个可以正常使用的 MinIO 环境。如果你还没有可用的 MinIO 环境,可以参考其官网指引[1]进行安装。

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

f00c7075d6898bb80c86c27347cb4df8.jpeg

Tips: 

  • 请确保这些机器处于相同的网段可以互相通信

  • 非生产环境也可以只部署 1 台 Controller,默认情况下该 Controller 也同时作为 Broker 角色

  • 从 AutoMQ Github Releases[2] 下载最新的正式二进制安装包,用于安装 AutoMQ。

  • 在 MinIO 上创建两个自定义命名的对象存储桶, automq-data 和 automq-ops。

a.可以通过设置环境变量来配置 AWS CLI 需要的 Access Key 和 Secret Key。

export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minio-secret-key-CHANGE-ME

   b.使用 AWS CLI 创建 S3 存储桶。

aws s3api create-bucket --bucket automq-data --endpoint=http://10.1.0.240:900

02

安装并启动 AutoMQ 集群

第一步:生成 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

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

b77d044eb8dfce3d081216bdf65e99e0.jpeg

输出结果

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

1. 根据提供的 accessKey 和 secretKey 对 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"

参数说明

f9f93a1f412eccb207704b4755e9bb61.jpeg

输出结果

执行命令后,会生成用于启动 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 的默认配置[3]。对于 AutoMQ 新增的参数[4],将使用 AutoMQ 提供的默认值。要覆盖默认配置,可以在命令末尾添加额外的 --override key=value 参数来覆盖默认值。

3dbfcef86ff46a9ece05a28985742cd5.jpeg

注意:若需启用持续流量重平衡或运行 Example: Self-Balancing When Cluster Nodes Change[5],建议在启动时为 Controller 明确指定参数 --override autobalancer.controller.enable=true。

后台运行

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

command > /dev/null 2>&1 &

数据卷路径

使用 Linux 的 lsblk 命令可查看本地数据卷,未分区的块设备即为数据卷。在以下示例中,vdb 是未分区的裸块设备。

vda    253:0    0   20G  0 disk
├─vda1 253:1    0    2M  0 part
├─vda2 253:2    0  200M  0 part /boot/efi
└─vda3 253:3    0 19.8G  0 part /
vdb    253:16   0   20G  0 disk

默认情况下,AutoMQ 存储元数据和 WAL 数据的位置是在 /tmp 目录下。然而,值得注意的是,如果 /tmp 目录是挂载在 tmpfs 上的,则不适合用于生产环境。

为了更适合生产或正式测试环境,建议按照以下方式修改配置:将元数据目录 log.dirs 和 WAL 数据目录 s3.wal.path(写数据盘的裸设备)指定到其他位置。

bin/kafka-server-start.sh ...\
--override  s3.telemetry.metrics.exporter.type=prometheus \
--override  s3.metrics.exporter.prom.host=0.0.0.0 \
--override  s3.metrics.exporter.prom.port=9090 \
--override  log.dirs=/root/kraft-logs \
--override  s3.wal.path=/dev/vdb \
> /dev/null 2>&1 &

注意:

  • 请将 s3.wal.path 更改为实际的本地裸设备名称。为了将 AutoMQ 的 Write-Ahead-Log(WAL)设置为本地 SSD 存储,你需要确保指定的文件路径在一个可用空间大于 10GB 的 SSD 盘上。例如--override s3.wal.path=/home/admin/automq-wal

  • 在私有数据中心部署 AutoMQ 用于生产环境,需确保本地 SSD 的可靠性。例如采用 RAID 技术。

至此,你已经完成了基于 MinIO 的 AutoMQ 集群部署,拥有了一个低成本、低延迟、秒级弹性的 Kafka 集群了。如果你需要进一步体验 AutoMQ 的 秒级分区迁移、持续自平衡等特性,可以参考官方示例[6]。

参考资料

‍‍‍‍‍[1] Install and Deploy MinIO: https://min.io/docs/minio/linux/operations/installation.html

[2] AutoMQ 1.0.6-rc0: https://github.com/AutoMQ/automq/releases

[3] Kafka Broker and Controller Configuration Reference for Confluent Platform: https://docs.confluent.io/platform/current/installation/configuration/broker-configs.html

[4] WHAT IS AUTOMQ?: https://docs.automq.com/docs/automq-opensource/HSiEwHVfdiO7rWk34vKcVvcvn2Z

[5] Example: Self-Balancing when Cluster Nodes Change: https://docs.automq.com/docs/automq-opensource/H6APwuugniOx7XktCiNcKnW8nYb

[6] AutoMQ: GETTING STARTED: https://docs.automq.com/zh/docs/automq-opensource/EvqhwAkpriAomHklOUzcUtybn7g‍

[7] The Object Store for AI Data Infrastructure: https://min.io/

‍ ‍ ‍ ‍ ‍

   往期推荐   

AutoMQ 生态集成 Apache Doris

2024-05-16

fd2fb0258cbef78889713fc4cc2839c2.png

生态集成:AutoMQ × Apache Flink

2024-04-22

26d8433a3354a3edfb360323b2946d04.png

活动预告|来 GIAC 大会听大数据降本利器:AutoMQ 基于云原生重新设计的 Kafka

2024-05-23

f11f9de34c34e873027fa9c8b3514433.png

AutoMQ 对象存储数据高效组织的秘密: Compaction

2024-05-22

bd6acfa5dfa024d212b3373e5e54226b.png

END

关于我们

我们是来自 Apache RocketMQ 和 Linux LVS 项目的核心团队,曾经见证并应对过消息队列基础设施在大型互联网公司和云计算公司的挑战。现在我们基于对象存储优先、存算分离、多云原生等技术理念,重新设计并实现了 Apache Kafka 和 Apache RocketMQ,带来高达 10 倍的成本优势和百倍的弹性效率提升。

🌟 GitHub 地址:https://github.com/AutoMQ/automq

💻 官网:https://www.automq.com

👀 B站:AutoMQ官方账号

🔍 视频号:AutoMQ

👉🏻 扫二维码  

加入我们的社区群

1ce36195fcdbb775c4ff8d4d9474e9c7.png

43489df09b35b9a72bb7f0359fc6f52d.gif

关注我们,一起学习更多云原生技术干货!

👇🏻点击下方阅读原文,前往 GitHub 了解体验!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值