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

腾讯云上基于 Apache Pulsar 的大规模生产实践

导语

Pulsar Meetup 2024 北京站已经成功落下帷幕。在本次盛会中,腾讯云的高级工程师韩明泽和王震江为与会者带来了精彩的演讲。他们围绕多网接入、集群迁移以及高可用最佳实践这三大核心议题,深入剖析了《腾讯云上基于 Apache Pulsar 的大规模生产实践》,为听众呈现了一场知识与经验交织的盛宴。

作者介绍

王震江

腾讯研发工程师,负责腾讯云 TDMQ for Apache Pulsar 商业化开发,开源社区爱好者

韩明泽

腾讯高级工程师,负责腾讯云 TDMQ for Apache Pulsar 商业化开发

拥有7年消息队列开发经验,熟练掌握 Pulsar、 Kafka、RocketMQ 等主流消息队列

Apache Pulsar/BookKeeper/Zookeeper contributor,RoP maintainer

多网络接入

网络介绍

云环境中,我们常遇到三种网络类型:内网、VPC(虚拟私有云)以及公网。若 VPC 和公网需要访问集群,则必须通过网络寻址功能实现 IP 映射,从而打通这些网络。在以往的方案中,这一步骤是通过 AdvertisedListeners+ListenerName 来完成的,它负责将每个 IP 映射文件存放在 Broker 集群里。
在这里插入图片描述
然而,这种方法带来了三个显著的问题。

首先,配置过程变得相当复杂。由于每个接入点都对应一个 IP 映射,随着接入点的不断增加,这些映射文件会变得异常庞大,管理起来极为不便。同时,每个 Broker 所对应的文件可能并不一致,这进一步加剧了配置的复杂性。

其次,这种架构导致了职责的混淆。Broker 本应专注于消息的收发过程,但在此架构下,它还需承担网络寻址的职责,这使得其职责变得模糊不清。

最后,这种方法的维护成本也相对较高。配置文件频繁变动,修改起来既麻烦又容易出错。而且,如果不同节点之间的数据不一致,导致整体维护难度很大。
在这里插入图片描述

路由寻址

针对上述挑战,我们创新性地提出了路由寻址方案。这一改进方案的核心在于引入 LookupService 来执行路由寻址任务,通过数据库,集中管理和维护网络映射和寻址信息。

路由寻址方案带来了四大显著优势:

● 架构简化:从下图可以看出,整个系统结构更加简洁明了,避免了不必要的复杂性。

● 职责明确:在此方案下,Broker 得以专注于其核心任务——消息的收发,而无需再承担网络寻址的职责,实现了有效的解耦。

● 运维便捷:运维团队只需专注于管理工作,无需与 Broker 进行繁琐的交互,从而大大降低了运维成本和复杂性。

● 扩展性强:这一优势在多集群管理或集群迁移时尤为明显,它确保了业务的稳定性和连续性,为系统的未来发展奠定了坚实基础。

综上所述,路由寻址方案的提出,不仅有效解决了原有方案中的问题,还带来了诸多优势,为系统的优化和升级提供了有力支持。
在这里插入图片描述

集群迁移

产品形态

TDMQ Pulsar 主要有三种典型的产品形态。

第一种是 Broker 共享,Bookie 共享,这种的产品形态成本比较低,但是存在一些问题,主要面临隔离性问题和稳定性问题。

第二种是 Broker 独占,Bookie 独占,这种形态下,计算层、存储层资源独占。这种形态优点是隔离性好,缺点是成本相对较高

第三种是 Broker 独占,Bookie 共享。这种形态综合考虑了稳定性和成本,算是一种折中的方案。
在这里插入图片描述

三种形态并无明显的优劣之分,更多的是要结合实际的应用场景做出选择。

整体架构

我们最初采用的都是共享的产品形态。但是,随着用户规模增加,对产品的稳定性提出更高的要求,共享形态并不能很好的满足业务的诉求。他们需要从共享模式迁移到更为适合的后两种模式。这时,集群迁移问题便随之而来。为了应对这一挑战,我们精心设计了集群迁移方案,该方案主要包含以下四个关键步骤:

● 元数据同步

● 数据同步(GEO)

● 订阅进度同步(GEO+补偿)

● 切换集群(Unload+寻址调整)
在这里插入图片描述

订阅进度说明

整体的集群迁移实现逻辑比较简单。主要的难点在于订阅进度的同步上。

在使用社区 GEO 方案进行订阅进度同步时,我们发现存在一些问题。GEO 中的订阅进度只会同步 MarkDeletePosition,这样,会导致订阅进度并不完整。因为 Pulsar 中,订阅进度是由两部分组成的。这意味着,在实际迁移的过程中,用户可能会遇到消息大量重复处理的情况。
在这里插入图片描述

进度同步

为了解决集群迁移过程中可能出现的消息重复消费问题,我们创新性地提出了一个补偿方案。

1、 我们会在同步消息到目标集群的时候,在消息的元数据中,携带原集群的消息 ID。

2、 我们会将原集群中的订阅进度(MarkDeletePosition和IndividuallyDeleteMessages)同步到目标集群。

3、 当消费者迁移到目标集群后。在目标集群中,读取消息之后,如果消息是来自原集群,那我们将原集群中的消息 ID 和原集群的订阅集群进行比对,如果判断消息已经在原集群中消费完成,我们就将消息过滤掉,不再投递给消费者。

通过上面的机制,我们有效解决了消费进度同步不完整的问题。
在这里插入图片描述

高可用最佳实践

如今,公司对 TDMQ Pulsar 集群的基本要求已经远远超越了单点故障的防范,而是至少需要具备可用区级别的容错能力。更进一步,对集群能力乃至跨地域能力的需求也日益增长。
在这里插入图片描述

在此,我们将重点聚焦于可用区维度的探讨。特别是在存储层面,副本的分布策略显得尤为重要。

可用区容灾

在高可用存储系统中,副本分布是确保数据可靠性和系统稳定性的关键环节。其中,机架感知和跨可用区分布是副本分布策略的重要方面。

机架感知

机架感知是指系统能够识别并感知到不同服务器所在的机架,从而在分配副本时尽量将副本分散到不同的机架上。这样做的好处是,当某个机架出现故障时,其他机架上的副本仍然可用,保证了数据的可靠性和系统的稳定性。
在这里插入图片描述

跨可用区分布

跨可用区分布是指将副本分散到不同的可用区(如不同的地理区域或数据中心)。这样做可以进一步提高数据的可靠性和系统的容错性。当某个可用区出现故障时,其他可用区上的副本可以接管并提供服务,确保系统的持续运行。

在实现跨可用区分布时,通常需要配置相关的参数来开启机架感知和跨可用区分布功能。这些配置通常包括指定副本的数量、分布方式以及可用区的选择等。

注意事项

尽管副本分布策略可以显著提高系统的可靠性和稳定性,但在实际执行过程中,仍需注意以下几点:

● 副本恢复过程的数据保证

在副本恢复过程中,需要保证剩余的副本数量大于等于w-a+1(w是写副本数,a是确认副本数)。这是为了确保在恢复过程中,即使出现部分副本丢失或不可用的情况,仍然有足够的副本可以恢复数据,保证数据的不丢失和高可靠性。
在这里插入图片描述
在这里插入图片描述

● 处理数据堆积和读取策略

在某些情况下,可能会出现数据堆积和读取策略不当的问题。例如,当某个副本节点出现故障时,如果是读堆积消息,可能会导致读取速度变慢。因为读取的时候,默认是轮询读取每个副本节点,当读取到故障节点的时候,会出现超时的情况,造成读取性能明显下降。为了解决这个问题,可以优化读取策略或开启粘性读开关,使系统在选择读取节点时更加智能和高效。
在这里插入图片描述

最佳实践

在3可用区和2可用区下,既能满足数据高可靠,又能满足服务可用性的部署形态。
在这里插入图片描述

地域容灾

除了副本分布策略外,容灾能力也是确保系统高可用性的重要方面。容灾能力是指系统在出现故障或灾难时能够快速恢复并提供服务的能力。

在实现容灾能力时,通常需要建立异地备份集群并定期同步数据。当主集群出现故障时,可以切换到备份集群提供服务。同时,还需要建立相应的运营切换机制和消息堆积处理机制以确保系统的持续运行和数据的一致性。
在这里插入图片描述

综上所述,高可用存储层的副本分布策略及注意事项是确保系统可靠性和稳定性的重要环节。在实际应用中,需要根据具体的业务场景和需求来选择合适的策略并注意相关的注意事项以确保系统的正常运行和数据的安全性。

总结

展望未来,我们将继续致力于优化 Apache Pulsar 在腾讯云上的应用,不断提升系统的性能、稳定性和可用性。我们将持续关注用户需求,不断推出更多创新性的解决方案,以满足用户在不同场景下的需求。同时,我们也将积极参与开源社区的建设,与更多开发者共同推动 Apache Pulsar 的发展,为消息队列技术的进步贡献我们的力量。

相关文章:

腾讯云上基于 Apache Pulsar 的大规模生产实践

导语 Pulsar Meetup 2024 北京站已经成功落下帷幕。在本次盛会中,腾讯云的高级工程师韩明泽和王震江为与会者带来了精彩的演讲。他们围绕多网接入、集群迁移以及高可用最佳实践这三大核心议题,深入剖析了《腾讯云上基于 Apache Pulsar 的大规模生产实践…...

Linux网络:序列化与反序列化

Linux网络:序列化与反序列化 序列化与反序列化jsonjsoncppValue对象序列化反序列化WriterReader 序列化与反序列化 在网络通信中,最重要的就是通过接口,将数据通过网络发送给另一台主机。那么另一台主机收到数据后,就可以对数据进…...

Aloudata BIG 主动元数据平台支持 Oracle/DB2 存储过程算子级血缘解析

Aloudata BIG 算子级血缘主动元数据平台已经支持 Oracle 类型、DB2 类型的存储过程算子级血缘解析,并达到 90% 血缘解析准确率: 能够识别准确的字段级数据加工依赖关系;能够识别多级嵌套调用的存储过程的血缘;能够推断存储过程内…...

Java 解决阿里云OSS服务器私有权限图片通过URL无法预览的问题

简单描述一下此场景的业务: 由于系统中需要将上传的图片在系统中展示(private私有权限不能直接通过url直接展示),不想通过先下载下来然后以流的形式返回给前台展示这种方法很不友好,毕竟现在前台展示方式都是通过图片URL进行展示,所以就上官网查看API文档,果然找到了解决…...

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】 目录 应用打包HAP、HAR、HSPModule类型HAPHAR创建HAR建立依赖HAR共享内容 HSP创建HSP建立依赖同上HSP共享内容同上 HAR VS HSP 应用打包HAP、HAR、HSP 一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发…...

Android demo文件内容记录

<style name"Theme.Demo1" parent"Theme.MaterialComponents.DayNight.DarkActionBar"><!-- Primary brand color. --><item name"colorPrimary">color/purple_500</item>//状态栏的背景色&#xff0c;优先级小于androi…...

掌握SQL高阶技巧,助你提高数据处理的效率和查询性能

高级 SQL 技巧 窗口函数&#xff08;Window Functions&#xff09; 窗口函数允许你对数据集的特定行执行计算&#xff0c;而不会聚合结果。常见的窗口函数包括&#xff1a; ROW_NUMBER()&#xff1a;为每一行分配一个唯一的序号。RANK()&#xff1a;为每一行分配一个排名&am…...

【AI服务器】全国产PCIe 5.0 Switch SerDes 测试和分析,以11槽PCIe GPU底板(PCIe 4.0/5.0)为例(二)

3 PCIe 4.0 SerDes 和 5.0 SerDes 要求比较 表 2 总结 PCIe 4.0 和 5.0 SerDes 要求之间的差 异。PCIe 标准包含三个相互依赖的规范&#xff0c;这些规范 旨在确保不同供应商的 SerDes 和通道的互操作性&#xff1a; ● PCIe BASE 规范定义了整个协议栈的芯片 级性能,是一…...

#数据结构(二)--栈和队列

栈和队列 一栈 1.栈的顺序存储结构 特点&#xff1a;先进后出 栈是一种只能在一端进行插入或删除操作的线性表。 表中允许插入删除操作的一端为栈顶&#xff08;top&#xff09;&#xff0c;表的另一端为栈底&#xff08;bottom&#xff09;&#xff0c; 1 结构体的定义 …...

react18中的函数组件底层渲染原理分析

react 中的函数组件底层渲染原理 react组件没有局部与全局之分&#xff0c;它是一个整体。这点跟vue的组件化是不同的。要实现 react 中的全局组件&#xff0c;可以将组件挂在react上&#xff0c;这样只要引入了react&#xff0c;就可以直接使用该组件。 函数式组件的创建 …...

提升产品竞争力之--IPD产品成本篇

在汉捷的咨询过程中&#xff0c;很多企业老总交流时都会提起这个抱怨&#xff1a;“现在产品竞争太激烈了&#xff0c;客户买产品首先看价格&#xff0c;你价格高一点就买别家的啦……” 汉捷咨询在前文谈到“通过定义产品包需求&#xff0c;来提升产品竞争力。差异化开发&…...

如何在Debian操作系统上安装Docker

本章教程&#xff0c;主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。 一、安装Docker #!/bin/bashRED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0mCURRENT_DIR$(cd "$(dirname "$0")…...

ArrayList和Array、LinkedList、Vector 间的区别

一、ArrayList 和 Array 的区别 ArrayList 内部基于动态数组实现&#xff0c;比 Array&#xff08;静态数组&#xff09; 使用起来更加灵活&#xff1a; ArrayList 会根据实际存储的元素动态地扩容或缩容&#xff0c;而 Array 被创建之后就不能改变它的长度了。ArrayList 允许…...

Linux开发环境配置(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…...

系统开发常用命令合集

本文还会持续更新&#xff0c;大家可以点赞收藏~ ifconfig ifconfigwlan0表示无线网络接口 eth0表示以太网接口&#xff08;有线&#xff09; HWaddr是接口的物理地址&#xff08;MAC地址&#xff09; inet addr是接口的IPv4地址 Bcast是广播地址&#xff0c;Mask是子网掩码 …...

Termius工具在MAC的使用出现的问题:

Termius工具在MAC的使用出现的问题&#xff1a; 在使用SFTP时&#xff0c;出现不了本地的文件的位置 解决方案&#xff1a; 在Apple store下载的使用不了LOCAL SFTP&#xff0c; 需要在网页上进行下载才可以&#xff1a; 官网下载地址&#xff1a;https://termius.com/down…...

浅析Android中View的绘制流程

前言 在《浅析Android中View的测量布局流程》中分析了VSYNC信号到达App进程之后开启的View布局过程&#xff0c;经过对整个View树进行遍历进行测量和布局&#xff0c;最终确定View的大小以及在屏幕中所处的位置。但是如果用户想在屏幕上看到View的内容还需要经过绘制来生成图形…...

pikachu靶场- 文件上传unsafe upfileupload

pikachu靶场- unsafe upfileupload 概述client checkMIME typegetimagesize() 概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#xff0c;比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后&#xff0c;后台会对上传的文件进行判断…...

java中this的内存原理是?

在Java中&#xff0c;this关键字是一个特殊的引用&#xff0c;指向当前对象的实例。它在以下几个方面发挥重要作用&#xff1a; 指向当前对象&#xff1a;this可以用来访问当前对象的属性和方法&#xff0c;尤其在参数命名与实例变量重名时&#xff0c;用于区分。 构造函数&a…...

Matlab 车牌识别技术

1.1设计内容及要求&#xff1a; 课题研究的主要内容是对数码相机拍摄的车牌&#xff0c;进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发&#xff0c;涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...