AutoMQ-Kafka的替代方案實戰

AutoMQ無縫兼容kafka,并且借助S3實現數據統一存儲。這個確實解決了大問題!

1. Kafka的挑戰

  • 橫向擴展困難:擴容kafka需要手動創建分區遷移策略和復制分區數據。這個過程不僅風險高、資源密集而且耗時。
  • 存儲成本高:計算和存儲在kafka中是緊密耦合的,這意味著必須同時橫向擴展。這中耦合通常會導致資源浪費。此外為保證低延遲和高吞吐量,通常會產生大量的存儲費用。
  • 自恢復能力較弱:kafka無法從數據熱點、容量不均等異常狀態中進行自我修復。
  • 數據傾斜:kafka無法自動糾正涉及數據傾斜和熱點分區的場景,導致性能下降和運營效率低下問題。
  • 磁盤讀取限制:由于頁緩存污染,在kafka中讀取歷史數據可能會嚴重影響寫入性能。這種降低不僅影響kafka本身,還會將問題影響到上下游系統。
  • 資源使用效率低下:kafka緊密耦合的存儲和計算模型缺乏彈性。用戶必須經常性的冗余配置才能滿足峰值需求,這個導致大量資源浪費。此外,數據傾斜和流量不均可能會導致集群效率進一步降低和資源無法充分利用。

2.AutoMQ優勢

2.1 核心架構特性

  • 存算分離架構:①存儲層:基于基于對象存儲(如 AWS S3、阿里云 OSS)實現流式數據持久化,替代本地磁盤,降低存儲成本達 ?90%;②計算層:復用 Apache Kafka 100% 的計算邏輯,保持協議兼容性;③通過云盤(如 EBS)作為高性能 WAL(預寫日志),保證寫入低延遲。
  • 無狀態Broker:①Broker 節點不存儲數據,擴容時無需數據遷移,實現秒級彈性伸縮?(例如 3 節點承載 10 倍流量沖擊);②故障恢復時,直接通過共享存儲重建節點,避免傳統 Kafka 的副本同步延遲。

2.2 性能與成本優勢

  • 10倍成本優化:①存儲成本:對象存儲單價僅為云盤的 1/8(如阿里云 OSS 0.12元/GiB/月 vs ESSD 1元/GiB/月);②流量成本:消除跨可用區數據復制流量(傳統 Kafka 需多副本冗余存儲);③ 資源利用率:支持搶占式實例(Spot Instances),進一步降低計算成本。
  • 高吞吐與低延遲:①批處理優化:消息集(MessageSet)抽象實現批量壓縮(支持 LZ4、ZStandard)與傳輸,減少 I/O 次數;②零拷貝技術:通過 Linux sendfile 系統調用,數據直接從頁緩存發送到網絡,避免用戶態拷貝;③冷熱分離:熱數據由內存緩存(Log Cache)處理,冷數據直讀對象存儲,互不干擾。

2.3 自動化與運維簡化

  • 智能負載均衡:①內置自動分區重分配,替代 Kafka 的 Cruise Control,無需手動遷移數據;②支持動態流量調度,防止分區熱點問題(如某 Broker 流量突增)。
  • 故障自愈:①結合云盤(EBS)的多重掛載能力,宕機節點數據秒級切換到新節點;②對象存儲提供 11 個 9 的數據持久性,避免數據丟失風險;③監控集成:原生支持 Prometheus 和 OpenTelemetry 指標,實現實時監控與告警。

2.4 生態兼容性

  • 100% Kafka協議兼容:①無縫遷移現有 Kafka 應用:命令行工具(如 kafka-topics.sh)、客戶端 API 無需修改;②支持所有 Kafka 生態組件(如 Connect、Streams)。
  • 多云適配:支持 AWS S3、阿里云 OSS、GCP 等主流對象存儲,跨云部署無綁定風險。

2.5 適用場景

在這里插入圖片描述

2.6 AutoMQ vs Kafka

在這里插入圖片描述

2.7 總結

AutoMQ通過存算分離架構與深度云遠程優化,在保持Kafka生態兼容性的同時實現了:

  • 10倍成本降低(對象存儲+無副本冗余)
  • 100倍彈性升級(秒級擴縮容+無狀態Broker)
  • 零運維負擔(自動負載均衡+故障自愈)
  • 生產級可靠性(跨AZ容災+數據持久性11個9)

3.部署

3.1 先決條件

Docker Compose 版本 > 2.22.0
至少 8GB 可用內存

3.2 docker安裝

docker安裝,參考:https://blog.csdn.net/taotao_guiwang/article/details/135508643

docker可用鏡像:https://blog.csdn.net/taotao_guiwang/article/details/140767744

3.3 automq安裝

  • docker-compose-cluster.yaml:
    這個摘取的官方資料,但是也有一些改造:①automq各節點開放9092、9093接口;②各節點“–override advertised.listeners=”改成實際地址,如“PLAINTEXT://10.86.97.210:9192”。
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.# Single-node AutoMQ setup with MinIO for quick starts
version: "3.8"x-common-variables: &common-envKAFKA_S3_ACCESS_KEY: minioadminKAFKA_S3_SECRET_KEY: minioadminKAFKA_HEAP_OPTS: -Xms1g -Xmx4g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G# Replace CLUSTER_ID with a unique base64 UUID using "bin/kafka-storage.sh random-uuid"CLUSTER_ID: 5XF4fHIOTfSIqkmje2KFlgservices:# MinIO service for S3 storageminio:container_name: "minio"image: minio/minio:RELEASE.2025-05-24T17-08-30Zenvironment:MINIO_ROOT_USER: minioadminMINIO_ROOT_PASSWORD: minioadminMINIO_DOMAIN: minioports:- "9000:9000"  # MinIO API- "9001:9001"  # MinIO Consolecommand: [ "server", "/data", "--console-address", ":9001" ]networks:automq_net:healthcheck:test: [ "CMD", "curl", "-f", "http://minio:9000/minio/health/live" ]interval: 5stimeout: 5sretries: 3# Create needed bucketsmc:container_name: "mc"image: minio/mc:RELEASE.2025-05-21T01-59-54Zdepends_on:minio:condition: service_healthyentrypoint: >/bin/sh -c "until (/usr/bin/mc alias set minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done;/usr/bin/mc rm -r --force minio/automq-data;/usr/bin/mc rm -r --force minio/automq-ops;/usr/bin/mc mb minio/automq-data;/usr/bin/mc mb minio/automq-ops;/usr/bin/mc policy set public minio/automq-data;/usr/bin/mc policy set public minio/automq-ops;tail -f /dev/null"networks:- automq_net# Three nodes for AutoMQ clusterserver1:container_name: "automq-server1"image: automqinc/automq:1.5.1stop_grace_period: 1menvironment:<<: *common-envports:- "9092:9092"- "9093:9093"command:- bash- -c- |/opt/automq/kafka/bin/kafka-server-start.sh \/opt/automq/kafka/config/kraft/server.properties \--override cluster.id=$$CLUSTER_ID \--override node.id=0 \--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \--override advertised.listeners=PLAINTEXT://10.86.97.210:9092 \--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'networks:automq_net:depends_on:- minio- mcserver2:container_name: "automq-server2"image: automqinc/automq:1.5.1stop_grace_period: 1menvironment:<<: *common-envports:- "9192:9092"- "9193:9093"command:- bash- -c- |/opt/automq/kafka/bin/kafka-server-start.sh \/opt/automq/kafka/config/kraft/server.properties \--override cluster.id=$$CLUSTER_ID \--override node.id=1 \--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \--override advertised.listeners=PLAINTEXT://10.86.97.210:9192 \--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'networks:automq_net:depends_on:- minio- mcserver3:container_name: "automq-server3"image: automqinc/automq:1.5.1stop_grace_period: 1menvironment:<<: *common-envports:- "9292:9092"- "9293:9093"command:- bash- -c- |/opt/automq/kafka/bin/kafka-server-start.sh \/opt/automq/kafka/config/kraft/server.properties \--override cluster.id=$$CLUSTER_ID \--override node.id=2 \--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \--override advertised.listeners=PLAINTEXT://10.86.97.210:9292 \--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'networks:automq_net:depends_on:- minio- mcnetworks:automq_net:name: automq_netdriver: bridgeipam:driver: defaultconfig:- subnet: "10.6.0.0/16"gateway: "10.6.0.1"
  • 安裝:
docker-compose -f docker-compose-cluster.yaml up -d

在這里插入圖片描述
在這里插入圖片描述

  • minio訪問
    http://10.86.97.210:9001/
    賬號、密碼:minioadmin

在這里插入圖片描述

4.Springboot集成

集成方法與kafka一樣,詳見下文,springboot集成部分:https://blog.csdn.net/taotao_guiwang/article/details/149832883

5.工具調用

在這里插入圖片描述

6.相關資源

docker鏡像,如果鏡像網站不好用,可以下載后,手動加載:
鏡像見,百度網盤:https://pan.baidu.com/s/16OsmYtorstnra0ycJlqgtQ?pwd=3rbh
在這里插入圖片描述
加載方法:

docker load -i mc.RELEASE.2025-05-21T01-59-54Z.tar
docker load -i minio.RELEASE.2025-05-24T17-08-30Z.tar
docker load -i automq:1.5.1.tar
# 查看鏡像
docker images

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92871.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92871.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92871.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Numpy科學計算與數據分析:Numpy線性代數基礎與實踐

Numpy線性代數實踐&#xff1a;從矩陣乘法到特征值 學習目標 通過本課程&#xff0c;學員將掌握Numpy中處理線性代數問題的基本方法&#xff0c;包括矩陣乘法、求解線性方程組以及計算特征值和特征向量。本課程將通過理論與實踐相結合的方式&#xff0c;幫助學員深入理解這些…

CrackMapExec--安裝、使用

用途限制聲明&#xff0c;本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具&#xff0c;嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果&#xff0c;作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

深入理解模板方法模式:框架設計的“骨架”藝術

目錄 前言 一、模板方法模式的核心思想 二、模板方法模式的結構組成 1. 抽象類&#xff08;Abstract Class&#xff09; 2. 具體子類&#xff08;Concrete Class&#xff09; 三、C 實現示例&#xff1a;咖啡與茶的制作流程 步驟 1&#xff1a;定義抽象類&#xff08;飲料…

LinkedList 深度解析:核心原理與實踐

文章目錄 一、底層數據結構與特性 1. 核心數據結構 2. 關鍵特性 二、核心操作機制解析 1. 添加元素機制 2. 刪除元素機制 三、性能關鍵點分析 1. 時間復雜度對比 2. 空間開銷 四、線程安全解決方案 1. 同步包裝器 2. 使用并發集合 五、經典面試題解析 1. ArrayList 和 LinkedLi…

Jmeter性能測試之安裝及啟動Jmeter

1. 安裝JDK Jmeter依賴JDK環境,如果電腦沒有JDK,需要安裝JDK.如下是Jmeter版本與JDK版本對應關系. 2. Jmeter下載安裝 下載鏈接&#xff1a;https://archive.apache.org/dist/jmeter/binaries/ windows下載.zip壓縮包Linux下載.tar壓縮包 下一步下一步就行 3. 配置環境變…

ShadowKV 機制深度解析:高吞吐長上下文 LLM 推理的 KV 緩存“影子”方案

背景與核心思想簡介 在LLM的長上下文推理中&#xff0c;KV Cache成為影響速度和內存的關鍵因素。每生成一個新token&#xff0c;模型需要對所有先前token的鍵&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;向量執行自注意力計算。傳統方法會將所有過去的K/V向量…

spring-ai整合PGVector實現RAG

背景 最近公司的產品和業務線&#xff0c;要求往ai方向靠攏&#xff0c;在研發各種智能體&#xff0c;整理下最近學習的過程&#xff0c;將一部分內容整理出來&#xff0c;分享給需要的同學。 這篇文章將會提供詳細的例子以及踩坑說明。主要內容是整合spring-ai&#xff0c;同…

Git 亂碼文件處理全流程指南

一、問題背景與核心目標 1.1 問題描述 在 Git 倉庫中發現了一個異常亂碼文件&#xff1a; "\001\342\240\025\250\325\3738\f\036\035\006\004\240\002\240\002\b\003\004\340\002\340\002\340\002\034\034\001\001\004:\016\020\001\005\016\016\016\211\266\257\211\266…

JavaScript垃圾回收機制

1.垃圾回收的概念 1.1 什么是垃圾回收機制&#xff1a; GC 即 Garbage Collection &#xff0c;程序工作過程中會產生很多"垃圾"&#xff0c;這些垃圾是程序不用的內存或者是之前用過了&#xff0c;以后不會再用的內存空間&#xff0c;而 GC 就是負責回收垃圾的&…

工業相機選擇規則

一、相機分辨率選擇相機分辨率指的是相機傳感器捕捉圖像細節的能力&#xff0c;具體來說就是傳感器上有效像素的總數量。可以把它理解為構成數字圖像的“小方塊”&#xff08;像素&#xff09;有多少個。工業領域內相機的分辨率的選擇根據更具產品需要的精度要求和產品大小來確…

【Web安全】csrf、ssrf和xxe的區別

CSRF、SSRF 和 XXE 是三種不同類型的網絡安全漏洞&#xff0c;它們的原理、攻擊目標、利用方式和危害場景均有顯著區別。以下從核心定義、原理、場景等維度詳細對比三者的差異。一、核心定義與原理對比漏洞類型全稱核心定義核心原理CSRF跨站請求偽造攻擊者誘導用戶在已登錄的情…

【Lua】XLua一鍵構建工具

將以下代碼放入Editor文件夾&#xff0c;點擊菜單欄的XLua/一鍵生成代碼和熱補丁 即可。using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using UnityEditor; using UnityEngine;/// <summary> /// XLua自動化構建工具 //…

20250808:EasyGBS 對接大華 ICC 平臺問題處理

最近有個現場在對接大華 ICC 平臺時&#xff0c;客戶反饋&#xff1a;EasyGBS 級聯成功&#xff0c;但 ICC 顯示下級離線。EasyGBS 成功對接過很多家國標平臺&#xff0c;但這種情況確實少見。我們遠程過去確認配置無誤后&#xff0c;就進行了抓包&#xff0c;拿到包我就納悶了…

js使用webscoket時使用自定義二進制包協議時并發問題處理

this.server new WebSocket.Server({ port: this.port });this.server.on(connection, (ws, req) > {const uniqueId dataUtil.uuid();ws.id uniqueId;global.serverSession.set(uniqueId, ws);logger.debug({ message: 客戶端已連接, traceId: ws.id, address: req.sock…

元數據管理與數據治理平臺:Apache Atlas 分類傳播 Classification Propagation

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。Apache Atlas 框架是一套可擴展的核心基礎治理服務&#xff0c;使企業能夠有效、高效地滿足 Hadoop 中的合規性要求&#xff0c;并支持與整個企…

TSF應用開發與運維部署

架構演進歷程&#xff1a;單體架構-->SOA架構-->微服務架構-->Service Mesh騰訊微服務平臺TSF (Tencent Service Framework) 是一個圍繞應用和微服務的 PaaS 平臺。提供服務全生命周期管理能力和數據化運營支持。提供多維度應用、服務、機器的監控數據&#xff0c;助力…

linux開發之mmap內存映射

mmap概念 mmp是 將文件或設備直接映射到進程的虛擬內存空間 的一種機制&#xff0c;可實現程序像訪問內存一樣訪問文件&#xff0c;而不需要傳統的 read()/write()系統調用 文件內容被映射到進程的地址空間&#xff0c;讀寫文件就像操作內存一樣&#xff0c;操作系統負責自動同…

CPP繼承

繼承 一、繼承概述 1、為什么需要繼承 如下示例&#xff0c;Person 類、Student 類、Teacher 類有大量重復的代碼&#xff0c;造成代碼冗余&#xff0c;降低開發效率。我們可以通過繼承來解決這一問題。在面向對象的編程語言中&#xff0c;繼承是一個核心概念。主要作用將重復的…

模塊 PCB 技術在未來通信領域的創新突破方向

未來通信領域對數據傳輸速率、信號穩定性及設備集成度的要求持續攀升&#xff0c;模塊 PCB 作為通信設備的關鍵組件&#xff0c;其技術創新成為推動行業發展的核心動力。獵板 PCB 憑借深厚的技術積累與持續的研發投入&#xff0c;在模塊 PCB 技術創新方面取得諸多突破&#xff…

mysql的InnoDB索引總結

MySQL InnoDB索引知識點總結 1. 索引類型 1.1 聚簇索引&#xff08;Clustered Index&#xff09; 定義與特性 定義&#xff1a;聚簇索引是InnoDB的默認存儲方式&#xff0c;數據行按照主鍵的順序物理存儲在磁盤上特性&#xff1a; 每個InnoDB表只能有一個聚簇索引數據頁中的記錄…