官方pip
https://github.com/apache/pulsar/wiki/PIP-33%3A-Replicated-subscriptions
测试场景:
集群:sh集群,bj集群
版本:2.5.2
sh集群生产100条消息,sh集群没秒钟消费1条消息,然后观察 Mark Delete Position ,read position的变化。
结论:大约再35条消息时候bj集群的 Mark Delete Position ,read position会更新,推测是消息消费35样子会触发一次同步订阅
疑问:官方说的是1秒钟同步一次,但是测试不是这样的。
疑问2:geo就是一个生产者发往远端集群,当没生产者的时候,为什么这里还是一直再增加?
replicated subscription 的 pip 里面有说明,他是依赖消息传递来同步 subscription state 的
pip实现描述:
拟议的解决方案
地理复制的Pulsar主题可以看作是部分有序日志的集合。
由于生产者可以在每个区域上发布消息,因此每个区域最终可能会有一系列不同于其他区域的消息,尽管来自一个特定区域的消息将始终按顺序存储。
主要思想是创建一致的分布式快照,以建立来自不同群集的消息ID之间的关联。
消息ID的快照将以以下方式构造:
- 对于给定的消息
M1-a
(写入或复制到regiona
) - 我们有一组来自其他地区的关联消息ID,例如。
M3-b
和M1-c
- 当使用者确认所有消息<=时
M1-a
,这意味着它也已接收(并确认)b
消息ID <=的M3-b
区域中的所有消息c
以及消息ID <=的区域中的所有消息M1-c
- 这样,当给定订阅的“标记删除”位置(光标指针)移过
M1-a
区域中的消息时a
,代理将能够指示b
和的代理c
向M3-b
和分别更新订阅M1-c
。
这些快照将作为“标记”消息存储在主题本身中,在将消息分发给使用者之前,它们将被代理过滤掉。
同样,快照本身将通过使“标记”消息内联地流过复制通道来创建。
https://github.com/apache/pulsar/wiki/PIP-33%3A-Replicated-subscriptions
来源:oschina
链接:https://my.oschina.net/xiaominmin/blog/4332111