知乎启用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.rhkb.cn/news/482645.html

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

相关文章

mysql数据库varchar截断问题

用了这么多年mysql数据库,才发现varchar是可以截断的,而且是在我们线上数据库。个人觉得dba的这个设置是非常有问题的,用户往数据库里存东西,就是为了以后用的,截断了存放,数据不完整,就用不了了…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…

MySQL底层概述—9.ACID与事务

大纲 1.ACID之原子性 2.ACID之持久性 3.ACID之隔离性 4.ACID之一致性 5.ACID的关系 6.事务控制演进之排队 7.事务控制演进之排它锁 8.事务控制演进之读写锁 9.事务控制演进之MVCC 10.事务隔离级别之隔离级别的类型 11.事务隔离级别之和锁的关系 12.事务隔离级别之隔…

基于 SpringBoot 的新冠密接者跟踪系统:如何实现高效信息推送功能

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库,接下来就对其具备的主要特征进行描述。 (1)首选Mysql数据库也是为了节省开发资金,因为网络上对Mysql的源码都已进行了公开展示,开发者根据程序开发需要…

手撸了一个文件传输工具

在日常的开发与运维中,文件传输工具是不可或缺的利器。无论是跨服务器传递配置文件,还是快速从一台机器下载日志文件,一个高效、可靠且简单的文件传输工具能够显著提高工作效率。今天,我想分享我自己手撸一个文件传输工具的全过程…

基于Java Springboot电子书阅读器APP且微信小程序

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信开发者工具 数…

【AI系统】AI 编译器基本架构

AI 编译器基本架构 在上一篇文章中将 AI 编译器的发展大致分为了 3 个阶段,分别为 1)朴素编译器、2)专用编译器以及 3)通用编译器。 本文作为上一篇文章 AI 编译器架构的一个延续,着重讨论 AI 编译器的通用架构。首先…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中,华为的品牌形象较高,且产品质量过硬,因此用户基数也大。与此同时,随着影响力的增大,华为不断向外扩张,也逐渐成为了海外市场的香饽饽。作为开发者和运营者,我们要认识到…

SuperMap GIS基础产品FAQ集锦(20241202)

一、SuperMap iDesktopX 问题1:请问一下,iDesktopX11.2.1如何修改启动界面 11.2.0 【解决办法】参考帮助文档的“自定义启动界面”内容:https://help.supermap.com/iDesktopX/zh/SpecialFeatures/Development/DevelopmentTutorial/UserCust…

Java基础访问修饰符全解析

一、Java 访问修饰符概述 Java 中的访问修饰符用于控制类、方法、变量和构造函数的可见性和访问权限,主要有四种:public、protected、default(无修饰符)和 private。 Java 的访问修饰符在编程中起着至关重要的作用,它…

浪潮X86服务器NF5280、8480、5468、5270使用inter VROC Raid key给NVME磁盘做阵列

Inter VROC技术简介 Intel Virtual RAID on CPU (Intel VROC) 简单来说就是用CPU的PCIE通道给NVME硬盘做Raid 更多信息可以访问官方支持页面 Raid Key 授权,即VROC SKU 授权主要有用的有2个标准和高级,仅Raid1的授权我暂时没见过。 标准 VROCSTANMOD …

【Pytorch】torch.view与torch.reshape的区别

文章目录 一. 简介:二. Pytorch中Tensor的存储方式2.1 Pytorch中张量存储的底层原理2.2 Pytorch张量步长(stride)属性 三. 对视图(view)的理解四. view()与reshape()的比较4.1 对view()的理解4.1.1 (1)如何理解满足条件 stride[i] stride[i1…

光伏电站设计排布前的准备

1、确定安装地点 地理位置:了解安装地点的经纬度,这对于确定太阳辐射角度和强度非常重要,海拔越高,阳光辐照就越高,比较适合安装光伏电站,根据地理位置还可以确定光伏板的安装倾角是多少,可以进…

5、防火墙一

防火墙的含义 firewalld:隔离功能 病毒防护: 1、入侵检测系统:在互联网访问的过程中,不阻断任何网络访问,也不会定位网络的威胁,提供告警和事后的监督,类似于监控。 2、入侵防御系统&#x…

代码随想录算法训练营第六十天|Day60 图论

Bellman_ford 队列优化算法(又名SPFA) https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 ,也叫SPFA算法&#xf…

详解LZ4文件解压缩问题

详解LZ4文件解压缩问题 一、LZ4文件解压缩方法1. 使用LZ4命令行工具2. 使用Python库3. 使用第三方工具4. 在线解压工具 二、常见问题及解决方法1. 解压显示文件损坏2. 解压后文件大小异常 三、总结 LZ4是一种快速的压缩算法,广泛应用于需要实时压缩和解压缩大文件的…

【Linux网络编程】第四弹---构建UDP服务器与字典翻译系统:源码结构与关键组件解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、UdpServer.hpp 1.1、函数对象声明 1.2、Server类基本结构 1.3、构造函数 1.4、Start() 2、Dict.hpp…

DBA面试题-1

面临失业,整理一下面试题,找下家继续搬砖 主要参考:https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1, 整形 tinyint,smallint,medumint,int,bigint;分别占用1字节、2字节、3字节…

vxe-table 树形表格序号的使用

vxe-table 树形结构支持多种方式的序号&#xff0c;可以及时带层级的序号&#xff0c;也可以是自增的序号。 官网&#xff1a;https://vxetable.cn 带层级序号 <template><div><vxe-grid v-bind"gridOptions"></vxe-grid></div> <…

精通.NET鉴权与授权

授权在.NET 中是指确定经过身份验证的用户是否有权访问特定资源或执行特定操作的过程。这就好比一个公司&#xff0c;身份验证(鉴权)是检查你是不是公司的员工&#xff0c;而授权则是看你这个员工有没有权限进入某个特定的办公室或者使用某台设备。 两个非常容易混淆的单词 鉴…