基于 Kafka 的经验:AutoMQ 和 MinIO 如何解决成本和弹性挑战

Apache Kafka 因其出色的设计和强大的功能而成为流式处理的事实标准。它不仅定义了现代流式处理的架构,而且其独特的分布式日志抽象还为实时数据流处理和分析提供了前所未有的功能。Kafka 的成功在于它能够满足高吞吐量和低延迟的数据处理需求,多年来,它形成了极其丰富的供应商生态系统,广泛应用于各种生产场景。然而,随着云计算和云原生技术的快速发展,Kafka 面临的挑战越来越多。传统的存储架构正在努力满足云环境中对成本效益和弹性的需求,这促使人们重新评估 Kafka 的存储模型。分层存储曾经被视为一种可能的解决方案,它试图通过在不同介质之间分层数据存储来降低成本并延长数据的生命周期。然而,这种方法并没有完全解决Kafka的痛点,反而增加了系统的复杂性和操作难度。AutoMQ 是 Kafka 的一个开源分支,它以基于对象存储的共享存储架构取代了 Kafka 的存储层,同时 100% 复用了 Kafka 的计算层代码,保证了与 Kafka API 协议和生态系统的完全兼容性。如下图所示,这种创新的共享存储架构不仅通过共享存储实现了技术和成本优势,而且在不牺牲时延的情况下,完全解决了Kafka中原有的成本和弹性问题。得益于 MinIO 与 AWS S3 API 的完全兼容性,您甚至可以在私有数据中心部署 AutoMQ 集群,以获得与 Kafka API 完全兼容的流式处理系统,但提供更好的成本效益、极高的可扩展性和个位数毫秒的延迟。本文将指导您如何部署 AutoMQ 集群并将其数据存储在 MinIO 上。

使用案例

AutoMQ 创新的分解存储架构开辟了大量用例,可满足现代数据流和处理环境的需求:

1 . 经济高效的数据流:AutoMQ 对对象存储的使用大大降低了存储大量流数据的成本,使其成为预算受限的组织或寻求优化支出的组织的理想选择。

2 . 可扩展性,满足不断增长的数据需求:AutoMQ 能够轻松向外扩展,可以在不影响性能的情况下处理不断增加的数据负载,从而确保组织可以根据需要增加数据流。

3 . 低延迟应用程序:AutoMQ实现了个位数毫秒的时延,适用于需要实时数据处理和分析的应用,如金融交易、物联网数据流、在线游戏等。

4 . 混合云、多云和私有云: 与 Kafka 的其他替代方案不同,AutoMQ 的分解存储模型允许其部署在私有数据中心,支持完全本地、混合和多云环境。对于需要维护数据主权或具有特定监管要求的组织来说,这种灵活性至关重要。

但为什么要将它与 MinIO 一起使用呢?开箱即用的 MinIO 包括

  • 加密:MinIO 支持静态加密和传输中加密。这确保了从发出调用的那一刻起,数据在事务的所有方面都得到了加密,直到对象被放入存储桶。

  • Bitrot 保护:物理磁盘上的数据可能损坏的原因有多种。这可能是由于电压尖峰、固件中的错误、误定向的读取和写入等原因造成的。MinIO 确保这些内容在动态中被捕获和修复,以确保数据的完整性。

  • 纠删码:MinIO 不是使用 RAID 确保数据冗余,这会增加额外的性能开销,而是使用此数据冗余和可用性功能来动态重建对象,而无需任何额外的硬件或软件。

  • 安全访问 ACL 和 PBAC:支持内置 IDP 的 IAM S3 样式策略,有关更多信息,请参阅 MinIO 最佳实践 - 安全性和访问控制。

  • 分层:对于不经常访问的数据,您可以将数据抽取到-另一个运行 MinIO 的冷存储中,这样您就可以在最佳硬件上优化最新数据,而不会占用未使用的数据空间。

  • 对象锁定和保留:MinIO 支持对象锁定(保留),它强制执行一次写入并准备好许多操作,以实现基于持续时间和无限期的法律保留。这允许关键数据保留合规性,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 要求。

先决条件

  • 正常运行的 MinIO 环境。如果您尚未设置 MinIO 环境,可以按照官方指南进行安装。TK MinIO支持广泛的复制功能。以下是一些最佳实践。

  • 若要在本地部署,需要满足以下条件:To deploy locally you will need the following:

    | 适用于 Linux 的 Linux/Mac/Windows 子系统

    | Docker 码头工人

    | Docker Compose 版本 > 2.22.0

    | 至少 8 GB 的可用内存

    | JDK 17

提示:对于生产环境,建议有 5 台主机来部署 AutoMQ。AutoMQ 建议主机应为 Linux amd64 系统,每个系统都有 2 个 CPU 和 16GB 内存。对于测试和开发,您可以用更少的钱过日子。

  • 从 AutoMQ Github Releases 下载最新的官方二进制安装包以安装 AutoMQ。

  • 在 MinIO 中创建两个存储桶,分别名为 automq-data 和 automq-ops。

  • 最后,您需要创建一个访问密钥。导航到 MinIO 控制台中的“用户”面板,然后导航到“创建访问密钥”。 请注意,您只能在创建时复制密钥,因此请确保访问密钥的两个部分都是安全的。

安装并启动 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 都能提供全面的解决方案,满足现代数据驱动应用程序的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:Most Probable Densest Subgraphs

摘要 本文提出了一种在不确定图中发现最有可能稠密子图(MPDS)的新方法。不确定图中的每条边都有存在概率,使得计算稠密子图变得複杂。作者定义了稠密子图概率,并证明了计算该概率是#P难的。为了解决这个问题,设计了基…

数据科学 - 数据预处理 (数据清洗,结构化数据)

1. 前言 数据清洗与结构化数据在数据分析和机器学习项目中扮演着至关重要的角色。随着大数据时代的到来,数据的质量、准确性和可用性成为决定项目成功与否的关键因素。 数据清洗提高数据质量,保证数据集的一致性;促进数据分析与挖掘&#xf…

【大数据开发语言Scala的入门教程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🪁Scala 🪡Scala是一种功能丰富且具有强大表达能力的静态类型…

【2024蓝桥杯/C++/B组/传送阵】

题目 问题代码 #include<bits/stdc.h> using namespace std;const int N 1e610; int n; int porter[N]; int ans; int sign[N]; bool used;void dfs(int now, int cnt) {if(sign[now] && used){ans max(ans, cnt);return;}if(!sign[now]){cnt, sign[now] 1; …

成为git砖家(8): 使用 git log 查询范围内的 commit

文章目录 1. 查询 git log 的文档2. 不带任何参数: git log 啥意思&#xff1f;3. git log 最主要功能是什么&#xff1f;4. git log <commit1>..<commit2> 什么意思5. 查看最近n次commit6. References 1. 查询 git log 的文档 git help log --web市面上针对 git …

ubuntu sudo命令不需要密码

sudo vim /etc/sudoers1、注释掉 %sudo ALL(ALL:ALL) AL 2、添加 用户名 ALL(ALL:ALL) NOPASSWD:ALL保存&#xff0c;退出即可

NineData云原生智能数据管理平台新功能发布|2024年7月版

本月发布 12 项更新&#xff0c;其中性能优化 3 项、功能优化 8 项、安全性发布 1 项。 1. 性能优化 数据复制 - SQL Server 增量性能优化 调整读取和写入方式&#xff0c;让 SQL Server 增量复制的性能轻松达到 5000 RPS 以上。 数据复制 - Doris|SelectDB|StarRocks 性能优…

链式二叉树的实现

文章目录 &#x1f3af;引言&#x1f453;链式二叉树的实现1.链式二叉树的结构2.链式二叉树相关操作实现2.1源码展示2.2函数实现详解2.2.1前中后序遍历2.2.2二叉树的其他方法实现2.2.3二叉树的层序遍历和判断是否是完全二叉树 &#x1f947;结语 &#x1f3af;引言 欢迎来到Ha…

【多模态大模型】 BLIP-2 in ICML 2023

一、引言 论文&#xff1a; BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 作者&#xff1a; Salesforce Research 代码&#xff1a; BLIP-2 特点&#xff1a; 该方法分别使用冻结的图像编码器&#xff08;ViT-L/…

全球氢钎焊市场规划预测:未来六年CAGR为3.4%

随着全球制造业的持续发展和消费者对高质量产品的需求增加&#xff0c;氢钎焊作为一种高效的焊接技术&#xff0c;正逐渐受到市场的广泛关注。本文旨在通过深度分析氢钎焊行业的各个维度&#xff0c;揭示行业发展趋势和潜在机会。 【市场趋势的演变】 1. 市场规模与增长&#…

C++自定义接口类设计器之可对称赋值三

关键代码 QStringList newLines;for (const auto& line : lines) {auto equalIndex line.indexOf("");if(-1 ! equalIndex) {// a b; 赋值auto var line.mid(0, equalIndex).trimmed();auto value line.mid(equalIndex 1).trimmed();if(value.endsWith(&quo…

【网络安全】副业兼职日入12k,网安人不接私活就太可惜了!

暑假来了&#xff0c;很多同学后台私信我求做兼职的路子&#xff0c;这里&#xff0c;我整理了一份详细攻略&#xff0c;请大家务必查收&#xff0c;这可能会帮你把几个学期的生活费都赚够&#xff01; Up刚工作就开始做挖漏洞兼职&#xff0c;最高一次赚了12k&#xff0c;后面…

STM32Cubemx在FreeRTOS中使用面向对象的方式使用串口

文章目录 前言一、创建FreeRTOS工程二、创建文件对串口进行封装三、代码编写总结 前言 本篇文章将带大家来学习使用面向对象的方式在FreeRTOS中使用串口&#xff0c;使用面向对象的方法非常适合编写可移植性强的代码&#xff0c;那么这篇文章就带大家来看一下这个代码要怎么写…

模型 正态分布(通俗解读)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。随机世界的规律&#xff0c;大自然里的钟形曲线。 1 正态分布的应用 1.1 质量管理之六西格玛 六西格玛是一种旨在通过识别和消除缺陷原因来提高制造过程或业务流程质量的管理策略。我们先来了解下六…

CX32L003F8P6T芯片解密程序破解

CX32L003F8P6T可替代N76E003 CX32L003是一款内嵌32位ARM Cortex-M0内核的超低功耗、Low Pin Count和宽电压工作范围(2.5V~5.5V)的微控制器&#xff0c;最高可运行在24MHz&#xff0c;内置32K/64K字节的嵌入式Flash&#xff0c;4K字节的SRAM&#xff0c;集成了12位1Msps高精度SA…

C++ 初探(13课)

#include<iostream> using namespace std; int main() {cout<<"Helloworld"<<endl; } 函数:一段能够被反复调用的代码,可以接收输入,进行并行处理或者产生输出; ——返回类型:表示函数返回结果的类型,可以为void ——函数名称:用于函数的…

【JAVA设计模式】适配器模式——类适配器模式详解与案例分析

前言 在软件设计中&#xff0c;适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在使不兼容的接口能够协同工作。它通过引入一个适配器类&#xff0c;帮助两个接口之间进行适配&#xff0c;使得它们能够互相操作。本文将详细介绍适配器模…

大学生编程入门指南:如何从零开始?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 编程语言选择 &#x1f4da; 1. Python 2. JavaScript 3. Java 4. C/C 如何选择适合自己的编程语言&a…

vim列编辑模式

在编辑文本时&#xff0c;经常会有这样的需求&#xff0c;对特定列进行进行批量编辑。比如批量注释一段代码&#xff0c;或者删除待定字符&#xff08;如一列空格&#xff09;。幸运的是VIM支持列编辑模式。 假设文本内容&#xff1a; Maximum length of a custom vocabulary…

svm总结

什么是SVM&#xff1f; SVM的英文全称是Support Vector Machines&#xff0c;我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式&#xff0c;开启我们的SVM之旅吧。 在很久以前的情人节&#xff0c;一位大侠要去救他的爱人&#xff0c;但天…