【问题标题】:Broadcast event with zookeeper使用 zookeeper 广播事件
【发布时间】:2018-07-06 04:32:55
【问题描述】:

我想通过 zookeeper 3.4+ 广播事件。

假设我有一些生产者同时增加一个计数器,而监听器则关注这个增量。

我发现我可以从生产者和侦听器更新 znode 值,这些 znode 更改将得到通知。

我可以使用 apache curator shared count。我可以在这个共享计数众所周知的路径上分配侦听器,如果我要更新(增加)共享计数值,则会通知侦听器。

我也可以使用distributed atomic longNode cache listener。情况相同,我将在众所周知的路径上创建这个原子长。侦听器将侦听此路径上的 znode 更改。当我将更新 atomic long 值时,将通知这些节点值的侦听器。

1) 例如上面的例子,我应该使用哪种 zookeepers 结构?

2) 我能否确保每次更新共享计数或分布式原子长时都会被广播,并且监听器一定会收到通知?

3) 任何侦听器都可能错过计数更新事件吗?

【问题讨论】:

    标签: apache-zookeeper apache-curator


    【解决方案1】:

    Path Children Cache 应该是选择。它比其他的更通用,并且比节点缓存更好,因为它提供了事件的类型 (PathChildrenCacheEvent.Type) - 是否为 CONNECTION_RECONNECTED。

    有关更多信息,请参阅 Curator 的源代码。

    【讨论】:

    • 共享计数侦听器,因为共享值侦听器还提供有关连接状态更改的通知。路径子缓存将节点值作为原始字节返回,而共享计数例如返回已经正确的整数,您不需要将字节转换为值。 Shared Count 或任何可数结构在我看来就像 kafka 主题偏移。如果听众对计数增量感兴趣作为通知发出的信号,从我的角度来看,共享计数或可计数结构比只更新原始字节更可取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2016-06-12
    • 2017-05-04
    • 1970-01-01
    • 2023-03-04
    • 2018-01-08
    • 2023-03-27
    相关资源
    最近更新 更多