先决条件
提示:对于生产环境,建议有 5 台主机来部署 AutoMQ。AutoMQ 建议主机应为 Linux amd64 系统,每个系统都有 2 个 CPU 和 16GB 内存。对于测试和开发,您可以用更少的钱过日子。
安装并启动 AutoMQ 集群
步骤 1:生成 S3 URL
以下安装步骤已针对 1.1.0 以下的 AutoMQ 版本进行了验证。请参阅最新的安装文档以获取更新的安装步骤。AutoMQ 提供了 automq-kafka-admin.sh 工具,允许快速启动 AutoMQ。只需提供一个兼容 S3 的 URL,其中包含所需的端点和身份验证信息,只需按一下按钮即可启动 AutoMQ,无需手动生成集群 ID 或格式化存储。在终端窗口中,导航到 AutoMQ 二进制文件的安装位置,然后运行以下命令:
bin/automq-kafka-admin.sh generate-s3-url \
--s3-access-key=XXX \
--s3-secret-key=YYY \
--s3-region=us-east-1 \
--s3-endpoint=http://127.0.0.1:9000 \
--s3-data-bucket=automq-data \
--s3-ops-bucket=automq-ops
使用 MinIO 时,可以使用以下配置来生成特定的 S3 URL。
参数 此示例中的默认值 描述 --s3-access-key minioadmin 唯一标识符,类似于用户名,用于标识发出请求的用户。 --s3-secret-key minioadmin 一种类似密码的秘密凭据,与访问密钥结合使用,用于对请求进行签名和身份验证。 --s3-region us-east-1 us-east-1 是 MinIO 的默认值。如果适用,请使用 MinIO 配置文件中指定的区域。 --s3-endpoint http://10.1.0.240:9000 通过运行 sudo systemctl status minio.service 命令,您可以检索端点 --s3-data-bucket automq-data automq 数据 --s3-ops-bucket automq-ops automq-运维输出结果
执行命令后,它将自动在以下阶段进行:
1 . 使用提供的 accessKey 和 secretKey 探索 S3 的基本功能,以验证 AutoMQ 和 S3 之间的兼容性。
2 . 使用身份和终端节点信息生成 S3Url。
3 . 使用 S3Url 获取 AutoMQ 的 Startup 命令示例。在命令中,将 --controller-list 和 --broker-list 替换为实际的 CONTROLLER 和 BROKER 部署要求。
执行结果的截断示例:
############ Ping s3 ########################
[ OK ] Write object
[ OK ] RangeRead object
[ OK ] Delete object
[ OK ] CreateMultipartUpload
[ OK ] UploadPart
[ OK ] CompleteMultipartUpload
[ OK ] UploadPartCopy
[ OK ] Delete objects
############ String of s3url ################
Your s3url is:
s3://127.0.0.1:9000?s3-access-key=XXX-secret-key=YYY-region=us-east-1&s3-endpoint-protocol=http&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=GhFIfiqTSkKo87eA0nyqbg
...
如果不是上述情况,您将收到如下所示的错误消息。
[ FAILED ] Delete objects
FAILED: Caught exception Failed to Delete objects on S3. Here are your parameters about S3: s3 parameters{endpoint='https://127.0.0.1:9000', region='us-east-1', bucket='automq-data', isForcePathStyle=false, credentialsProviders=[org.apache.kafka.tools.automq.GenerateS3UrlCmd$$Lambda$112/0x000000800109cdc8@5cbd159f], tagging=null}.
Here are some advices:
You are using https endpoint. Please make sure your object storage service supports https.
forcePathStyle is set as false. Please set it as true if you are using minio.
确保您使用的是访问密钥,而不是用户名和密码。此外,在撰写本文时,AutoMQ 似乎不支持 https。
步骤 2:生成启动命令列表
将上一步生成的命令中的 --controller-list 和 --broker-list 替换为您的主机信息。具体来说,使用默认端口 9092 和 9093,将它们替换为环境准备中提到的 3 个 CONTROLLER 和 2 个 BROKER 的 IP 地址。如果您在本地运行,则需要使用您的私有 IP 地址,而不是您的公共 IP 地址。
然后将 s3-path-style 更改为 true。
在终端窗口中运行编辑过的命令:
bin/automq-kafka-admin.sh generate-start-command \
--s3-url="s3://127.0.0.1:9000?s3-access-key=XXX-secret-key=YYY&s3-region=us-east-1&s3-endpoint-protocol=http&s3-data-bucket=automq-data&s3-path-style=true&s3-ops-bucket=automq-ops&cluster-id=GhFIfiqTSkKo87eA0nyqbg" \
--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 Yes 由命令行工具 bin/automq-kafka-admin.sh generate-s3-url 生成,包括认证、集群 ID 等信息 --controller-list Yes 您需要提供至少一个地址以用作 CONTROLLER 主机的 IP 和端口列表。格式应为 IP1:PORT1;IP2:端口2;IP3:端口3。 --broker-list Yes 您至少需要一个地址才能用作 BROKER 主机 IP 和端口列表。格式应为 IP1:PORT1;IP2:端口2;IP3:端口3。 --controller-only-mode No 关于CONTROLLER节点是否专门担任CONTROLLER角色的决定是可配置的。默认情况下,此设置为 false,这意味着已部署的 CONTROLLER 节点还会同时承担 BROKER 角色。输出结果
执行该命令后,它会生成用于启动 AutoMQ 的命令。截断的终端响应应如下所示:
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 JDK17 is installed on your host. You can verify the Java version by executing 'java -version'.
bin/kafka-server-start.sh --s3-url="s3://127.0.0.1:9000?s3-access-key=XXX-secret-key=YYY&s3-region=us-east-1&s3-endpoint-protocol=http&s3-data-bucket=automq-data&s3-path-style=true&s3-ops-bucket=automq-ops&cluster-id=GhFIfiqTSkKo87eA0nyqbg" --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
...
提示:node.id 的默认生成从 0 开始。
步骤 3:启动 AutoMQ
要启动集群,请在指定的 CONTROLLER 或 BROKER 主机上执行上一步中的命令列表。例如,要在 192.168.0.1 上启动第一个 CONTROLLER 进程,请运行生成的启动命令列表中的第一个命令。
bin/kafka-server-start.sh --s3-url="s3://127.0.0.1:9000?s3-access-key=XXX&s3-secret-key=YYYY&s3-region=us-east-1&s3-endpoint-protocol=http&s3-data-bucket=automq-data&s3-path-style=false&s3-ops-bucket=automq-ops&cluster-id=GhFIfiqTSkKo87eA0nyqbg" --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 yes 由 bin/automq-kafka-admin.sh 工具生成,包括身份验证、集群 ID 和其他相关信息。 process.roles yes 同时作为 CONTROLLER 和 BROKER 的主机的配置值可以设置为“CONTROLLER, BROKER”。 node.id yes 整数用于唯一标识 Kafka 集群中的 BROKER 或 CONTROLLER,它们在集群中必须是唯一的。 controller.quorum.voters yes 参与KRAFT选举的主机信息包括nodeid、IP、port信息,例如:0@192.168.0.1:9093、1@192.168.0.2:9093、2@192.168.0.3:9093。 listeners yes 用于侦听的 IP 地址和端口。 advertised.listeners yes BROKER为客户提供访问地址。 log.dirs no 用于存储 KRaft 和代理元数据的目录。 s3.wal.path no 在生产环境中,建议将 AutoMQ WAL 数据存储在专用挂载的原始设备卷上。这种方法可以提供更好的性能,因为 AutoMQ 支持将数据写入原始设备,从而减少延迟。请确保正确配置存储 WAL 数据的路径。 autobalancer.controller.enable no 默认值为 false,这将禁用流量重新平衡。启用自动流量再平衡功能后,AutoMQ 的自动均衡组件将自动迁移分区,确保整体流量均衡。提示:如果您需要启用连续自平衡或运行 示例:集群节点更改时自平衡。建议在启动期间明确指定控制器的参数。--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 更改为实际的本地原始设备名称,请确保指定的文件路径指向可用空间大于 10GB 的本地 SSD 存储。例如,将 AutoMQ Write-Ahead-Log (WAL) 设置为存储在本地 SSD 磁盘上:--override s3.wal.path=/home/admin/automq-wal
最后的思考
至此,您已在 MinIO 上成功部署了 AutoMQ 集群,该集群提供了一个低成本、高性能且高效扩展的 Kafka 集群。MinIO 增强其与 AutoMQ 集成的突出功能之一是其强大的消息传递和通知系统。MinIO提供了一个事件通知系统,可以与Apache Kafka API无缝集成,实现实时事件处理和分析。这种集成使组织能够设置事件驱动的架构,这些架构可以立即对对象存储的变化做出反应。此外,MinIO 对服务器端复制的广泛支持,确保您的 AutoMQ 数据可以跨多个区域和数据中心进行复制,从而增强数据的持久性和可用性。这种复制功能对于维护业务连续性和灾难恢复计划至关重要,可确保数据流保持不间断并具有故障复原能力。结合这些功能,MinIO 不仅可以解决与 Kafka 相关的存储挑战,还可以增强数据流架构的整体功能。无论您是处理高吞吐量数据流,还是需要严格的数据一致性和可用性保证,MinIO 和 AutoMQ 都能提供全面的解决方案,满足现代数据驱动应用程序的需求。