Another tool might be Consul.
Eureka is mostly a service discovery tool and mostly designed to use inside AWS infrastructure.
Zookeeper is a common-purpose distributed key/value store which can be used for service-discovery in conjunction with curator-x-discovery framework
Here is a brief overview of service-discovery solutions
You can also find comparison of Consul vs Eureka vs Zookeeper here.
Although Consul is as well as zookeeper - can be used not only for discovery but as a key/value store, the advantages of Consul are cool service discovery features out of the box
- DNS out of the box
- convenient RESTful API
- HealthCheck API out of the box
Also consul has more distributed nature: agents are installed on all service VMs and hence the system has higher availability than zookeeper.
Be aware that consul system has low coupling between datacenters.
Zookeeper is mature, but too generic. So you can use zookeeper not only for service discovery but for storing configs, distributed locks, notifications etc. Again, it's convenient to use all this functionality with Curator Framework / Curator Recipes.
Zookeeper is using master/slave communication schema between nodes in cluster. Master is elected by cluster members. Be aware that there could be edge cases (due to network issues for example) when it appears more that 1 master in the cluster. In this case restart of the cluster helps.
Difference of Eureka from Zookeeper and Consul is that Eureka is narrow-purpose system - service discovery and load balancing system.
All 3 systems can be integrated with Spring.