1

我想了解命名空间/主题复制在 Apache Pulsar 中是如何工作的,以及集群大小的变化对现有和新命名空间/主题的复制因子有什么影响。

考虑以下场景:

我从具有以下代理配置的单个节点开始:

# Number of bookies to use when creating a ledger
managedLedgerDefaultEnsembleSize=1

# Number of copies to store for each message
managedLedgerDefaultWriteQuorum=1

# Number of guaranteed copies (acks to wait before write is complete)
managedLedgerDefaultAckQuorum=1

几个月后,我决定使用以下新代理的配置将集群大小增加到两个:

# Number of bookies to use when creating a ledger
managedLedgerDefaultEnsembleSize=2

# Number of copies to store for each message
managedLedgerDefaultWriteQuorum=2

# Number of guaranteed copies (acks to wait before write is complete)
managedLedgerDefaultAckQuorum=2

在上述场景中,集群的行为将是什么:

  1. 这会改变现有主题的复制因子(RF)吗?
  2. 新创建的主题有旧的 RF 还是新指定的 RF?
  3. 命名空间/主题(托管分类帐)-> 经纪人所有权如何工作?

请注意,此时两个代理节点具有不同的配置。

TIA

4

1 回答 1

3

您要更改的是默认复制设置(集成、写入、确认)。您不应该在不同的代理上使用不同的默认值,因为这样您将获得不一致的行为,具体取决于客户端连接到的代理。

复制设置在命名空间级别进行控制。如果您没有明确设置它们,您将获得默认设置。但是,您可以使用CLI或 REST 界面更改各个命名空间的设置。如果您从命名空间上的 (1 ensemble, 1 write, 1 ack) 设置开始,然后更改为 (2 ensemble, 2 write, 2 ack),则会发生以下情况:

  • 命名空间中的所有新主题都使用新设置,每条消息存储 2 个副本
  • 发布到命名空间中现有主题的所有新消息都使用新设置,存储 2 个副本。已存储在现有主题中的消息不会更改。他们仍然只有 1 份。

需要注意的重要一点是代理的数量不会影响消息复制。在 Pulsar 中,代理只处理消息的服务(生产/消费)。Broker 是无状态的,可以水平扩展。消息存储在 Bookkeeper 节点(bookies)上。复制设置(集成、写入、确认)指的是 Bookkeeper 节点,而不是代理。这是 Pulsar 网站上的一张图表,说明了这一点:

脉冲星架构

因此,要从 (1 ensemble, 1 write, 1 ack) 的设置移动到 (2 ensemble, 2 write, 2 ack),您需要在集群中添加一个 Bookkeeper 节点(假设您从 1 开始),而不是另一个经纪人。

于 2020-01-11T14:35:12.547 回答