如何实现 Pulsar 的强顺序性保证?

  • Pulsar 的消息顺序性基于分区(Partition),每个分区对应一个 managed ledger,它管理一组 BookKeeper ledgers,同时只存在一个活跃的 ledger。而每个 ledger 的写入顺序性是通过 BookKeeper 来保证的;
  • 对于 Pulsar 客户端针对错误场景而进行消息自动重发导致的乱序,默认为无法保证,除非开启消息去重。例如:发送 1 2 3,客户端发现 2 的发送失败,重发 2,此时顺序的定义不再是 1 2 3,而是 1 2 3 2。而去重是基于消息自带的序列号(sequence id)的,即会拒绝第二次 2 的发送。