Convert Figma logo to code with AI

soabase logoexhibitor

ZooKeeper co-process for instance monitoring, backup/recovery, cleanup and visualization.

1,676
444
1,676
77

Top Related Projects

12,362

AWS Service registry for resilient mid-tier load balancing and failover.

28,222

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

47,330

Distributed reliable key-value store for the most critical data of a distributed system

12,136

Apache ZooKeeper

3,098

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

  1. 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();
  1. 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);
  1. 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

  1. Add Exhibitor dependency to your project:
<dependency>
    <groupId>com.netflix.exhibitor</groupId>
    <artifactId>exhibitor-standalone</artifactId>
    <version>1.5.6</version>
</dependency>
  1. 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
  1. Run Exhibitor:
java -jar exhibitor-standalone-1.5.6.jar \
  --configtype file \
  --fsconfigdir /path/to/exhibitor.properties \
  --port 8080
  1. Access the web UI at http://localhost:8080

Competitor Comparisons

12,362

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.

28,222

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.

47,330

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.

12,136

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
3,098

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build Status Join the chat at https://gitter.im/soabase/exhibitor

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.