@Override
  public void spectate() throws Exception {
    HelixFactory helixFactory = new HelixFactory();
    String selfInstanceName =
        ClusterMapUtils.getInstanceName(clusterMapConfig.clusterMapHostName, clusterMapConfig.clusterMapPort);

    // Should we fail here if even one of the remote zk connection fails? If we have just one datacenter, then this will not be a problem.
    // If we have two data centers, then its not clear if we should pass the startup with one remote zk connection failure. Because if remote
    // zk connection fails on both data centers, then things like replication between data centers might just stop.
    // For now, since we have only one fabric in cloud, and the spectator is being used for only cloud to store replication, this will work.
    // Once we add more fabrics, we should revisit this.
    HelixManager helixManager =
        helixFactory.getZkHelixManagerAndConnect(cloudConfig.vcrClusterName, selfInstanceName, InstanceType.SPECTATOR,
            cloudConfig.vcrClusterZkConnectString, clusterMapConfig);

    helixManager.addInstanceConfigChangeListener(this);
    helixManager.addLiveInstanceChangeListener(this);
  }
Constructor for {@link HelixVcrClusterSpectator}.
@param cloudConfig Cluster config of vcr.
@param clusterMapConfig Cluster Map config.
ambry-cloud/src/main/java/com/github/ambry/cloud/HelixVcrClusterSpectator.java