【问题标题】:ActiveMQ replicated levelDB with zookeeperActiveMQ 使用 zookeeper 复制 levelDB
【发布时间】:2014-11-05 13:07:33
【问题描述】:

我想了解 Zookeeper 在 ActiveMQ 代理的复制 leveldb 中的作用。

  1. 关于 zookeeper 选举:zookeeper 如何知道在所有连接到 zookeeper 的客户端中,哪些客户端是 ActiveMQ 代理争相成为 master。是否有任何特定的密钥或配置由所有连接到 zookeeper 的代理传递,这表明我们(比如说 3 个)ActiveMQ 代理属于同一环境并努力成为主人。

  2. 从代理从主代理复制数据的时间间隔是多少?任何可能丢失数据的极端情况?

  3. ActiveMQ 是否使用复制的 leveldb 提供消息排序保证?我说的是在生产者按顺序向代理发送消息时发生主节点重选的情况?

谢谢,
阿努杰

【问题讨论】:

    标签: activemq apache-zookeeper leveldb


    【解决方案1】:
    1. 通过 Zookeeper 配置中的 zkPath 和代理名称。
    2. 在事务完成之前,每条消息都会同步到法定人数(节点/2+1)代理。所以没有同步间隔,它是实时同步的。除非您有足够数量的在线代理,否则集群将无法运行,因此不会丢失数据。
    3. 消息以同步方式同步到大多数节点。在重选时,将选出具有最新更新的节点。有序消息应该没问题。但是,严格依赖消息队列中的有序消息通常是有问题的。根据经验 - 消息订单只会在“快乐的日子”下完成。死信、多个消费者等等也可能会打乱消息顺序。

    【讨论】:

    • 我有一个测试用例:假设我们有一个由 3 个代理组成的节点,其中 B1 是主节点,b2,b3 是从节点。消息(m1)由 b1 复制,但不由 b2 复制,但 m1 之后的下一条消息(假设 m2)首先由 b2 复制,而不是由 b1 复制。在这种情况下:(b1 有 m1) 和 (b2 有 m2) 如果此时 master 宕机并且 b1 成为 master 则我们将丢失 m2 消息。 ActiveMQ 如何处理这个松散的消息?
    • 很好的解释。您能解释一下如果我们有多个消费者或死信队列,为什么订单会混乱?
    猜你喜欢
    • 2015-09-11
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多