资讯详情

资讯详情

Apache Pulsar 非持久化主题(Non-persistent Topics)实战指南:配置、命令行管理与客户端使用

消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载导读本文聚焦 Apache Pulsar 中的非持久化主题Non-persistent topics消息数据从不落盘、仅驻留在 broker 内存中的主题类型。你将学会非持久化主题的命名规则与适用场景、如何在 broker 配置中开启enableNonPersistentTopics、如何用pulsar-admin non-persistent命令管理它们以及如何在不改动客户端代码的前提下直接生产/消费消息。全文以当前仓库site2/website-next/versioned_docs/version-2.2.0/cookbooks-non-persistent.md为骨架并结合 broker 源码与配置文件给出实现级细节。Overview什么是非持久化主题默认情况下Pulsar 会把所有未确认unacknowledged的消息持久化到多个 BookKeeper bookie存储节点上。持久化主题上的消息数据因此可以在 broker 重启、订阅者故障切换failover后存活。Pulsar 同时支持非持久化主题这类主题上的消息从不持久化到磁盘仅存在于内存中。使用非持久化投递时如果杀掉一个 Pulsar broker 或断开某个订阅者连接该非持久化主题上所有传输中的in-transit消息都会丢失客户端可能观察到消息丢失。非持久化主题的完整名称形如注意名称中的non-persistent域标识non-persistent://tenant/namespace/topic关于非持久化主题更上层的信息可参考 Concepts and Architecture 文档 中的非持久化主题章节。与持久化主题的本质差异源码佐证从 broker 源码结构看非持久化主题由独立类承载pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java。该类继承AbstractTopic并实现Topic接口与持久化主题的核心差异体现在没有 ManagedLedger / BookKeeper 写入链路。NonPersistentTopic内部不持有ManagedLedger消息发布路径publishMessage()直接通过内存EntryEntry entry create(0L, 0L, duplicateBuffer)推送给各订阅者的 dispatcher 与跨集群 replicator而不会写 BookKeeper参见 NonPersistentTopic.java。无持久化元数据。主题 epoch 等元数据只在内存中维护incrementTopicEpoch/setTopicEpoch直接返回内存计算结果注释明确写着 “Non-persistent topic does not have any durable metadata, so were just keeping the epoch in memory”见 NonPersistentTopic.java。消息去重deduplication检查为空操作checkMessageDeduplicationInfo()为No-op见 NonPersistentTopic.java。订阅不持久NonPersistentSubscription建立在内存中broker 重启即消失。这些差异决定了非持久化主题牺牲可靠性换取更低发布延迟省去了写盘fsync / BookKeeper 复制开销。从 admin-api-topics.md 的说明看非持久化主题面向“只消费实时发布消息、不需要持久化保证”的应用。Using如何生产/消费非持久化主题使用非持久化主题前必须先在 broker 配置中开启enableNonPersistentTopics默认即为true。使用非持久化主题时客户端唯一要做的区别就是按名称区分主题——在完整主题名中带上non-persistent域即可。例如下面的pulsar-client produce命令在 standalone 集群上向非持久化主题生产一条消息$ bin/pulsar-client produce non-persistent://public/default/example-np-topic \ --num-produce 1 \ --messages This message will be stored only in memory消费侧同理使用pulsar-client consume并指定non-persistent://tenant/namespace/topic形式的主题名$ bin/pulsar-client consume non-persistent://public/default/example-np-topic \ --subscription-name my-subscription \ --num-messages 1从管理视角看更完整的非持久化主题管理指南参见 Managing non-persistent topics管理 API 概览。服务端解析路径从代码看broker 管理接口通过请求路径前缀区分主题域AdminResource.domain()判断 URI 以persistent/开头返回persistent以non-persistent/开头返回non-persistent见 AdminResource.java。因此non-persistent://前缀是服务端识别与路由非持久化主题的入口。Enabling在 broker 配置中启用非持久化主题要在一个 Pulsar broker 上启用非持久化主题需将enableNonPersistentTopics配置项设为true。该值默认为true所以通常无需任何额外操作即可使用非持久化消息。在conf/broker.conf中对应配置如下见 broker.conf# Enable broker to load persistent topics enablePersistentTopicstrue # Enable broker to load non-persistent topics enableNonPersistentTopicstrue在 broker 源码中这两个开关定义于pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.javaenablePersistentTopics默认true见 ServiceConfiguration.javaenableNonPersistentTopics默认true注解说明为 “Enable broker to load non-persistent topics”见 ServiceConfiguration.javastandalone 模式的配置位置如果你以 standalone 模式运行 Pulsar同样的配置参数位于standalone.conf文件中对应参考配置文档中的 standalone 配置。如果希望 broker只提供非持久化主题可将enablePersistentTopics设为false、同时保持enableNonPersistentTopicstrue# broker.conf仅启用非持久化主题的极端场景 enablePersistentTopicsfalse enableNonPersistentTopicstrue相关性能调优参数扩展围绕非持久化主题conf/broker.conf中还有两个值得关注的内存/吞吐参数定义见 broker.conf默认值取自 ServiceConfiguration.java参数默认值说明maxConcurrentNonPersistentMessagePerConnection1000单条连接上可并发处理的非持久化消息上限numWorkerThreadsForNonPersistentTopicCPU 核数Runtime.getRuntime().availableProcessors()服务于非持久化主题的 worker 线程数可通过配置文件留空让系统自动按核数确定Managing with CLI用 pulsar-admin 管理非持久化主题非持久化主题可以通过pulsar-admin non-persistent命令行接口管理。该 CLI 在源码中由pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNonPersistentTopics.java实现注册的子命令包括见 CmdNonPersistentTopics.java子命令说明create-partitioned-topic创建分区非持久化主题需通过-p/--partitions指定分区数lookup从当前提供服务的 broker 上查找lookup主题stats获取主题及其生产/消费者统计信息stats-internal获取主题内部统计信息get-partitioned-topic-metadata获取分区主题元数据list列出某 namespace 下的非持久化主题list-in-bundle列出某 namespace bundle 范围内的非持久化主题常用示例# 创建 4 个分区的非持久化分区主题 $ bin/pulsar-admin non-persistent create-partitioned-topic \ non-persistent://public/default/my-np-topic \ --partitions 4 # 获取主题统计速率按最近 1 分钟窗口计算 $ bin/pulsar-admin non-persistent stats \ non-persistent://public/default/my-np-topic # 列出 namespace 下全部非持久化主题 $ bin/pulsar-admin non-persistent list public/default # 列出指定 bundle 范围内的非持久化主题 $ bin/pulsar-admin non-persistent list-in-bundle public/default --bundle 0x00000000_0xffffffff注意几点来自源码的约束create-partitioned-topic要求--partitions参数且分区主题须在创建生产者之前先创建好见 CmdNonPersistentTopics.java 中的 CreatePartitionedCmd 描述。stats的速率统计按 1 分钟窗口计算。REST API 层面非持久化主题管理路径以non-persistent为 schema 前缀如/admin/v2/non-persistent/:tenant/:namespace与持久化主题共用一套管理接口模型。管理接口与持久化主题的差异虽然 CLI 入口相近但非持久化主题缺少持久化主题的部分能力。从pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java的检查逻辑可以确认按时间戳获取消息 IDget-message-by-timestamp、peek 消息、expire 消息等操作对非持久化主题均不被允许会返回METHOD_NOT_ALLOWED见 PersistentTopicsBase.java 与 PersistentTopicsBase.java。订阅时若开启readCompacted非持久化主题也会直接拒绝readCompacted only valid on persistent topics见 NonPersistentTopic.java。Using with Pulsar clients客户端使用注意事项使用非持久化消息时Pulsar 客户端本身不需要任何改动——只需确保使用正确的主题名称即主题类型域为non-persistent的完整主题名。生产者ProducerBuilder中传入non-persistent://tenant/namespace/topic即可其余 API 用法与持久化主题完全一致。消费者同样仅需在ConsumerBuilder/ReaderBuilder中指定non-persistent://主题名订阅、ack、消息回调等 API 均通用。从源码推断客户端无需感知主题类型因为服务端AdminResource.domain()已根据non-persistent前缀完成路由客户端只在 broker 配置未开启非持久化主题时收到创建主题失败的错误。总结与适用场景非持久化主题是 Pulsar 在“持久化可靠性”之外提供的内存级实时消息通道核心取舍如下维度非持久化主题持久化主题默认消息存储仅内存不写 BookKeeper多副本写入 BookKeeper bookie可靠性broker 重启 / 订阅者断连即丢失在途消息可跨 broker 重启、订阅者故障切换存活延迟更低省去持久化开销相对更高适用场景实时流式消费、无需回溯、可容忍丢失需要消息不丢失、可重放、可回溯典型适用场景包括实时监控指标、日志流式消费、需要极低发布延迟且允许一定消息丢失的流处理管道。启用、管理、客户端接入的完整路径为broker 配置开启 →pulsar-admin non-persistent管理 → 客户端以non-persistent://前缀接入三步即可在集群中跑通内存级消息通道。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar 非持久化主题Non-persistent Topics实战指南概念、配置与 CLI 管理Apache Pulsar 非持久化主题Non persistent Topics实战指南概念、配置与 CLI 管理 非持久化主题Non persist消息队列后端流处理Apache Pulsar 非持久化主题Non-persistent Topics实战指南从内存分发原理到 CLI 管理Apache Pulsar 非持久化主题Non persistent Topics实战指南从内存分发原理到 CLI 管理 本文聚焦 Apache Puls消息队列后端流处理Apache Pulsar 非持久化主题Non-persistent Topics完整指南概念、配置、CLI 与源码原理Apache Pulsar 非持久化主题Non persistent Topics完整指南概念、配置、CLI 与源码原理 非持久化主题non persi消息队列后端流处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →