我们使用Spring来运行调度任务,这在单节点上运行良好。我们希望在由N个节点组成的集群中运行这些计划任务,以便任务在一个时间点由一个节点执行。这是针对企业用例的,我们预计最多会有10到20个节点。
我研究了各种选择:
我倾向于使用#3,这似乎是一个安全的解决方案,假设zookeeper集合节点运行在单独的集群上,系统时钟使用NTP同步。这也是基于这样一个假设:如果系统时钟同步,那么所有节点都有同等的机会获得锁以执行任务
编辑:经过进一步思考,我意识到这可能不是一个安全的解决方案,因为系统时钟应该在调度任务运行的节点之间同步,而不仅仅是zookeeper集群节点。我说的不安全是因为运行任务的节点可能会因GC暂停和其他原因而过载,而且时钟可能会不同步。但我还是认为这是分布式系统的标准问题。
你能告诉我我对每个选项的理解是否准确吗?或者可能有比列出的选项更好的方法来解决这个问题。
Zookeeper或Etcd不是这个用例的最佳工具。
如果您的环境允许您使用akka,那么使用akka群集最小邮箱路由器或您喜欢的任何群集路由器都会更容易。然后将调度作业推送到集群的ActorRef。更容易设置,您可以使用它在集群中设置数千个节点(它使用cassandra和nomad使用的协议)。
Scalecbe也很容易做到这一点,它使用SWIM。
你可以这样改进#3。
动物园管理员提供观察者。也就是说,您可以在给定的ZNode上设置观察者(比如在path/some/path
)。群集中的所有节点都在监视同一个Znode。每当节点认为(按计划或以任何方式)现在应该运行计划的任务,
/some/path
(所有节点都在监视)下创建一个子节点。此外,还可以根据需要设置该节点的数据。它可能是一个json字符串,指定要运行的任务的详细信息。新的ZNode路径看起来像/some/path/prefix_
这种设计通过检查给定ZNode下名为
success
的子节点来确保任务不会运行两次,该ZNode是为通知启动任务而创建的。
我已经将上述设计用于一个企业解决方案。实际上是用于分布式命令框架;-)
本文向大家介绍ZooKeeper 集群 ?相关面试题,主要包含被问及ZooKeeper 集群 ?时的应答技巧和注意事项,需要的朋友参考一下 为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。通常 3 台服务器就可以构成一个 ZooKeeper 集群了。ZooKeeper 官方提供的架构
我们正在尝试使用ZK设置火花高可用性设置。我们有2台机器用于Spark进程的主机,另有3台机器用于Spark从机。Spark主机中的配置在spark-env.sh中如下所示: 其中DEV-SMP-Manager01:2181DEV-SMP-Worker01:2181、DEV-SMP-Worker05:2181是ZK法定人数。它们都在运行。 我们看到了一些与curator相关的错误消息 java.l
本文向大家介绍ZooKeeper 集群角色 ?相关面试题,主要包含被问及ZooKeeper 集群角色 ?时的应答技巧和注意事项,需要的朋友参考一下 但是,在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了 Leader、Follower 和 Observer 三种角色。如下图所示 ZooKeeper 集群中的所有机器通过一个 Leader 选举过程 来选定一台称为
我试图安装一个Flink HA群集(动物园管理员模式),但任务管理器找不到作业管理器。 这里我给你介绍一下建筑; 大师: 奴隶: flink-conf.yaml: 这里是任务管理器的日志,它试图连接到localhost而不是Machine1: PS.:/etc/hosts包含localhost、Machine1和Machine2 你能告诉我任务经理如何连接到工作经理吗? 当做
本文向大家介绍ZooKeeper 集群中的服务器状态?相关面试题,主要包含被问及ZooKeeper 集群中的服务器状态?时的应答技巧和注意事项,需要的朋友参考一下 LOOKING :寻找 Leader。 LEADING :Leader 状态,对应的节点为 Leader。 FOLLOWING :Follower 状态,对应的节点为 Follower。 OBSERVING :Observer 状态,对
这就是我如何开始我的3个Kafka节点: 动物园管理员和Kafka集群在独立测试时表现良好。 我的意思是,我可以连接到一个Zookeeper节点(比如zoo1),并创建一个zNode。我可以在之后停止节点(例如,docker停止zoo1),并且我仍然可以从Zookeeper集群中的任何其他节点查询znode。 我将收到一个未知的HostException: 但是,我确实需要Kafka集群能够充分发