首页/新闻资讯/正文详情

Apache Pulsar 非持久化主题(Non-persistent Topics)完整指南:概念、配置、CLI 与源码原理

发布时间:2026/9/23 15:26:45 来源:云帆数科 栏目:资讯中心
Apache Pulsar 非持久化主题(Non-persistent Topics)完整指南:概念、配置、CLI 与源码原理
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载非持久化主题non-persistent topics是 Apache Pulsar 中一类不落盘、只在内存中流转消息的主题适用于吞吐优先、可容忍少量消息丢失的实时场景。本指南以官方 cookbook 文档为骨架结合当前仓库的配置文件与 broker 源码系统讲解非持久化主题的概念、命名方式、开启方法、生产消费命令、pulsar-admin管理接口以及底层实现原理帮助你快速在本地或生产集群中正确使用这类主题。什么是非持久化主题与持久化主题的本质区别默认情况下Pulsar 会把所有未确认unacknowledged的消息持久化存储到多个 BookKeeper bookie存储节点上。因此持久化主题persistent topics上的消息能够经受住 broker 重启和订阅者subscriber故障切换数据不会丢失。Pulsar 同时支持非持久化主题non-persistent topics这类主题上的消息从不写入磁盘只存在于 broker 的内存中。一旦 broker 进程被杀掉或者订阅者与主题断开连接该主题上所有传输中的in-transit消息都会随之丢失客户端可能观察到消息丢失。官方文档对这一差异的描述位于 cookbooks-non-persistent.md 的 Overview 一节。更完整的架构背景可参考 concepts-architecture-overview.md 与 concepts-messaging.md其中non-persistent-topics一节对非持久化主题做了高层级介绍。从源码看不落盘的实现在 broker 端非持久化主题由NonPersistentTopic类实现它继承自AbstractTopic并实现Topic接口见 NonPersistentTopic.java。其核心的publishMessage方法展示了与持久化主题截然不同的路径消息到达后立即通过callback.completed(null, 0L, 0L)完成发布回调不经过任何 ledger 写入随后把消息retainedDuplicate()后分发给每个订阅subscription的 dispatcher如果有跨集群复制replicator同样直接在内存中把消息发给远程集群。也就是说从源码结构看非持久化主题没有 ledger、没有游标cursor落盘、没有 backlog 语义消息发布成功即代表 broker 已经尽力投递给当前在线的订阅者。非持久化主题的命名与标识非持久化主题的完整名称形式如下注意其中的non-persistent字段是主题类型标识non-persistent://tenant/namespace/topic即non-persistent://租户/命名空间/主题名。在源码中TopicName类同样支持以non-persistent/tenant/namespace/topic的形式解析这类名称见 TopicName.java。命名空间namespace中的每个主题要么是持久化persistent://要么是非持久化non-persistent://二者在同一个命名空间下可以共存。开启非持久化主题broker 配置详解使用非持久化主题的前提是必须在 Pulsar broker 配置中显式开启相关开关。官方文档明确说明默认情况下enableNonPersistentTopics即为true因此大多数场景下无需额外操作即可使用非持久化消息。核心开关参数在 broker.conf 中可以看到这一组配置及其默认值# Enable broker to load persistent topics enablePersistentTopicstrue # Enable broker to load non-persistent topics enableNonPersistentTopicstrue这两个参数的字段定义与默认值在 ServiceConfiguration.java 中enablePersistentTopics默认true是否允许 broker 加载持久化主题enableNonPersistentTopics默认true是否允许 broker 加载非持久化主题。如果希望 broker只提供非持久化主题服务可以把enablePersistentTopics设为false、enableNonPersistentTopics保持true。反过来如果只想使用持久化主题将enableNonPersistentTopics设为false即可禁用非持久化主题。与非持久化主题相关的其他配置项除了开关之外broker.conf 还提供了几个直接影响非持久化主题行为与性能的参数同样定义于 ServiceConfiguration.java参数默认值说明maxConcurrentTopicLoadRequest5000broker 允许的并发主题加载请求数用于控制 ZooKeeper 操作频率maxConcurrentNonPersistentMessagePerConnection1000每个连接上可并发处理的非持久化消息数numWorkerThreadsForNonPersistentTopic等于Runtime.getRuntime().availableProcessors()CPU 核数服务非持久化主题的 worker 线程数配置项源码中的FieldContext(category CATEGORY_SERVER, ...)表明这些参数属于服务端server类别配置修改后需要重启 broker 生效。Standalone 模式下的配置如果你以 standalone 模式运行 Pulsar例如本地开发或快速验证同样的参数在 standalone.conf 中配置键名与默认值与broker.conf完全一致enablePersistentTopicstrue enableNonPersistentTopicstrue官方文档特别提示standalone 模式下所有 broker 配置参数都位于standalone.conf中参见 reference-configuration.md 的 standalone 小节。具体参数全集可查阅 reference-configuration.md 中 broker 相关章节。使用非持久化主题生产与消费示例使用非持久化主题不需要任何特殊 API唯一要做的是在主题名称中正确使用non-persistent作为主题类型标识参见上文命名一节。生产消息以 standalone 集群为例下面的pulsar-client produce命令会在非持久化主题上生产一条消息$ bin/pulsar-client produce non-persistent://public/default/example-np-topic \ --num-produce 1 \ --messages This message will be stored only in memory消息发送成功后仅保存在 broker 内存中不会写入 BookKeeper。消费消息消费者侧同样只需要把主题名换成non-persistent://前缀即可订阅同一个非持久化主题$ bin/pulsar-client consume non-persistent://public/default/example-np-topic \ --subscription-name my-subscription \ --num-messages 1从管理admin视角看非持久化主题的更多操作请参考 admin-api-topics.md 指南中的 Non-persistent topics 一节。用 pulsar-admin 管理非持久化主题非持久化主题的管理通过pulsar-admin non-persistent命令行接口完成。该命令在源码中由 CmdNonPersistentTopics.java 实现注册的子命令包括子命令作用关键参数create-partitioned-topic创建分区非持久化主题主题名non-persistent://tenant/namespace/topic、-p/--partitions分区数必填lookup查找当前服务该主题的 broker主题名stats获取主题及其生产者和消费者的统计信息速率基于最近一个完整的 1 分钟窗口计算主题名stats-internal获取主题的内部统计信息主题名get-partitioned-topic-metadata获取分区主题元数据未创建或非分区主题返回 0 分区主题名list列出命名空间下的所有非持久化主题命名空间tenant/namespacelist-in-bundle列出指定 bundle 内的非持久化主题命名空间、bundle 范围几个典型用法示例# 创建一个 4 分区的非持久化主题 $ bin/pulsar-admin non-persistent create-partitioned-topic \ non-persistent://public/default/example-np-topic -p 4 # 获取非持久化主题的统计信息 $ bin/pulsar-admin non-persistent stats non-persistent://public/default/example-np-topic # 列出命名空间下的非持久化主题 $ bin/pulsar-admin non-persistent list public/default # 查询主题当前由哪个 broker 服务 $ bin/pulsar-admin non-persistent lookup non-persistent://public/default/example-np-topic从源码看这些子命令最终都委托给getAdmin().nonPersistentTopics()对应的管理 API见 CmdNonPersistentTopics.java后端由 broker 中的 NonPersistentTopics.javav1 版本位于 admin/v1/NonPersistentTopics.java提供实现。从源码看非持久化主题的统计口径与持久化主题相比非持久化主题的统计没有 backlog 相关字段因为没有持久化游标。NonPersistentTopic的getStats返回NonPersistentTopicStatsImpl见 NonPersistentTopic.java而 dispatcher 层会单独维护消息丢弃速率getMessageDropRate()见 NonPersistentDispatcherMultipleConsumers.java。当消费者没有 pending receive 请求或消息过期时非持久化 dispatcher 会直接丢弃消息这在pulsar-admin non-persistent stats的速率字段中可以观察到。在 Pulsar 客户端中使用非持久化主题使用非持久化消息时客户端代码无需任何改动——你不需要创建新的客户端类型、也不需要修改任何配置项只要像上文一样使用带non-persistent前缀的正确主题名即可参见 使用一节 与官方文档的 Using with Pulsar clients 章节。例如在 Java 客户端中唯一的区别只是主题字符串// 持久化主题 String persistentTopic persistent://public/default/example-topic; // 非持久化主题同样的 ProducerBuilder / ConsumerBuilder API String nonPersistentTopic non-persistent://public/default/example-np-topic;C、Python、Go 等其余语言客户端同理都只需替换主题名。适用场景与注意事项基于以上概念与源码行为可以总结非持久化主题的定位适用场景对延迟敏感、允许少量消息丢失的实时数据流例如实时监控指标、日志转发、临时通知目标是避免 BookKeeper 写入带来的持久化开销换取更高的吞吐与更低的端到端延迟。代价broker 重启、订阅者断连都会造成该主题上在途消息丢失消息不跨 broker 故障保留也没有 backlog 重放能力。依赖前提必须确认 broker 的enableNonPersistentTopicstrue默认值否则主题不可用standalone 模式下请检查standalone.conf。不要用于金融交易、订单等需要严格不丢失、可回溯的语义场景这类需求应继续使用persistent://持久化主题。如果需要在本地快速验证可以参考本仓库的 standalone 配置standalone.conf与 broker 配置broker.conf直接启动后执行本文中的pulsar-client命令进行端到端测试。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐JAX 持久化编译缓存Persistent Compilation Cache配置与原理完全指南JAX 持久化编译缓存Persistent Compilation Cache配置与原理完全指南 JAX 的编译缓存Persistent Compilat机器学习深度学习Apache Pulsar 主题Topics管理完全指南Admin API、pulsar-admin 与分区路由实战Apache Pulsar 主题Topics管理完全指南Admin API、pulsar admin 与分区路由实战 本篇技术指南以 Apache Pul消息队列后端流处理Apache Pulsar 分区主题Partitioned Topics完全指南从管理到发布的路由原理与实践Apache Pulsar 分区主题Partitioned Topics完全指南从管理到发布的路由原理与实践 分区主题Partitioned Topic消息队列后端流处理上一篇【免费下载】 提升多语言检索效率BAAI bge-reranker-large模型应用解析下一篇Arnis把真实地图搬进 Minecraft 的完整上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

TVM Tirx CUDA 元素级 Tile 原语(elementwise)深度解析:reg 与 smem 双变体派发机制
TVM Tirx CUDA 元素级 Tile 原语(elementwise)深度解析:reg 与 smem 双变体派发机制

模型编译深度学习推理引擎 【免费下载链接】tvm Open Machine Learning Compiler Framework 项目地址: https://gitcode.com/gh_mirrors/tv/tvm 点击查看 免费下载 本文以 docs/tirx/tile_primitives/elementwise.rst 为主线,系统讲解 TVM Tirx&#xf… · 2026/9/23 15:26:38

产品平台与CBB管理:研发降本增效的落地方法论
产品平台与CBB管理:研发降本增效的落地方法论

简介:本资源是一份面向机械、电子、自动化等行业研发管理者的专业培训文档,聚焦大规模定制化时代下的产品平台与CBB(共用基础模块)构建与管理体系,助力企业破解研发周期长、质量不稳定、零部件冗余、成本难控等典型痛点… · 2026/9/23 15:26:38

商朝四大天王揭秘:最佳实践避坑指南
商朝四大天王揭秘:最佳实践避坑指南

商朝四大天王揭秘:最佳实践避坑指南 官方文档往往冗长枯燥,让人抓不住核心重点,这是很多初学者最头疼的问题。想要快速掌握技术底层逻辑,光靠死磕文档效率极低,必须结合最佳实践来拆解。这里提到的“商朝四大天王”,并非指历史上的武丁、盘庚等帝王,而… · 2026/9/23 15:26:38

3个技巧一文搞懂英语四级考试题性能瓶颈
3个技巧一文搞懂英语四级考试题性能瓶颈

3个技巧一文搞懂英语四级考试题性能瓶颈 学会语法却不知怎么搭项目,这是很多开发者卡在瓶颈期的真实写照。你背了单词,读了真题,甚至刷了无数模拟题,但一上手实际业务场景,比如处理高并发下的考试数据解析,代码就慢得像蜗牛。别慌,今天咱们不聊虚的,… · 2026/9/23 16:02:37

如何学好英语进阶用法
如何学好英语进阶用法

告别报错焦虑:3步搞定英语报错阅读与性能优化 盯着满屏红色的 StackTrace 崩溃吗?别慌,这其实是 性能优化 的入场券。 你被英文报错卡住,往往不是词汇量不够,而是没抓住错误堆栈的底层逻辑。… · 2026/9/23 16:02:37

量子力学算符运算规则与应用解析
量子力学算符运算规则与应用解析

1. 量子力学中的算符运算规则详解在量子力学的数学框架中,算符扮演着至关重要的角色。它们不仅是描述物理量的数学工具,更是连接量子态与观测结果的桥梁。让我们深入探讨这些运算规则背后的物理意义和数学本质。1.1 算符作用于左矢的厄米共轭规则当我们处… · 2026/9/23 16:02:37

连续可调稳压电源:LM317闭环、AC-DC多路输出与纹波测量
连续可调稳压电源:LM317闭环、AC-DC多路输出与纹波测量

简介:这是一份输出电压连续可调的稳压电源设计文档,面向硬件设计工程师、电子爱好者与实验室调试人员,用于理解0~30V连续可调稳压电路的设计思路。文档基于CW317(LM317)三端可调稳压器,通过外接… · 2026/9/23 16:02:37

SAP MM 供应商冻结采购
SAP MM 供应商冻结采购

1、供应商集中冻结标记打上,无法控制下单!3、供应商角色级别一般数据删除,打上集中删除标记就可以控制无法下单,但是要配和消息号ME024进行控制4、其实还可以在采购组织级别控制,但是为了减少对每个组织都去打这个标识… · 2026/9/23 16:02:30

Cesium克里金插值三维可视化实战:从离散点到连续表面
Cesium克里金插值三维可视化实战:从离散点到连续表面

简介:面向前端开发与三维可视化人员的Cesium克里金插值实例包,演示了在HTML环境中结合geostat-js进行空间插值并渲染到3D场景的完整流程。包内共6个文件,包括3个JavaScript脚本、1个HTML页面和1个geojson地理数据文件,附带的rar压… · 2026/9/23 16:02:24

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码