完整指南:概念、配置、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),仅供参考