如何在多个应用程序实例之间进行协调?

时间:2018-02-13 03:59:07

标签: java apache-zookeeper distributed apache-curator

需要帮助来决定我在这种情况下可以使用哪些框架。我正在探索Zookeeper,但不完全确定如何解决这个用例。

背景:

  1. 假设有应用程序连接到流式源(Kafka或Activemq等)并写入从流处理的消息 到一个文件。
  2. 此应用程序部署为4个实例。每个实例正在处理消息并写入最近1小时处理的文件。
  3. 每个实例都会创建一个文件,用于存储最近处理过的消息1  小时。对于从8-9
  4. 处理的消息,example -filename是servername_8.00
  5. 要求是传输所有在1小时内创建的文件,如果每个实例在该窗口中创建了一个文件,并且只发送一个合并文件,列出所有4个文件名和 记录数。
  6. 我在寻找什么
     1.如何确保应用程序实例知道其他实例是否也创建了文件,如果每个实例都创建,那么只有它们应该传输文件  2.无论发送什么实例,合并文件都应该知道发送了什么。

    我可以用什么框架来解决这个问题?

1 个答案:

答案 0 :(得分:0)

你绝对可以使用ZooKeeper。我也会使用Apache Curator(注意:我是策展人的主要作者)。

所有实例共享文件服务器吗?即每个实例可以看到所有创建的文件吗?如果是这样,您可以使用ZooKeeper / Curator提名领导者,只有领导者完成所有工作。您可以在此处查看示例领导者选举代码:https://github.com/apache/curator/tree/master/curator-examples/src/main/java/leader

如果实例不共享文件服务器,您仍然可以使用ZooKeeper来协调共享文件的写入。您将再次提名一个领导者,该领导者公开所有实例可以写入的某种API,并且领导者创建共享文件。

您也可能会发现策展人屏障配方很有用:http://curator.apache.org/curator-recipes/double-barrier.htmlhttp://curator.apache.org/curator-recipes/barrier.html

如果您想要更详细的设计,则必须提供有关用例的更多详细信息。