【问题标题】:Load-balancing multiple topic subscriptions across nodes of cluster跨集群节点负载均衡多个主题订阅
【发布时间】:2014-04-23 10:43:48
【问题描述】:

我们的应用程序订阅了一个主题列表,这些主题可以动态添加/删除。我们计划拥有这样的应用程序节点集群,以便每个节点都可以订阅不同的主题集;类似于集群中节点间的负载均衡订阅。我们不能在多个节点上订阅相同的主题,因为我们需要避免跨节点重复处理相同的消息。

下面有什么解决办法:

  1. 如果我们必须订阅一个新主题,具有较小的节点 load(较少的主题订阅)将订阅此主题。
  2. 当一个节点下线时,它的所有主题都将被集群中其他活跃的节点订阅。

Zookeeper 是否可以用于此目的来协调跨节点的信息?

【问题讨论】:

    标签: java load-balancing distributed-computing publish-subscribe apache-zookeeper


    【解决方案1】:

    尝试制作一个负载平衡器应用程序来执行负载平衡操作,并且它应该连接到两个节点。它将定期对两个节点进行健康检查,并以循环方式转发订阅请求。如果一个节点出现故障,它将通过定期的健康检查得到提示,然后它将订阅请求转发到一个连接的节点。您可以使用 Netty API 来制作使用 TCP/IP 连接的负载均衡器。

    【讨论】:

      【解决方案2】:

      是的,Zookeeper 可以用来实现这个逻辑。看看 Apache Helix Rabbit MQ 配方,它做了类似的事情。

      http://helix.apache.org/0.6.4-docs/recipes/rabbitmq_consumer_group.html

      这解释了单个主题的逻辑。 Helix 将主题/分区分布在集群中的所有节点上。如果您想限制分配分区的节点,您可以相应地标记资源和节点。 例如,如果您有节点 A、B、C、D、E、F

      如果您希望主题 T1,T2 仅在 A 和 B 上,您可以将 A 和 B 标记为 X,并将 Helix 中的资源 T1 和 T2 标记为 X。Helix 将确保仅订阅 T1 和 T2由 A 和 B.

      注意:Helix 中的一个节点/实例可以有多个标签。 1 和 2 应该由 Helix 自动处理

      【讨论】:

        猜你喜欢
        • 2019-12-07
        • 2013-05-23
        • 2011-11-11
        • 2021-10-03
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多