[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1t2uhd7u8u46w":3},{"code":4,"message":5,"data":6,"timestamp":45},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":27,"summary_md":28,"topic":29,"github_topics":32,"license":39,"homepage":40,"updated_at":41,"history":42},"apache\u002Fpulsar",6,"Apache Pulsar - distributed pub-sub messaging system","Java",15354,3776,2,3771,[16,22],{"id":17,"title":18,"points":19,"comments":20,"posted_at":21},23816732,"Pulsar – an open-source distributed pub-sub messaging platform",155,58,"2020-07-13",{"id":23,"title":24,"points":13,"comments":25,"posted_at":26},18881847,"Apache Pulsar – distributed pub-sub messaging system",0,"2019-01-11","面向需要统一队列、事件回放与跨地域复制的团队的多租户发布订阅与流式平台。","当团队既要处理工作队列，又要保留事件流用于回放，还希望跨区域复制部分 topic 时，Apache Pulsar 值得评估；但前提是接受运行一套基于 JVM、自带存储层的集群。对小项目来说，主要决策点不是功能列表，而是运维负担。\n\n## 解决什么问题\n\n团队通常先用一个队列系统跑后台任务，再为事件回放引入一套日志系统，之后又为部分 topic 增加跨地域同步。每套系统都有自己的客户端、保留策略和管理方式。Pulsar 把这些收进一个集群：生产者向 topic 发布消息，消费者可以共享订阅（队列语义），也可以各自完整读取流；broker 会跟踪消费游标位置，因此回放是配置层面的选择，而不是重建系统。最终得到一套开通 API 和一套租户模型，而不是好几套。\n\n## 有什么不同\n\nPulsar 把服务层与存储层分开：broker 负责连接、topic 归属和消息分发，持久数据放在 BookKeeper bookie 中；README 还把跨地域复制、透明的分区 topic、批量发送和负载均衡列为核心能力[项目说明](https:\u002F\u002Fgithub.com\u002Fapache\u002Fpulsar\u002Fblob\u002Fmaster\u002FREADME.md)。实际影响是 broker 更像缓存和路由层，扩容连接数与扩容存储可以分开规划。多租户、认证、授权和配额从设计之初就包含在内，如果你们是为多个团队或客户托管消息服务，而不是只跑一个应用的消息总线，这一点很关键。\n\n代价是 broker 与存储的边界并非免费。2020 年一位 HN 评论者认可无状态 broker 的吸引力，但认为这套 JVM 依赖带来的管理负担，对规模没有特别大的公司并不划算[评论](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=23819050:)；有回复指出 BookKeeper 节点本身是有状态的，替换节点仍涉及数据重新分布[回复](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=23819295:)。这更像是提醒运维工作转移到了哪里，而不是对当前版本的定论。\n\n## 谁值得试\n\n适合：已经在用 Kubernetes、预期多租户、持久回放或跨地域复制，并且希望用一套同时支持队列和流语义的系统减少需要维护的组件数量的平台团队。也适合需要按 topic 管理保留时长和消费游标、但不想自己实现这些能力的组织。\n\n不适合：只需要轻量任务队列或小型发布订阅总线的单一应用，或者没有专人能接手有状态存储层的团队。2020 年有评论者表示生产环境更偏好 RabbitMQ，小项目用 Redis 就够了[评论](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=23817629:)，这反映的是不同的规模与运维意愿。文档提供了 Docker 镜像[容器镜像](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fapachepulsar\u002Fpulsar)和 Helm chart[Helm chart](https:\u002F\u002Fgithub.com\u002Fapache\u002Fpulsar-helm-chart) 两种路径，但它们改变的是安装方式，不会改变理解 broker\u002Fbookie 分工的必要性。\n\n## 使用条件与边界\n\n版本与 JDK 绑定：master 需要 JDK 21、25 或 26，4.0+ 需要 JDK 21，更早的版本需要 JDK 17 或以下[版本表](https:\u002F\u002Fgithub.com\u002Fapache\u002Fpulsar\u002Fblob\u002Fmaster\u002FREADME.md)。因此升级 Pulsar 往往要先升级运行时。构建需要 JDK 和 zip，并按文档准备构建工具；Gradle Wrapper 省去了单独安装 Gradle 的步骤[构建说明](https:\u002F\u002Fpulsar.apache.org\u002Fcontribute\u002Fsetup-buildtools\u002F)。\n\n更大的成本在长期维护。你要负责 broker 和 BookKeeper 的容量、topic 与订阅清理、配额策略，以及各语言客户端之间的版本兼容；[客户端列表](https:\u002F\u002Fgithub.com\u002Fapache\u002Fpulsar\u002Fblob\u002Fmaster\u002FREADME.md)指向独立仓库，连接器、适配器和客户端不一定与核心同步发布。没有一条命令能绕过对“有状态存储节点及其数据迁移”的规划。\n\n## HotRepo 点评\n\nHotRepo 只在 2026-10-25 记录到一次日榜出现，当时 15,353 stars、当天 +2；仅凭这一个有日期的快照，无法判断关注度是在上升、下降还是持续。2020 年的 HN 讨论反映的是当时的讨论量，不代表现在社区的共识。决定采用前，请核对准备运行的具体版本对应的 JDK 要求，并阅读 broker 与 BookKeeper 的运维说明，因为这套架构决定了谁来负责集群。",{"slug":30,"name":31},"devops","运维与部署",[33,34,35,36,37,38],"event-streaming","messaging","pubsub","pulsar","queuing","streaming","Apache-2.0","https:\u002F\u002Fpulsar.apache.org\u002F","2026-10-25T11:06:14Z",[43],{"date":44,"stars":11,"stars_gained":13},"2026-10-25",1792968008]