Apache Pulsar 主题复制随着集群大小的增加

Posted

技术标签:

【中文标题】Apache Pulsar 主题复制随着集群大小的增加【英文标题】:Apache Pulsar topic replication with increase in cluster size 【发布时间】:2020-04-27 22:06:36 【问题描述】:

我想了解命名空间/主题复制在 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

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

    这是否会改变现有主题的复制因子 (RF)? 新创建的主题是旧的 RF 还是新指定的 RF? 命名空间/主题(托管分类帐)-> 代理所有权如何工作?

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

TIA

【问题讨论】:

【参考方案1】:

您要更改的是默认复制设置(集成、写入、确认)。您不应该在不同的代理上使用不同的默认值,因为根据客户端连接到的代理,您会得到不一致的行为。

复制设置在命名空间级别进行控制。如果您没有明确设置它们,您将获得默认设置。但是,您可以使用 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 ),而不是其他经纪人。

【讨论】:

有没有办法识别到 bookie(和副本)存储映射的消息偏移量? 不,该级别的详细信息不可用。

以上是关于Apache Pulsar 主题复制随着集群大小的增加的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pulsar MQ 学习笔记

03_Apache Pulsar的Local与分布式集群构建Pulsar的分布式集群模式Pulsar的分布式集群模式构建启动测试

在 Apache Pulsar 中使用注册模式发布到主题

从 apache pulsar 主题中检索所有过去的消息

详解Apache Pulsar的Topic绑定Broker

Apache-Pulsar 吞吐量