从不同的独占订阅消费时,Pulsar 分区主题是不是支持全局排序?

Posted

技术标签:

【中文标题】从不同的独占订阅消费时,Pulsar 分区主题是不是支持全局排序?【英文标题】:Does Pulsar partitioned topics support global ordering when consuming from different exclusive subscriptions?从不同的独占订阅消费时,Pulsar 分区主题是否支持全局排序? 【发布时间】:2021-10-29 11:45:46 【问题描述】:

在 Apache Pulsar 文档中,我们有:

假设我们有一个生产者只生产一个分区主题和两个独占订阅(独占订阅保证主题中的排序)!每个订阅中是否会按顺序消费消息?

【问题讨论】:

【参考方案1】:

这取决于你的routing mode。

如果您使用 SinglePartition 模式并且未在消息中提供密钥,则来自单个生产者的所有消息将进入同一个分区并按顺序排列。但这可能不是您想要的,因为您失去了使用分区主题的优势。

如果您使用 SinglePartition 或 RoundRobinPartition(默认)模式并在消息中指定一个 key,则所有具有相同 key 的消息将被放置在同一个分区中并按顺序排列。

否则,没有跨分区的排序保证。消息仅在给定分区内按顺序排列。来自文档:“分区主题实际上是作为 N 个内部主题实现的,其中 N 是分区数”。因此,对分区主题的订阅与多主题订阅相同。这篇文章对https://jack-vanlightly.com/blog/2019/9/4/a-look-at-multi-topic-subscriptions-with-apache-pulsar 的多主题订阅进行了一些测试,表明您不能依赖于分区/多主题的全局排序。

您的两个订阅是独立的,将接收具有上述排序保证的所有消息。请注意,如果按键排序适用于您的用例,您可能需要使用 Key_Shared subscription

【讨论】:

感谢您的解释!我将不得不使用我的方法来获得我想要的行为:)

以上是关于从不同的独占订阅消费时,Pulsar 分区主题是不是支持全局排序?的主要内容,如果未能解决你的问题,请参考以下文章

来自不同消费者组的多个消费者如何从同一个分区中读取?

consumer(KafkaConsumer)

Pulsar消息发送消费架构概述

Kafka分区与消费者的关系

取消订阅 Apache pulsar 共享订阅类型

Pulsar 消费者中“最新”和“最早”的意外行为