资讯动态

Apache Pulsar 2.0 升级指南:Tenant 命名体系、Topic 名称简化与 Pulsar Functions 新特性

发布时间:2026/9/23 12:04:38 来源:尧图企业网站定制
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载本篇技术指南以 Pulsar 2.0 这一重大版本为核心系统讲解其两大核心变更将property属性术语全面替换为tenant租户以及重构 Topic 名称体系移除 cluster 组件、引入默认值驱动的灵活命名。读完本文你将掌握 Pulsar 2.0 及之后版本中 Topic 完整名称与简写名称的解析规则、pulsar-admin tenants命令行管理方法以及 2.0 引入的 Pulsar Functions 轻量计算能力的核心编程模型。Pulsar 2.0一次带来大胆变更的重大版本Pulsar 2.0 是 Pulsar 平台的一个重大版本发布为整个系统引入了一些具有突破性的变更主要包括新特性说明Pulsar Functions为 Pulsar 提供的轻量级计算compute能力同时2.0 版本带来了若干重大变更Major changes这些变更会显著影响用户的日常使用习惯需要特别关注property术语被tenant取代pulsar-admin properties命令行接口被替换为pulsar-admin tenantsTopic 名称体系重构名称中不再包含 cluster 组件property更名为tenant并引入了基于默认值的灵活简写命名规则/不允许出现在 Topic 名称中本地名称local name部分不能包含斜杠。下文将逐一深入这些变更的细节、动机与底层实现。Pulsar Functions2.0 引入的轻量计算能力作为 Pulsar 2.0 最重要的新增特性Pulsar Functions 是一种轻量级计算进程它能够从一个或多个 Pulsar Topic 消费消息对每条消息应用用户提供的处理逻辑将计算结果发布到另一个 Topic。编程模型Pulsar Functions 的核心编程模型非常简单函数从输入 Topic接收消息每收到一条消息函数会完成以下任务之一或多个对输入应用处理逻辑并将输出写入 Pulsar 的输出 Topic或 Apache BookKeeper 状态存储将日志写入日志 Topic便于调试递增一个计数器。例如可以构建如下处理链路Python 函数监听raw-sentencesTopic 并清洗字符串去除多余空白、转小写随后将结果发布到sanitized-sentencesTopicJava 函数监听sanitized-sentencesTopic 统计窗口内单词出现次数并发布到resultsTopic最终由 Python 函数将结果写入 MySQL 表。Word Count 示例Java 实现使用 Java 版 Pulsar Functions SDK 实现经典的词频统计package org.example.functions; import org.apache.pulsar.functions.api.Context; import org.apache.pulsar.functions.api.Function; import java.util.Arrays; public class WordCountFunction implements FunctionString, Void { // 每当输入 Topic 有新消息发布时该函数被调用 Override public Void process(String input, Context context) throws Exception { Arrays.asList(input.split( )).forEach(word - { String counterKey word.toLowerCase(); context.incrCounter(counterKey, 1); }); return null; } }上述代码中context.incrCounter(key, amount)是 functions-develop.md 中定义的上下文计数器接口函数可以通过它维护跨消息的累计状态。打包成 JAR 后即可用命令行部署到集群$ bin/pulsar-admin functions create \ --jar target/my-jar-with-dependencies.jar \ --classname org.example.functions.WordCountFunction \ --tenant public \ --namespace default \ --name word-count \ --inputs persistent://public/default/sentences \ --output persistent://public/default/count注意这里的--tenant public --namespace default与下文将介绍的 Pulsar 2.0 默认租户/命名空间体系完全对应。消息处理语义Pulsar Functions 提供三种消息投递语义可在创建函数时通过--processing-guarantees指定投递语义说明At-most-once至多一次每条消息可能被处理也可能不被处理至多一次At-least-once至少一次每条消息可能被处理多次至少一次Effectively-once恰好一次/有效一次每条消息对应一个输出结果例如下面的命令创建一个EFFECTIVELY_ONCE语义的函数$ bin/pulsar-admin functions create \ --name my-effectively-once-function \ --processing-guarantees EFFECTIVELY_ONCE # 其他函数配置可选值为ATMOST_ONCE、ATLEAST_ONCE、EFFECTIVELY_ONCE。默认情况下不指定该参数时函数提供 at-least-once 投递保证。创建后还可通过pulsar-admin functions update --processing-guarantees ATMOST_ONCE动态调整语义。重大变更一Property 更名为 Tenant在 Pulsar 2.0 之前系统使用property属性这一概念进行多租户隔离。而 property 本质上与 tenant租户是同一个东西因此在 2.0 版本中property 术语被正式移除统一改称为tenant。这一变更最直观的体现就是命令行接口的替换原pulsar-admin properties接口 → 现pulsar-admin tenants接口。在 reference-pulsar-admin.md 中可以看到tenants命令组提供完整的租户生命周期管理操作$ pulsar-admin tenants subcommand其子命令包括list列出已有租户 ——pulsar-admin tenants listget获取指定租户配置 ——pulsar-admin tenants get tenant-namecreate创建新租户 ——pulsar-admin tenants create tenant-name optionsupdate更新租户 ——pulsar-admin tenants update tenant-name optionsdelete删除租户 ——pulsar-admin tenants delete tenant-name其中create与update支持以下选项选项说明默认值-r,--admin-roles逗号分隔的管理员角色列表无-c,--allowed-clusters逗号分隔的允许访问的集群列表无而delete支持-f, --force选项用于强制删除租户同时删除其下所有 namespace默认值为false。从源码结构看这一 CLI 实现位于 CmdTenants.java其内部通过getAdmin().tenants()调用管理 API 完成getTenants()、getTenantInfo()、createTenant()、updateTenant()、deleteTenant()等操作对应了文档所述的子命令集合。注意在某些场景下 properties 术语仍然被使用但现在已视为**废弃deprecated**用法将在未来版本中被彻底移除。重大变更二Topic 名称体系重塑旧命名格式在 Pulsar 2.0 之前所有Pulsar Topic 的名称都采用如下形式{persistent|non-persistent}://property/cluster/namespace/topic即名称由四个部分组成持久化类型、property属性、cluster集群、namespace命名空间以及 topic 名称本身。新命名格式与三项关键变化Pulsar 2.0 对 Topic 名称做出了以下重要调整移除了 cluster 组件详见下文property 更名为 tenant引入了灵活的简写命名体系可大幅缩短大部分 Topic 名称/不允许出现在 Topic 名称中作为分隔符之外的本地名称部分不允许含斜杠。移除 cluster 组件后所有 Topic 名称现在都采用如下形式{persistent|non-persistent}://tenant/namespace/topic即从四段式简化为三段式tenant/namespace/topic。在 TopicName.java 的源码解析逻辑中这一变化被直接体现出来解析器通过按/切分限制为 4 段当结果恰好为 3 段时按新格式tenant/namespace/localName解析并将cluster置为null当结果为 4 段时按旧格式tenant/cluster/namespace/localName解析。兼容性说明使用旧版名称格式的既有 Topic 将继续正常工作无需任何修改Pulsar 也没有计划取消这种兼容性。从源码也可以印证TopicName同时保留了对新旧两种格式的解析分支并将 legacy 名称归一化处理。灵活命名Flexible topic naming虽然 Pulsar 2.0 中所有 Topic 名称在内部都采用{persistent|non-persistent}://tenant/namespace/topic的完整形式但出于简化使用的考虑大多数场景下现在可以使用简写名称。这一灵活命名体系的根源在于Pulsar 2.0 引入了默认的 Topic 类型、租户和命名空间Topic 维度默认值Topic 类型topic typepersistent租户tenantpublic命名空间namespacedefault也就是说当你省略某一部分时Pulsar 会将其自动补齐为默认值。下表给出了一些简写名称到完整名称的转换示例输入的 Topic 名称转换后的完整 Topic 名称my-topicpersistent://public/default/my-topicmy-tenant/my-namespace/my-topicpersistent://my-tenant/my-namespace/my-topic这一默认值逻辑在 TopicName.java 中同样有明确的常量定义PUBLIC_TENANT public、DEFAULT_NAMESPACE default。当传入的名称不含://即短名称时解析器会按如下规则补全见 TopicName.java名称形如tenant/namespace/topic3 段自动添加persistent://前缀名称只有一个单词1 段即topic自动补全为persistent://public/default/topic其他形式如 2 段抛出IllegalArgumentException提示应使用tenant/namespace/topic或topic格式。非持久化 Topic 的例外情况需要注意的是上述基于默认值的简写规则仅适用于持久化persistentTopic。对于非持久化 Topic你必须指定完整的 Topic 名称。例如你不能使用类似non-persistent://my-topic的简写名称而必须写成non-persistent://public/default/my-topic从 concepts-messaging.md 可以看到非持久化 Topic 的完整形式为non-persistent://tenant/namespace/topic生产者与消费者可以像连接持久化 Topic 一样连接非持久化 Topic唯一的区别是名称必须以non-persistent开头且支持 exclusive、shared、failover 三种订阅类型。无需显式创建 Topic与 Topic 名称相关的另一个重要特性是Pulsar 中无需显式创建 Topic。如果客户端尝试向一个尚不存在的 Topic 写入或接收消息Pulsar 会自动在 Topic 名称指定的 namespace 下创建该 Topic如果客户端创建 Topic 时未指定 tenant 和 namespaceTopic 将创建在默认的public租户与default命名空间中见 concepts-messaging.md。总结迁移到 Pulsar 2.0 命名体系的关键清单Pulsar 2.0 的命名体系变革可以从三个层面把握术语层面property全面更名为tenant命令行工具由pulsar-admin properties迁移至pulsar-admin tenants旧术语仅保留为废弃兼容Topic 名称结构层面由{persistent|non-persistent}://property/cluster/namespace/topic简化为{persistent|non-persistent}://tenant/namespace/topiccluster 组件被移除旧格式 Topic 继续兼容运行日常使用层面持久化 Topic 支持基于默认值persistent、public、default的简写命名例如my-topic即代表persistent://public/default/my-topic而非持久化 Topic 必须始终写全名且 Topic 本地名称中不允许出现/。配合 Pulsar 2.0 新增的 Pulsar Functions 轻量计算能力其部署命令中的--tenant/--namespace参数正是新命名体系的直接应用你可以用更简洁、更清晰的方式组织和管理 Pulsar 集群中的多租户资源与消息流。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar 2.0 升级指南简化 Topic 命名、Tenant 术语重构与 Pulsar Functions 新特性解读Apache Pulsar 2.0 升级指南简化 Topic 命名、Tenant 术语重构与 Pulsar Functions 新特性解读 Pulsar 2.消息队列后端流处理Apache Pulsar 多租户机制详解Tenant、Namespace 与基于 __change_events 系统主题的 Topic 级策略Apache Pulsar 多租户机制详解Tenant、Namespace 与基于 __change_events 系统主题的 Topic 级策略 Apach消息队列后端流处理Apache Pulsar Flume Source Connector 实战指南将 Flume Agent 日志导入 Pulsar TopicApache Pulsar Flume Source Connector 实战指南将 Flume Agent 日志导入 Pulsar Topic Flume消息队列后端流处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价