跨群集节点对多个主题订阅进行负载平衡

时间:2014-04-23 10:43:48

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

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

下面是否有任何解决方案:

  1. 如果我们必须订阅一个新主题,那么该节点就会更少 load(less topic subscriptions)将订阅此主题。
  2. 当节点脱机时,其所有主题都将由群集中活动的其他节点订阅。
  3. Zookeeper可以用于此目的,以跨节点协调这些信息吗?

2 个答案:

答案 0 :(得分:0)

尝试创建一个负载平衡应用程序,它将执行负载平衡操作,并且应该连接到两个节点。它将对两个节点进行定期健康检查,并以循环方式转发订阅请求。如果节点发生故障,那么它将通过常规运行状况检查得到通知,然后它会将订阅请求转发给一个连接的节点。您可以使用Netty API来创建使用TCP / IP连接的负载均衡器。

答案 1 :(得分:0)

是的,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自动处理