exhibitor
ZooKeeper co-process for instance monitoring, backup/recovery, cleanup and visualization.
Top Related Projects
AWS Service registry for resilient mid-tier load balancing and failover.
Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
Distributed reliable key-value store for the most critical data of a distributed system
Apache ZooKeeper
Apache Curator
Quick Overview
Exhibitor is a Java-based supervisor system for Apache ZooKeeper. It provides a web UI for monitoring and managing ZooKeeper instances, automatic instance restarts, and backup/restore functionality. Exhibitor simplifies ZooKeeper cluster management and enhances its reliability.
Pros
- User-friendly web interface for ZooKeeper management
- Automatic instance restarts and cleanup of ZooKeeper logs
- Built-in backup and restore functionality
- Configurable via properties files, command line, or REST API
Cons
- Primarily designed for ZooKeeper 3.x versions, may have compatibility issues with newer versions
- Requires additional setup and maintenance alongside ZooKeeper
- Limited documentation for advanced use cases
- Not actively maintained (last commit was in 2019)
Code Examples
- Creating an Exhibitor instance:
ExhibitorArguments arguments = new ExhibitorArguments(
new String[]{"--configtype", "file", "--filesystembackup", "/path/to/backup"}
);
Exhibitor exhibitor = new Exhibitor(new StandardProcessProvider(), arguments);
exhibitor.start();
- Configuring Exhibitor programmatically:
ConfigProvider configProvider = new FileConfigProvider("/path/to/config.properties");
ExhibitorConfig config = new ExhibitorConfig.Builder()
.zookeeperInstallDirectory("/opt/zookeeper")
.zookeeperDataDirectory("/var/lib/zookeeper")
.serverId(1)
.build();
configProvider.storeConfig(config, null);
- Using Exhibitor's REST API to check instance status:
URL url = new URL("http://localhost:8080/exhibitor/v1/config/get-state");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String response = reader.lines().collect(Collectors.joining("\n"));
System.out.println(response);
Getting Started
- Add Exhibitor dependency to your project:
<dependency>
<groupId>com.netflix.exhibitor</groupId>
<artifactId>exhibitor-standalone</artifactId>
<version>1.5.6</version>
</dependency>
- Create a configuration file
exhibitor.properties
:
zookeeper-install-directory=/opt/zookeeper
zookeeper-data-directory=/var/lib/zookeeper
zookeeper-log-directory=/var/log/zookeeper
server-id=1
- Run Exhibitor:
java -jar exhibitor-standalone-1.5.6.jar \
--configtype file \
--fsconfigdir /path/to/exhibitor.properties \
--port 8080
- Access the web UI at
http://localhost:8080
Competitor Comparisons
AWS Service registry for resilient mid-tier load balancing and failover.
Pros of Eureka
- More comprehensive service discovery and registration solution
- Better suited for microservices architectures
- Supports multiple data centers and regions
Cons of Eureka
- More complex setup and configuration
- Heavier resource usage
- Less focused on ZooKeeper management
Code Comparison
Eureka client registration:
@EnableEurekaClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Exhibitor ZooKeeper configuration:
ExhibitorEnsembleProvider provider = new ExhibitorEnsembleProvider(
"localhost", 8080, "/exhibitor/v1/cluster/list",
new DefaultExhibitorRestClient(), "/zookeeper", 10000, 300000
);
While Eureka focuses on service discovery and registration for microservices, Exhibitor is primarily designed for managing and monitoring ZooKeeper clusters. Eureka provides a more comprehensive solution for distributed systems but requires more setup and resources. Exhibitor offers a simpler approach for ZooKeeper management but lacks the broader service discovery features of Eureka. The choice between the two depends on the specific needs of your project and infrastructure.
Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
Pros of Consul
- More comprehensive service mesh and service discovery solution
- Supports multiple data centers and cloud environments out of the box
- Offers a key-value store and distributed configuration management
Cons of Consul
- Higher complexity and steeper learning curve
- Requires more resources to run and maintain
- May be overkill for simpler use cases or smaller deployments
Code Comparison
Exhibitor configuration example:
ConfigProvider configProvider = new FileConfigProvider(args[0]);
ExhibitorArguments arguments = new ExhibitorArguments(configProvider);
Exhibitor exhibitor = new Exhibitor(arguments, null);
exhibitor.start();
Consul configuration example:
datacenter = "dc1"
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
ui = true
server = true
bootstrap_expect = 3
retry_join = ["consul-server-2", "consul-server-3"]
While Exhibitor focuses primarily on ZooKeeper cluster management, Consul offers a broader range of features for service discovery, configuration, and networking. Exhibitor's configuration is typically done in Java, while Consul uses HCL (HashiCorp Configuration Language) for its configuration files. Consul's approach allows for more declarative and infrastructure-as-code friendly setups, but may require additional learning for teams not familiar with HCL.
Distributed reliable key-value store for the most critical data of a distributed system
Pros of etcd
- Distributed key-value store with strong consistency and high availability
- Built-in support for distributed consensus using the Raft algorithm
- Widely adopted in the Kubernetes ecosystem for service discovery and configuration management
Cons of etcd
- Steeper learning curve compared to simpler ZooKeeper-based solutions
- Requires more resources and careful configuration for optimal performance
- Limited support for dynamic reconfiguration of the cluster
Code comparison
etcd:
cli, _ := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"}})
defer cli.Close()
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
_, err := cli.Put(ctx, "key", "value")
cancel()
Exhibitor:
CuratorFramework client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
client.start();
client.create().forPath("/path", "data".getBytes());
While etcd uses a gRPC-based client for key-value operations, Exhibitor relies on ZooKeeper's Java API for similar functionality. etcd's approach offers better language-agnostic support, while Exhibitor benefits from ZooKeeper's mature ecosystem.
Apache ZooKeeper
Pros of ZooKeeper
- Core distributed coordination service with robust features
- Widely adopted and battle-tested in production environments
- Extensive documentation and community support
Cons of ZooKeeper
- Complex setup and configuration process
- Requires manual management of ZooKeeper clusters
- Steep learning curve for beginners
Code Comparison
ZooKeeper (Java):
ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, new Watcher() {
public void process(WatchedEvent we) {
// Handle events
}
});
Exhibitor (Java):
ExhibitorCreator creator = ExhibitorCreator.builder()
.port(8080)
.configProvider(new DefaultConfigProvider())
.build();
EmbeddedServer server = creator.start();
Key Differences
- Exhibitor provides a user-friendly web UI for ZooKeeper management
- Exhibitor simplifies ZooKeeper cluster configuration and maintenance
- ZooKeeper offers more low-level control and customization options
- Exhibitor is focused on ZooKeeper management, while ZooKeeper is the core service itself
Use Cases
- Use ZooKeeper for direct implementation of distributed coordination
- Choose Exhibitor when easier ZooKeeper cluster management is needed
- Combine both: use ZooKeeper as the core service and Exhibitor for simplified management
Apache Curator
Pros of Curator
- More comprehensive ZooKeeper management toolkit with broader feature set
- Better maintained with more recent updates and active community
- Extensive documentation and examples for various use cases
Cons of Curator
- Steeper learning curve due to more complex API
- Heavier dependency footprint
- May be overkill for simpler ZooKeeper management needs
Code Comparison
Exhibitor (configuration example):
ExhibitorConfig config = new ExhibitorConfig.Builder()
.zookeeperInstallDirectory("/opt/zookeeper")
.configDirectory("/opt/zookeeper/conf")
.dataDirectory("/opt/zookeeper/data")
.build();
Curator (connection example):
CuratorFramework client = CuratorFrameworkFactory.newClient(
"localhost:2181",
new ExponentialBackoffRetry(1000, 3));
client.start();
Both projects aim to simplify ZooKeeper management, but Curator offers a more extensive toolkit with advanced features, while Exhibitor focuses on configuration and monitoring. Curator is better suited for complex ZooKeeper interactions, whereas Exhibitor may be preferable for straightforward cluster management and visualization.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
IMPORTANT NOTE
Exhibitor is now on its own! PLEASE READ THIS NOTE: https://groups.google.com/forum/#!topic/exhibitor-users/PVkcd88mk8c
DESCRIPTION
Exhibitor is a supervisor system for Apache ZooKeeper (http://zookeeper.apache.org/).
DETAILS
Please see the doc at https://github.com/Netflix/exhibitor/wiki
BUILDING
Exhibitor is built via Maven (https://maven.apache.org/).
To build do mvn install
.
ARTIFACTS
Exhibitor binaries are published to Maven Central. Please see the docs for details.
MAILING LIST
There is an Exhibitor mailing list. Join here: http://groups.google.com/group/exhibitor-users
AUTHOR
Jordan Zimmerman (jordan@jordanzimmerman.com)
LICENSE
Copyright 2012 Netflix, Inc.
Licensed under the Apache License, Version 2.0 (the âLicenseâ); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an âAS ISâ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Top Related Projects
AWS Service registry for resilient mid-tier load balancing and failover.
Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
Distributed reliable key-value store for the most critical data of a distributed system
Apache ZooKeeper
Apache Curator
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot