一粟 · yisu.app
· 13 min read
mqkafka

Kafka 与 Pulsar:我们来回切换的故事

选型不是单选题。我们曾因为分层存储和 topic expansion 从 Kafka 切到 Pulsar,又在两年后因为运维复杂度切了回来。这条路值得复盘。

2022 年我们因为两个痛点从 Kafka 切到了 Pulsar:一是 topic 数量突破 5000 后 controller 抖动;二是冷数据想下沉到 S3 但 Kafka 那时还没原生支持。两年后,我们又把核心业务切回了 Kafka。这一来一回的复盘,可能比任何"选型对比"文章都更真实。

为什么离开 Kafka

2022 年的痛点是真实的。Kafka 在 topic 多了之后的几个具体问题:

  • Controller 在 5000+ topic 时元数据同步慢,新 broker 上线时 cluster state 推送要 30 秒。
  • partition rebalance 期间吞吐明显抖动。
  • 分层存储当时还在 KIP-405 阶段,未正式发布。

而 Pulsar 的"分层存储原生支持"+"计算与存储分离"看起来正好对应这些痛点。

Pulsar 的优势确实存在

切过去后,几个收益是实打实的:

能力Kafka(2022)Pulsar
topic 数量5000+ 抖动无感(broker 无状态)
冷数据下沉需自己实现原生 tiered storage
扩容速度慢(需搬 partition)快(broker 无状态)
多租户原生支持

这些收益让我们在 2022–2024 两年里跑得还不错。

为什么又切回 Kafka

两年后切回来,原因不是 Pulsar"不好",而是它的"复杂度成本"在我们这个规模下不划算。具体问题:

  1. 运维链路长:Pulsar = broker + bookkeeper + zookeeper 三套组件。任何一个出问题都要查。Kafka 只有一套。
  2. BookKeeper 抖动:bookie 的 journal 写盘对 IO 敏感,跟其他服务混布时容易抖。
  3. 社区与生态:Kafka 生态远比 Pulsar 丰富。从 Kafka Connect 到 Debezium 到各种 Sink,Pulsar 都要"找替代"。
  4. Kafka 进步了:KRaft 模式去掉了 ZooKeeper;分层存储 KIP-405 在 3.6 正式发布;topic 数量在 KRaft 下显著改善。

当我们把"离开 Kafka 的痛点"逐条对照 Kafka 2024 的版本,发现大部分已经不再是问题。

选型最危险的时刻,是"为新工具的优点激动,但忘了评估原工具也在演进"。

切换的代价

来回切换不是免费的:

  • 迁移工程:每次都要写双写、对账、灰度切流、回滚预案。两年时间里有 4 个月在迁移上。
  • 团队学习:Pulsar 的概念模型(topic subscription vs consumer group)与 Kafka 不同,团队要重新熟悉。
  • 监控体系:两套指标体系,告警规则要重写。

这次切回来后我们算了总账:来回切换的工程成本,约等于"用 Kafka 顶两年再升级到 KRaft"的 3 倍。

Kafka 2024 解决了什么

切回来后,对比 2022 的痛点:

  • Controller 抖动:KRaft 模式下元数据走 Raft,5000+ topic 推送 < 3 秒。
  • 扩容:partition reassignment 仍需手动触发,但速度更快。
  • 分层存储:KIP-405 在 3.6 GA,冷数据自动下沉到 S3/OSS。

没解决但能接受的:多租户仍弱(我们用 namespace + quota 模拟);broker 状态仍"有"(不像 Pulsar broker 真无状态),但 KRaft 让扩容快很多。

Pulsar 什么时候仍然值得选

不是说 Pulsar 不好,是"我们的规模下不划算"。Pulsar 仍然适合的场景:

  • topic 数量 10 万级别(Kafka 仍吃力)。
  • 多租户强隔离(Pulsar 原生支持)。
  • 需要 geo-replication(Pulsar 内建,Kafka 要 MirrorMaker2)。
  • 团队对 BookKeeper 有经验。

选型方法论

这次来回切换让我学到几条选型纪律:

  1. 评估"现状"也要评估"演进"。今天的痛点可能是明天的修复。
  2. 把"运维复杂度"算进 TCO。Pulsar 的三套组件每年多出 X 人月运维成本,要算进去。
  3. 试运行而不是评估。我们切 Pulsar 前跑了 1 个月试运行,但仍没暴露 BookKeeper 的 IO 抖动——因为它只在多租户混布时出现。
  4. 切换成本是沉没成本。别为了"已经投了"就硬撑。

给在选型里的同学几句话

  • Kafka 与 Pulsar 都成熟,没有"谁更好",只有"谁更适合"。
  • 团队的熟悉度比工具的"先进性"更重要。
  • 迁移成本永远比你预估的高 2 倍。
  • 选完就别犹豫,把精力放在用好它。

这件事过后,我不再相信"哪个工具更好"这类讨论。真正的工程问题不是"选哪个",而是"如何让选定的那个跑稳"。这后者,需要的是耐心与纪律。