elastic-job中一台机器挂掉,其他机器都会执行sharding,并将sharding结果写入zookeeper的/XXXJob/sharding/XXX节点里吗?
下面是shardingService执行的shardingIfNecessary方法
public void shardingIfNecessary() { List<JobInstance> availableJobInstances = instanceService.getAvailableJobInstances(); // isNeedSharding方法会判断zookeeper的necessary节点(该节点会被ListenServersChangeJobListener写入) if (!isNeedSharding() || availableJobInstances.isEmpty()) { return; } if (!leaderService.isLeaderUntilBlock()) { blockUntilShardingCompleted(); return; } waitingOtherJobCompleted(); LiteJobConfiguration liteJobConfig = configService.load(false); int shardingTotalCount = liteJobConfig.getTypeConfig().getCoreConfig().getShardingTotalCount(); log.debug("Job '{}' sharding begin.", jobName); jobNodeStorage.fillEphemeralJobNode(ShardingNode.PROCESSING, ""); resetShardingInfo(shardingTotalCount); JobShardingStrategy jobShardingStrategy = JobShardingStrategyFactory.getStrategy(liteJobConfig.getJobShardingStrategyClass()); // jobShardingStrategy.sharding方法会对job进行sharding,并将结果写入zookeeper,同时删除necessary节点 jobNodeStorage.executeInTransaction(new PersistShardingInfoTransactionExecutionCallback(jobShardingStrategy.sharding(availableJobInstances, jobName, shardingTotalCount))); log.debug("Job '{}' sharding complete.", jobName); }
那么现在问题来了,如果有3台机器,其中有一台机器挂了的话,是不是另外两台机器可能都会执行到第7行,并执行jobShardingStrategy.sharding进行sharding并将结果写入zookeeper?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
引用来自“亮_dangdang”的评论
不会的,只有主节点会执行分片。
可以看一下这一行:
如果不是主节点,则等待主节点分片结束后就退出了。
不会的,只有主节点会执行分片。
可以看一下这一行:
如果不是主节点,则等待主节点分片结束后就退出了。