知乎启用AutoMQ替换Kafka,开辟成本优化与运维提效新纪元

作者:知乎在线架构组 王金龙

关于知乎

知乎公司,成立于 2010 年 8 月 10 日,于 2011 年 1 月 26 日正式上线,是中文互联网的高质量问答社区和创作者聚集的原创内容平台。

知乎起步于问答,而超越了问答。知乎以「生态第一」为战略,「专业讨论」为核心定位,构建起富有包容性和生命力的社区生态,覆盖热榜、知乎直答、想法、盐言故事、知乎知学堂、内容商业化解决方案等多种产品和功能,为用户、创作者和商业合作伙伴提供多样化的丰富体验。

立足于应用层和数据层的丰厚积累,知乎一直奋进于技术创新前沿,在 NLP、人工智能、中文语言大模型领域形成研发和应用优势,先后推出「智能社区」、「知海图 AI」大模型、知乎直答等技术战略和产品,为社区生态和用户体验持续赋能。

知乎在大规模运维 Kafka 集群时遇到的问题

存储服务的静态资源池不够灵活

我们原来基于云厂商的裸金属机器划分了消息队列的资源池。在业务流量上涨的场景下,负责热点流量的 Kafka 节点会导致存储节点磁盘空间快速到达水位线。这时需要对存储资源池进行扩容。

在扩容的过程中产生了两个问题:

  1. 存储资源池需要进行数据均衡:在此期间有大量的数据需要在资源池内进行数据搬迁,耗时很长,产生了很大的运维成本。数据搬迁期间会触发大量的数据冷读,由于 Kafka 原生存储模型限制,单个分区数据只能保存在一块磁盘上,在数据迁移期间占用了非常多的磁盘带宽,新写入的消息因为无法使用足够多的磁盘带宽,导致迁移期间写入延迟达到了 10 秒级以上。同时大规模读取历史数据导致 Page Cache 频繁 Miss,线上正常业务读取的流量也会频繁读取磁盘,进一步争抢磁盘带宽,导致大规模消费堆积。数据搬迁操作给集群读写延迟和整体稳定性带来了非常大的影响。

  2. 存储资源池计算资源闲置:Kafka 是 IO 密集型的存储中间件,计算资源不会首先成为资源池瓶颈。资源池的隔离划分虽然增强了服务稳定性,但是同时也让如何充分利用剩余的计算资源变成了新的难点。

大规模突发流量快速扩缩容问题

面对大规模突发流量时,作为服务维护方需要保证稳定服务稳定性。为此有一般两种方式:

方式 1 :一种是尽快进行资源扩容,并将热点分区打散到新的机器上。

方式 2 :通过预先分配额外资源保证集群在业务流量高峰时容量充足。

每种选择同样也产生了新的问题:

  1. 方式 1 在 Kafka 原生架构模型下,扩容节点同样需要数据搬迁,很可能搬迁完成后已经错过了突发流量的时间窗口。不能很好的提供更稳定的消息队列服务。

  2. 方式 2 通过资源池预留更多额外资源,可以保证业务的稳定性,但是会导致资源池的利用率偏低,增加企业技术成本。

知乎对消息中间件选型的要求

  • 低资源成本&低运维成本&高资源利用率

存算分离,可以灵活按需配置计算资源和存储资源。最好可以像无状态服务一样可以利用公司统一资源池,不用再单独维护存储资源池。降低整体资源池冗余程度,提高资源池利用率。最好可以避免数据迁移引入的运维成本。

  • 弹性服务能力:

热点流量下可以快速扩容服务,对外提供更多的服务容量,流量峰值经过后可以释放对应资源,进一步压缩成本。同时扩容时间尽可能短,避免之前因为数据搬迁过慢导致错过流量洪峰的问题。

  • 低迁移成本&高稳定性&高兼容性:

公司整体依赖 Kafka API 进行异步链路通信,在线业务解耦,推荐埋点效果日志,推荐数据样本拼接等大量场景均基于 Kafka API。选用其他消息中间件需要更换 SDK 接口,会在迁移的过程中增加极大的人力成本负担。我们期望业务方无需改造代码即可迁移。

AutoMQ 如何解决知乎遇到的问题

AutoMQ 充分利用云厂商提供的存储基础设施,对原生的 Kafka 进行了存算分离改造,极大降低了 Kafka 资源成本和运维成本。AutoMQ 基于 EBS 云盘和对象存储提供的服务能力,呈现了一款可以对外提供低延迟高吞吐海量数据存储的次世代消息中间件。

  • 存算分离带来的极大资源成本优势:

    • 上层应用不再强绑定存储资源机器,无需进行存储节点数据搬迁等运维动作,极大程度减少集群运维成本。

    • 原有资源池可以配置计算型机器,依靠云厂商提供稳定的存储服务,无需额外配置存储资源,显著降低消息队列资源池的成本。

    • 充分利用对象存储,可以提供更高规模的存储带宽和相比自建更低的存储成本。

  • 赋能存储服务更灵活的弹性能力:

    • 云原生兼容:将 Kafka 转变为近似无状态服务,可以充分利用现有 K8s 基础设施提供的标准能力,显著减少运维成本。

    • 集群秒级扩缩容:AutoMQ 的创新架构将 Kafka 的分区的数据主节点的职责能力进行了拆分,数据读写等计算层逻辑保留,存储层逻辑下沉到自研的 S3Stream[1] 架构,将底层数据灵活的分散到 EBS 云盘和对象存储中。扩缩容动作无需进行数据搬迁,在集群 Meta 节点触发迁移分区到新扩容节点即可完成热点分区打散动作。迁移过程中流量无损对业务透明无影响。

  • 100% 兼容标准 Kafka API:

    • 业务无需改造现有代码,服务维护方无需维护 Kafka API 兼容层,省去服务迁移导致不必要的人力开销。

    • 原生 Kafka 生态无缝兼容,可以直接复用公司原有的 Kafka 周边基础设施,避免重复建设。

AutoMQ 在知乎落地后的效果

AutoMQ 在知乎的应用场景

AutoMQ 在知乎大规模落地后,获得了如下的效果:

  1. 成本降低 80%:得益于 AutoMQ 的弹性架构,并充分撬动对象存储的成本优势,在已落地的业务场景,AutoMQ 相比较原 Apache Kafka 的集群成本降低了 80%。

  2. 无需维护独立的存储和计算资源池:借助于 AutoMQ 节点无状态特性可以分钟级切换 AutoMQ 集群的资源池,不需要再维护独立的静态存储机器资源池,进一步降低了资源的浪费。

  3. 更高的冷读带宽&消除了冷读读写入产生的副作用[2]:对象存储可以提供相比原来基于磁盘部署的 Kafka 集群更高的读取带宽,同时冷读不影响集群实时的写入流量。进一步提高了服务的稳定性。

  4. 无状态架构大幅度降低了运维成本:做好日常监控的情况下无额外运维成本,基于知乎自研的 K8s 的控制面配合 AutoMQ 的自动负载均衡能力无需人力过多参与运维。

目前,知乎在基于裸金属自建的 K8s 集群上大规模部署了 AutoMQ ,集群承担的流量峰值近 20 GiB/s,如下图所示。

近 20 GiB/s 的 AutoMQ 集群

引用

[1] AutoMQ 基于 S3 的共享流存储库:https://docs.automq.com/zh/automq/architecture/s3stream-shared-streaming-storage/overview

[2] AutoMQ 冷热隔离架构& 5 倍冷读效率提升:https://docs.automq.com/zh/automq/architecture/technical-advantage/5x-catch-up-read-efficiency

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

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

相关文章

Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...

全文链接:https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果,特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素:跳跃因子的自适应算法以及逆 Fisher 矩阵的计算,该逆 Fisher 矩阵可用作提议密…

服务器如何隐藏端口才能不被扫描?

在服务器上隐藏端口以避免被扫描,是一种增强安全性的措施。虽然完全隐藏端口不太可能(因为网络通信本质上需要暴露端口),但可以通过一系列技术手段尽量降低端口被扫描或探测的可能性。以下是详细的实现方法: 1. 更改默…

专业清洁艺术,还原生活本色——友嘉高效除菌洗碗机

生活中,每个人都渴望拥有一份洁净的生活环境。而家,作为我们最温馨的港湾,对洁净的追求更是无时无刻不在进行。每当饭后的欢声笑语过后,面对一堆沾满油渍、藏匿着细菌的餐具,我们不禁感到一丝烦忧。然而,有…

Neo4j 图数据库安装与操作指南(以mac为例)

目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew(可选) 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…

无人机主控芯片技术与算法详解!

一、无人机主控芯片核心技术 高性能CPU: 无人机需要高性能的CPU来处理复杂的飞行控制算法、图像处理和数据传输等任务。目前,无人机的CPU主要有大疆自研的飞控系统、高通提供的无人机设计平台Snapdragon Flight,以及基于开源平台APM、Px4等…

基于python的汽车数据爬取数据分析与可视化

一、研究背景 基于提供的代码片段和讨论,我们可以得出一个与网络抓取、数据处理和数据可视化相关的研究背景,该背景涉及到汽车行业。以下是研究背景的陈述: "在迅速发展的汽车行业中,准确和及时的数据对各方利益相关者至关…

JAVA:Springboot 集成 WebSocket 和 STOMP 实时消息的技术指南

1、简述 随着互联网应用的复杂性和实时性需求的增加,传统的 HTTP 请求响应模式已不能满足某些场景的需求。WebSocket 和 STOMP 协议为构建实时消息传输提供了极大的便利。本文将介绍如何在 Spring Boot 中使用 WebSocket 和 STOMP 创建一个实时消息应用&#xff0c…

Kafka2.2.0集群安装

Kafka2.2.0 三节点集群搭建 Kafka2.2.0 基于zookeeper搭建,这里也搭建一个三个节点的集群。(在一个节点模拟三节点,真实的三节点把ip替换一下即可,按照hadoop案件把网络打通即可) 1、下载解压 Kafka 安装包官方下载地址 ,本用例…

AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复

在Altium Designer软件中,切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤: 切换三维视图 在PCB设计界面中,2D切换3D,快捷键按住数字键盘中的“3”即可切换; 快捷键ctrlf(或者vb快捷键也…

人工智能-卷积神经网络(学习向)

一.概述; 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有类似网格结构的数据(如图像)的深度学习模型。 主要用于处理机器视觉任务。 主要功能; 1.图像分类 2.目标检测 3.图像分割…

ABE 中的隐藏属性:DIPPE(去中心化内积谓词加密)

1. 引言 相关论文有: Yan Michalevsky 和 Marc Joye 2018年论文 Decentralized policy-hiding ABE with receiver privacy,发表于23rd European Symposium on Research in Computer Security, ESORICS 2018。Amit Sahai 和 Brent Waters 2005年论文 Fu…

书生浦语·第四期作业合集

目录 1. Linux基础知识 1.1-Linux基础知识 1.在终端通过ssh 端口映射连接开发机 2. 创建helloworld.py 3.安装相关包并运行 4.端口映射并访问相关网页

小程序-基于java+SpringBoot+Vue的校园快递平台系统设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…

使用flex布局实现一行固定展示n个元素

前言&#xff1a; 最近在公司中完成小程序的UI设计稿时&#xff0c;遇到了布局一个问题&#xff1a;UI设计稿想实现的布局是这样的&#xff1a; 笔者第一反应就是使用flex中的justify-content: space-between;属性&#xff0c;但是使用之后发现&#xff0c;justify-content: …

AntFlow 0.20.0版发布,增加多数据源多租户支持,进一步助力企业信息化,SAAS化

传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#xff0c;流程设计操作需要专业人员&#xff0c;普通人无从下手等问题。。。引入工作流引擎往往需要企业储…

IDL学习笔记(一)数据类型、基础运算、控制语句

近期&#xff0c;需要用到modis数据批量预处理&#xff0c;于是重新学习idl,感谢郭师兄推荐&#xff0c;以及张洋老师的详细教导。特以此为学习笔记&#xff0c;望学有所成。 IDL学习笔记&#xff08;一&#xff09; 数据类型数据类型创建数组类型转换函数代码输出print往文件…

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

使用 Pytorch 构建 Vanilla GAN

文章目录 一、说明二、什么是 GAN&#xff1f;三、使用 PyTorch 的简单 GAN&#xff08;完整解释的代码示例&#xff09;3.1 配置变量3.2 、PyTorch 加速3.3 构建生成器3.4 构建鉴别器 四、准备数据集五、初始化函数六、前向和后向传递七、执行训练步骤八、结果 一、说明 使用…

Python酷库之旅-第三方库Pandas(251)

目录 一、用法精讲 1186、pandas.tseries.offsets.BusinessMonthEnd.is_year_start方法 1186-1、语法 1186-2、参数 1186-3、功能 1186-4、返回值 1186-5、说明 1186-6、用法 1186-6-1、数据准备 1186-6-2、代码示例 1186-6-3、结果输出 1187、pandas.tseries.offs…