当前位置: 首页 > article >正文

疯狂星期四,来看百胜中国如何玩转 Pulsar~

本文整理自 Chunxiang Yan 在 Pulsar Summit 上的演讲《Awesome Pulsar in YumChina》。背景介绍Chunxiang Yan百胜中国后端工程师自2021年起负责维护和演进百胜中国的 Pulsar PaaS 集群在使用Pulsar过程中积累了丰富的实践经验和专业知识。百胜中国是中国最大的餐饮企业拥有 12,000 多家餐厅覆盖 1,700 多个城市员工超过 40 万名年服务顾客超过 20 亿人次。其研发中心位于上海、南京和西安旗下品牌包括必胜客、KFC、黄记煌等知名餐饮品牌。选择Pulsar的原因2019年百胜中国需要构建一个内部的消息队列 PaaS 平台。由于业务流量难以准确预估且希望尽可能降低运维成本因此对消息中间件的选型提出了较高要求。在与 Kafka 和 RabbitMQ 的对比中Pulsar 在水平扩展性和运维成本方面表现出明显优势。Pulsar 具备无缝的水平扩展能力支持独占、共享和故障转移等多种订阅类型通过 Apache BookKeeper 实现持久化消息存储保证了消息投递的可靠性。同时Pulsar 拥有极低的发布和端到端延迟并支持跨集群的无缝消息复制。最终选择 Pulsar 后使用体验良好完全满足了业务需求。使用案例两类集群为了兼顾不同业务场景的需求百胜中国部署了两类Pulsar 集群业务数据集群BIZ和运营数据集群OPS。业务数据集群BIZ用于核心业务数据其关键指标是数据完整性、吞吐量和发布延迟。集群配置了 26 个节点采用同步发送方式写仲裁数设置为 3确认仲裁数设置为 2并启用了日志同步磁盘写入journalSyncDatatrue以确保至少有 2 个副本的数据持久化保障数据可靠性。运营数据集群OPS主要用于处理监控指标数据这类数据天然具有临时性允许一定的数据丢失。该集群仅配置了 10 个节点采用异步发送方式写仲裁和确认仲裁均设为 1日志不强制写入磁盘journalSyncDatafalse通过牺牲数据持久性来换取更高的吞吐量。两类集群的关键区别体现在硬件规模、发送方式、仲裁设置和日志同步策略上BIZ 集群使用 26 个节点、强一致性、同步写入磁盘OPS集群使用 10 个节点、弱一致性、异步写入操作系统页面缓存。架构百胜中国的 Pulsar 部署采用多可用区架构在 4 个可用区AZ分别部署了完整的系统每个可用区内均包含 BIZ 和 OPS 双集群。业务集群之间通过跨区复制命名空间连接实现数据同步。1NightingaleNightingale 是一个用于接收 Prometheus remote_write 数据的组件。它首先对数据进行速率限制例如随机丢弃样本然后执行解析和标签重组最后将数据转换为 Protobuf 格式写入 Pulsar。通过3个节点夜莺实现了每秒 20 万消息的吞吐量。2PigeonholePigeonhole 组件的设计目标是在 Kafka、RabbitMQ 和 Pulsar 之间同步消息。开发者只需实现 Pulsar 消费者接口即可完成消息的跨系统迁移。该组件采用与 Nightingale 相同的优化逻辑单节点吞吐量达到 5 万消息每秒。3SonicSonic 的工作机制是接收客户端发送的 Redis 命令并将其写入 Pulsar 的双向复制主题随后各个可用区的 Sonic 实例消费这些主题并在本地 Redis 中执行命令。基于 Pulsar 的地理复制特性实现了命令的广播延迟成为关键性能指标需要匹配 Redis 原生的处理速度。4EventbridgeEventbridge 由三个组件构成预处理器负责接收事件并写入 Pulsar Eventbridge 主题规则引擎消费该主题匹配订阅规则后将事件写入发送主题事件处理器消费发送主题并将事件分发给订阅者。针对不同的事件类型采用了多种订阅模式有序事件使用同步发送加 Key 共享模式无序事件使用异步发送加共享模式临时事件使用异步发送加读取器模式。性能调优实践调低发布延迟高发布延迟时检查位置1硬盘选择硬盘类型对发布延迟影响显著。实测表明SSD 比物理硬盘性能高 5 倍企业级 SATA 硬盘延迟可达 20ms而高端消费级 NVMe SSD 仅需 3.8ms。通过 fio 工具进行基准测试命令示例fio --rwwrite --ioenginesync --fdatasync1 --size220m --bs4096可以准确评估硬盘性能。在某次优化案例中将网络磁盘切换为本地 SSD 后最大发布延迟从 300ms 降至 5ms。2JVM 优化使用 Grafana 仪表盘监控 GC 暂停时间发现Pulsar 默认采用吞吐量优先的 JVM 设置导致新生代空间过大、GC 线程并发度高造成较长的暂停。优化措施包括启用 G1GC 并设置最大 GC 暂停时间为10ms-XX:UseG1GC -XX:MaxGCPauseMillis10取消对新生代空间的硬性要求并减少GC线程并发度。优化后GC 暂停从 150ms 降至 10ms发布延迟从 500ms 降至 100ms。3日志检查和压缩BookKeeper每周自动执行数据完整性检查CheckAllLedgers可能影响正常业务。解决方案是通过bin/bookkeeper shell forceauditchecks 命令将检查任务调整到夜间执行。日志压缩过程中GC 线程会整理交错存储的 entry log 文件产生大量磁盘 I/O。通过启用节流参数 isThrotleByBytestrue 和 compactionRateByBytes1024102410可以有效控制压缩对系统的影响。BookKeeper写入机制BookKeeper 采用双写机制Journal 文件作为事务日志写入是异步过程Ledger 实际存储消息写入是同步过程。关键延迟点在于 fsync 系统调用的性能其耗时取决于硬盘速度。配置项 journalSyncData 控制是否对每次写入执行 fsync在追求低延迟的场景下需谨慎设置。其他优化建议在 GC 调优方面避免设置固定的新生代大小让 G1GC 自动调整启用并行引用处理-XX:ParallelRefProcEnabled禁用显式 GC-XX:DisableExplicitGC。系统监控应重点关注硬盘延迟波动、GC 暂停时间以及后台进程的活动周期。调高吞吐量吞吐量公式吞吐量受限于网络往返时间RTT同步消息的吞吐量公式为最大吞吐量 1 / RTT。例如当RTT为5ms时最大吞吐量约为200消息/秒。即使使用异步处理吞吐量仍受网络RTT的制约。应用案例消息批处理配置通过合理配置批处理参数可以大幅提升吞吐量。设置最大待处理消息数MaxPendingMessages为 1000批处理最大发布延迟BatchingMaxPublishDelay为 1ms批处理最大消息数BatchingMaxMessages为 100×1024批处理最大尺寸BatchingMaxSize为 10MB并启用 LZ4 压缩压缩级别high。实际测试中单节点吞吐量达到 46,000 消息/秒。调优建议从默认配置开始逐步测试找到最优设置。GOTCHAS被阻塞的消费者问题现象HTTP 触发的消费者在消息积压时意外挂起。根本原因是消息滞留在本地队列未被及时消费。解决方案是明确关闭不再需要的消费者。崩溃的消费者问题现象服务启动时出现 OOM 错误。根本原因是默认接收队列大小1000条消息在消息体积较大时消耗过多内存。当消息大小为 1MB 时队列可能占用 1GB 内存。预防措施是在高负载场景下特别注意队列大小的配置。未来计划Pulsar On K8S百胜中国正规划将 Pulsar 迁移到 Kubernetes 平台实现云原生转型。实施过程中需逐步将现有虚拟机部署的关键服务迁移至 K8S 环境确保业务平稳过渡。Pulsar IaC基础设施即代码IaC是未来方向之一计划建立 Pulsar 配置管理系统实现配置的版本化、自动化管理。Apache Pulsar 作为一个高性能、分布式的发布-订阅消息系统正在全球范围内获得越来越多的关注和应用。如果你对分布式系统、消息队列或流处理感兴趣欢迎加入我们Github:https://github.com/apache/pulsar扫码加入 Pulsar 社区交流群最佳实践互联网腾讯BiFang | 腾讯云 | 微信 | 腾讯 | BIGO | 360 | 滴滴 | 腾讯互娱 | 腾讯游戏 | vivo | 科大讯飞 | 新浪微博 | 金山云 | STICORP | 雅虎日本 | Nutanix Beam | 智联招聘 | 达达 | 小红书华为终端金融/计费腾讯计费中原银行 | 平安证券 | 拉卡拉 | Qraft | 甜橙金融电商Flipkart | 谊品生鲜 | Narvar | Iterable机器学习腾讯Angel PowerFL | Discord物联网/芯片制造应用材料云兴科技智慧城市 | 科拓停车 | 华为云 | 清华大学能源互联网创新研究院 | 涂鸦智能通信江苏移动 | 移动云教育网易有道 | 传智教育推荐阅读免费可视化集群管控 | 资料合集 | 实现原理 | BookKeeper储存架构解析 | Pulsar运维 | MQ设计精要 | Pulsar vs Kafka | 从RabbitMQ 到 Pulsar | 内存使用原理 | 从Kafka到Pulsar | 跨地域复制 | Spring Pulsar | Doris Pulsar | SpringBoot Pulsar

相关文章:

疯狂星期四,来看百胜中国如何玩转 Pulsar~

本文整理自 Chunxiang Yan 在 Pulsar Summit 上的演讲《Awesome Pulsar in YumChina》。背景介绍Chunxiang Yan,百胜中国后端工程师,自2021年起负责维护和演进百胜中国的 Pulsar PaaS 集群,在使用Pulsar过程中积累了丰富的实践经验和专业知识…...

CLIP-GmP-ViT-L-14保姆级教程:错误日志排查——‘CUDA out of memory‘应对

CLIP-GmP-ViT-L-14保姆级教程:错误日志排查——CUDA out of memory应对 你是不是刚把CLIP-GmP-ViT-L-14模型跑起来,正兴奋地想试试它的图片匹配能力,结果屏幕上突然蹦出来一行刺眼的红色错误:CUDA out of memory? 别…...

ChatGLM3-6B功能体验:Streamlit重构版,流式输出+智能缓存超流畅

ChatGLM3-6B功能体验:Streamlit重构版,流式输出智能缓存超流畅 1. 引言:当大模型遇上丝滑交互 想象一下这个场景:你有一个强大的本地大模型,但每次对话都要等它“思考”半天,界面卡顿,刷新页面…...

AudioLDM-S音效库展示:500+高质量音效实例欣赏

AudioLDM-S音效库展示:500高质量音效实例欣赏 不知道你有没有过这样的经历:深夜赶一个视频项目,就差一个“雨夜中远处传来的狗吠声”来烘托气氛,结果翻遍了整个音效素材库,要么是单纯的雨声,要么是突兀的狗…...

Lychee多模态重排序模型效果展示:艺术设计平台中风格关键词-作品图匹配

Lychee多模态重排序模型效果展示:艺术设计平台中风格关键词-作品图匹配 1. 引言:艺术设计中的精准匹配挑战 在艺术设计平台中,设计师们经常面临一个核心问题:如何快速找到与特定风格关键词完美匹配的设计作品?传统的…...

Ostrakon-VL-8B环境部署:免conda、免手动编译的镜像免配置方案

Ostrakon-VL-8B环境部署:免conda、免手动编译的镜像免配置方案 你是不是也遇到过这种情况?看到一个很酷的AI模型,想在自己的服务器上试试,结果发现要装conda、配环境、解决各种依赖冲突,折腾半天最后可能还跑不起来。…...

高效使用WinDirStat进行磁盘空间分析与清理指南

高效使用WinDirStat进行磁盘空间分析与清理指南 【免费下载链接】windirstat WinDirStat is a disk usage statistics viewer and cleanup tool for various versions of Microsoft Windows. 项目地址: https://gitcode.com/gh_mirrors/wi/windirstat 磁盘空间不足是Win…...

Qwen2.5-72B-GPTQ-Int4效果展示:长文档摘要+关键信息抽取双任务实测

Qwen2.5-72B-GPTQ-Int4效果展示:长文档摘要关键信息抽取双任务实测 1. 引言:当大模型遇上长文档处理 想象一下,你手头有一份长达几十页的技术报告、一份复杂的法律合同,或者是一篇冗长的学术论文。你需要快速抓住它的核心思想&a…...

SUPER COLORIZER跨平台部署:从Windows到Linux的系统迁移与配置指南

SUPER COLORIZER跨平台部署:从Windows到Linux的系统迁移与配置指南 你是不是在Windows电脑上把SUPER COLORIZER项目调得顺风顺水,一到要放到Linux服务器上就感觉头大?环境变量怎么配?路径斜杠反斜杠傻傻分不清?服务怎…...

新手入门指南:用快马AI解析foldcraftalauncher官网,生成可运行的前端学习代码

作为一个刚接触前端开发不久的新手,我最近对如何构建一个专业、美观的企业官网产生了浓厚兴趣。在浏览了许多网站后,我被foldcraftalauncher官网那种简洁、现代且功能清晰的设计风格所吸引。它没有过于花哨的动画,但布局合理,信息…...

Qwen3-ASR-1.7B模型在GitHub Actions中的CI/CD实践

Qwen3-ASR-1.7B模型在GitHub Actions中的CI/CD实践 1. 引言 语音识别项目开发过程中,我们经常面临这样的挑战:每次代码更新后需要手动测试模型效果,部署流程繁琐容易出错,团队协作时代码质量难以保证。传统的开发方式需要开发者…...

解决macOS菜单栏混乱的革新工具:Ice高效管理方案

解决macOS菜单栏混乱的革新工具:Ice高效管理方案 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice macOS菜单栏作为用户与系统交互的重要枢纽,随着应用程序的增多往往变得拥挤不…...

3大核心策略:彻底解决Gigabyte主板风扇失控难题的优化指南

3大核心策略:彻底解决Gigabyte主板风扇失控难题的优化指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

AI排名优化公司 - 破解品牌内容“高质低曝”的增长困局

在内容营销内卷的今天,许多企业投入重金打造优质文章和视频,却发现难以被大模型抓取推荐,导致流量极度匮乏。选择一家真正懂技术的AI排名优化公司成为了破局的关键。触有数据APP凭借深厚的人工智能与大数据挖掘技术,精准定位品牌在…...

ai辅助排错:让快马平台的智能助手帮你解决openclaw本地安装中的各种疑难杂症

最近在本地安装OpenClaw时,遇到了不少麻烦。从环境配置、依赖冲突到脚本执行报错,每一步都可能卡住,尤其是对于不熟悉Linux系统或Python生态的开发者来说,查文档、搜论坛的过程既耗时又低效。这时候,如果能有一个懂技术…...

天空星HC32F4A0PITB开发板驱动5V继电器模块实战:GPIO控制与光耦隔离详解

天空星HC32F4A0PITB开发板驱动5V继电器模块实战:GPIO控制与光耦隔离详解 最近在做一个智能家居的小项目,需要用单片机控制一盏220V的台灯,这自然就用到了继电器。很多刚开始接触嵌入式开发的朋友,一听到要控制220V的交流电就有点发…...

HY-Motion 1.0模型蒸馏实践:从1.0B到0.1B的精度保留率与轻量化路径

HY-Motion 1.0模型蒸馏实践:从1.0B到0.1B的精度保留率与轻量化路径 1. 引言:大模型轻量化的必要性 HY-Motion 1.0作为动作生成领域的突破性模型,通过将Diffusion Transformer架构与Flow Matching技术融合,将参数规模推向了1.0B&…...

毕设指导记录:从零搭建一个可复用的毕业设计项目脚手架(新手入门实战)

最近在帮几个学弟学妹看毕业设计,发现大家起步时普遍会遇到一些相似的“拦路虎”:技术栈不知道怎么选,项目结构乱糟糟,代码东一榔头西一棒子,最后部署上线更是两眼一抹黑。为了让大家少走弯路,我花时间整理…...

基于MySQL的AnythingtoRealCharacters2511转换结果管理系统

基于MySQL的AnythingtoRealCharacters2511转换结果管理系统 1. 动漫转真人技术的数据管理需求 动漫转真人技术正在改变内容创作的方式,但随之而来的是海量数据的管理挑战。AnythingtoRealCharacters2511作为一个高效的动漫转真人工具,每次转换都会产生…...

使用LingBot-Depth优化MATLAB三维重建:完整教程

使用LingBot-Depth优化MATLAB三维重建:完整教程 1. 引言 三维重建是计算机视觉领域的核心技术,但在实际应用中,原始深度数据往往存在噪声、缺失和不准确的问题。传统方法在处理这些问题时效果有限,特别是面对玻璃、镜面等复杂场…...

效率提升:用快马一键生成高性能数据处理模块,替换项目瓶颈

最近在做一个数据处理相关的项目,遇到了一个典型的性能瓶颈:一个处理大规模JSON数组的模块,随着数据量增长,执行时间越来越长,严重拖慢了整体流程。手动去优化这种底层逻辑,既要考虑算法效率,又…...

实测丹青识画:上传美食照片,AI自动生成诱人诗意描述

实测丹青识画:上传美食照片,AI自动生成诱人诗意描述 1. 开篇:当美食遇见AI,会碰撞出怎样的诗意? 你有没有过这样的经历?精心摆盘、调整光线,终于拍出了一张满意的美食照片,却在发朋…...

GLM-OCR助力GitHub开源项目:自动生成代码文档与注释

GLM-OCR助力GitHub开源项目:自动生成代码文档与注释 1. 引言 你有没有遇到过这种情况?接手一个开源项目,发现代码写得挺漂亮,但文档要么是几年前的,要么干脆没有。更头疼的是,项目文件夹里散落着一些手写…...

DeOldify在嵌入式设备上的探索:边缘计算场景下的轻量化部署

DeOldify在嵌入式设备上的探索:边缘计算场景下的轻量化部署 你有没有想过,在博物馆里,当游客对着一张泛黄的老照片驻足时,他手中的平板或场馆的互动屏能立刻让这张照片“活”过来,恢复它当年的色彩?或者&a…...

深入解析影墨·今颜模型结构:从卷积神经网络到视觉Transformer

深入解析影墨今颜模型结构:从卷积神经网络到视觉Transformer 最近在图像生成领域,一个名为“影墨今颜”的模型引起了不小的关注。它生成的图像在细节、光影和风格一致性上表现相当出色。很多开发者好奇,它背后到底用了什么“黑科技”&#x…...

高效视频处理:MediaMux零基础上手指南

高效视频处理:MediaMux零基础上手指南 【免费下载链接】MediaMux A windows tool for converting/muxing/split/concat videos. 项目地址: https://gitcode.com/gh_mirrors/me/MediaMux MediaMux是一款基于FFmpeg和.NET 4.5开发的Windows视频工具&#xff0c…...

彻底解决音乐加密困扰:Unlock Music让你的音频文件重获自由

彻底解决音乐加密困扰:Unlock Music让你的音频文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: …...

Flux Sea Studio 团队协作指南:使用Git管理共享Prompt库与生成参数配置

Flux Sea Studio 团队协作指南:使用Git管理共享Prompt库与生成参数配置 你是不是也遇到过这样的情况?团队里每个人都在用Flux Sea Studio生成图片,但A同事调出的绝佳光影效果,B同事完全不知道;C同学为某个客户项目精心…...

解锁知识壁垒:突破限制高效获取文档的创新方案

解锁知识壁垒:突破限制高效获取文档的创新方案 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 在信息爆炸的数字时代,知识获取的效率直接决定学习与工作的质量。当重要文档…...

DeOldify赋能内容创作:AIGC时代的老照片修复与短视频制作

DeOldify赋能内容创作:AIGC时代的老照片修复与短视频制作 你有没有翻过家里的老相册?那些泛黄、褪色、甚至有些模糊的黑白照片,承载着几代人的记忆。过去,想让这些照片“活”过来,需要专业的修复师花费大量时间和精力…...