SlideShare a Scribd company logo
Apache ZooKeeper
An Introduction and Practical Use Cases
Who am I
●   David Arthur
●   Engineer at Lucid Imagination
●   Hadoop user
●   Python enthusiast
●   Father
●   Gardener
Play along!
Grab the source for this presentation at GitHub

github.com/mumrah/trihug-zookeeper-demo

You'll need Java, Ant, and bash.
Apache ZooKeeper
● Formerly a Hadoop sub-project
● ASF TLP (top level project) since Nov 2010
● 7 PMC members, 8 committers - most from
  Yahoo! and Cloudera
● Ugly logo
One liner
"ZooKeeper allows distributed processes to
coordinate with each other through a shared
hierarchical name space of data registers"

- ZooKeeper wiki
Who uses it?
Everyone*

●   Yahoo!
●   HBase
●   Solr
●   LinkedIn (Kafka, Hedwig)
●   Many more




* https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
What is it good for?
● Configuration management - machines
  bootstrap config from a centralized source,
  facilitates simpler deployment/provisioning
● Naming service - like DNS, mappings of names
  to addresses
● Distributed synchronization - locks, barriers,
  queues
● Leader election - a common problem in
  distributed coordination
● Centralized and highly reliable (simple) data
  registry
Namespace (ZNodes)
parent : "foo"
|-- child1 : "bar"
|-- child2 : "spam"
`-- child3 : "eggs"
    `-- grandchild1 : "42"

Every znode has data (given as byte[]) and can
optionally have children.
Sequential znode
Nodes created in "sequential" mode will
append a 10 digit zero padded monotonically
increasing number to the name.

create("/demo/seq-", ..., ..., PERSISTENT_SEQUENTIAL) x4

/demo
|-- seq-0000000000
|-- seq-0000000001
|-- seq-0000000002
`-- seq-0000000003
Ephemeral znode
Nodes created in "ephemeral" mode will be
deleted when the originating client goes away.
create("/demo/foo", ..., ..., PERSISTENT);
create("/demo/bar", ..., ..., EPHEMERAL);

          Connected              Disconnected
          /demo                  /demo
            |-- foo                `-- foo
            `-- bar
Simple API
Pretty much everything lives under the
ZooKeeper class

●   create
●   exists
●   delete
●   getData
●   setData
●   getChildren
Synchronicity
sync and async version of API methods
exists("/demo", null);
exists("/demo", null, new StatCallback() {
  @Override
  public processResult(int rc,
                  String path,
                  Object ctx,
                  Stat stat) {
      ...
  }
}, null);
Watches
Watches are a one-shot callback mechanism
for changes on connection and znode state

● Client connects/disconnects
● ZNode data changes
● ZNode children change
Demo time!
For those playing along, you'll need to get
ZooKeeper running. Using the default port
(2181), run:
                    ant zk

Or specify a port like:

          ant zk -Dzk.port=2181
Things to "watch" out for
● Watches are one-shot - if you want continuous
  monitoring of a znode, you have to reset the
  watch after each event
● Too many clients watches on a single znode
  creates a "herd effect" - lots of clients get
  notifications at the same time and cause spikes
  in load
● Potential for missing changes
● All watches are executed in a single, separate
  thread (be careful about synchronization)
Building blocks
● Hierarchical nodes
● Parent and leaf nodes can have data
● Two special types of nodes - ephemeral and
  sequential
● Watch mechanism
● Consistency guarantees
  ○   Order of updates is maintained
  ○   Updates are atomic
  ○   Znodes are versioned for MVCC
  ○   Many more
The Fun Stuff
Recipes:
● Lock
● Barrier
● Queue
● Two-phase commit
● Leader election
● Group membership
Demo Time!
Group membership (i.e., the easy one)

Recipe:
● Members register a sequential ephemeral
  node under the group node
● Everyone keeps a watch on the group node
  for new children
Lots of boilerplate
● Synchronize the asynchronous connection
  (using a latch or something)
● Handling disconnects/reconnects
● Exception handling
● Ensuring paths exist (nothing like mkdir -p)
● Resetting watches
● Cleaning up
What happens?
● Everyone writes their own high level
  wrapper/connection manager
  ○ ZooKeeperWrapper
  ○ ZooKeeperSession
  ○ (w+)ZooKeeper
  ○ ZooKeeper(w+)
Open Source, FTW!
Luckily, some smart people have open sourced
their ZooKeeper utilities/wrappers

● Netflix Curator - Netflix/curator
● Linkedin - linkedin/linkedin-zookeeper
● Many others
Netflix Curator
● Handles the connection management
● Implements many recipes
  ○ leader election
  ○ locks, queues, and barriers
  ○ counters
  ○ path cache
● Bonus: service discovery implementation
  (we use this)
Demo Time!
Group membership refactored with Curator

● EnsurePath is nice
● Robust connection management is
  awesome
● Exceptions are more sane
Thoughts on Curator
i.e., my non-expert subjective opinions


● Good level of abstraction - doesn't do
  anything "magical"
● Doesn't hide ZooKeeper
● Weird API design (builder soup)
● Extensive, well tested recipe support
● It works!
ZooKeeper in the wild
Some use cases
Use case: Solr 4.0
Used in "Solr cloud" mode for:
● Cluster management - what machines are
  available and where are they located
● Leader election - used for picking a shard as
  the "leader"
● Consolidated config storage
● Watches allow for very non-chatty steady-
  state
● Herd effect not really an issue
Use case: Kafka
● Linkedin's distributed pub/sub system
● Queues are persistent
● Clients request a slice of a queue (offset,
  length)
● Brokers are registered in ZooKeeper, clients
  load balance requests among live brokers
● Client state (last consumed offset) is stored
  in ZooKeeper
● Client rebalancing algorithm, similar to
  leader election
Use case:
 LucidWorks Big Data
● We use Curator's service discovery to
  register REST services
● Nice for SOA
● Took 1 dev (me) 1 day to get something
  functional (mostly reading Curator docs)
● So far, so good!
Review of "gotchas"
● Watch execution is single threaded and synchronized
● Can't reliably get every change for a znode
● Excessive watchers on the same znode (herd effect)

                     Some new ones
● GC pauses: if your application is prone to long GC
  pauses, make sure your session timeout is sufficiently
  long
● Catch-all watches: if you use one Watcher for
  everything, it can be tedious to infer exactly what
  happened
Four letter words
The ZooKeeper server responds to a few "four
letter word" commands via TCP or Telnet*

    > echo ruok | nc localhost 2181
    imok

I'm glad you're OK, ZooKeeper - really I am.

* http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkCommands
Quorums
In a multi-node deployment (aka, ZooKeeper
Quorum), it is best to use an odd number of
machines.

ZooKeeper uses majority voting, so it can
tolerate ceil(N/2)-1 machine failures and
still function properly.
Multi-tenancy
ZooKeeper supports "chroot" at the session level. You can
add a path to the connection string that will be implicitly
prefixed to everything you do:

   new ZooKeeper("localhost:2181/my/app");


Curator also supports this, but at the application level:
   CuratorFrameworkFactory.builder()
       .namespace("/my/app");
Python client
Dumb wrapper around C client, not very
Pythonic

import zookeeper
zk_handle = zookeeper.init("localhost:2181")
zookeeper.exists(zk_handle, "/demo")
zookeeper.get_children(zk_handle, "/demo")

Stuff in contrib didn't work for me, I used a
statically linked version: zc-zookeeper-static
Other clients
Included in ZooKeeper under src/contrib:
● C (this is what the Python client uses)
● Perl (again, using the C client)
● REST (JAX-RS via Jersey)
● FUSE? (strange)

3rd-party client implementations:
● Scala, courtesy of Twitter
● Several others
Overview
● Basics of ZooKeeper (znode types, watches)
● High-level recipes (group membership, et
  al.)
● Lots of boilerplate for basic functionality
● 3rd party helpers (Curator, et al.)
● Gotchas and other miscellany
Questions?
David Arthur
mumrah@gmail.com
github.com/mumrah/trihug-zookeeper-demo

More Related Content

PPTX
So we're running Apache ZooKeeper. Now What? By Camille Fournier
PPTX
Distributed Applications with Apache Zookeeper
PDF
Apache ZooKeeper TechTuesday
PPTX
Meetup on Apache Zookeeper
PPTX
Centralized Application Configuration with Spring and Apache Zookeeper
PDF
ZooKeeper - wait free protocol for coordinating processes
KEY
Curator intro
PPT
Zookeeper Introduce
So we're running Apache ZooKeeper. Now What? By Camille Fournier
Distributed Applications with Apache Zookeeper
Apache ZooKeeper TechTuesday
Meetup on Apache Zookeeper
Centralized Application Configuration with Spring and Apache Zookeeper
ZooKeeper - wait free protocol for coordinating processes
Curator intro
Zookeeper Introduce

What's hot (20)

PPTX
Apache zookeeper seminar_trinh_viet_dung_03_2016
PDF
zookeeperProgrammers
PDF
Docker and Maestro for fun, development and profit
PDF
Distributed Coordination with Python
PDF
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
KEY
Exhibitor Introduction
PDF
Supercharging Content Delivery with Varnish
PDF
Introduction openstack-meetup-nov-28
PPTX
RENCI User Group Meeting 2017 - I Upgraded iRODS and I still have all my hair
PPTX
[오픈소스컨설팅] Linux Network Troubleshooting
PPTX
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
PDF
AtlasCamp 2015: The age of orchestration: From Docker basics to cluster manag...
PDF
Sanger OpenStack presentation March 2017
PDF
Setup 3 Node Kafka Cluster on AWS - Hands On
PPTX
Introduction to Apache Mesos
PPTX
Openstack study-nova-02
PPTX
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
PPTX
Docker 1.5
PDF
[NYC Meetup] Docker at Nuxeo
PDF
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
Apache zookeeper seminar_trinh_viet_dung_03_2016
zookeeperProgrammers
Docker and Maestro for fun, development and profit
Distributed Coordination with Python
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
Exhibitor Introduction
Supercharging Content Delivery with Varnish
Introduction openstack-meetup-nov-28
RENCI User Group Meeting 2017 - I Upgraded iRODS and I still have all my hair
[오픈소스컨설팅] Linux Network Troubleshooting
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
AtlasCamp 2015: The age of orchestration: From Docker basics to cluster manag...
Sanger OpenStack presentation March 2017
Setup 3 Node Kafka Cluster on AWS - Hands On
Introduction to Apache Mesos
Openstack study-nova-02
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Docker 1.5
[NYC Meetup] Docker at Nuxeo
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
Ad

Viewers also liked (20)

PPTX
Introduction to Apache ZooKeeper
PDF
Apache ZooKeeper
PPTX
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
PDF
Distributed system coordination by zookeeper and introduction to kazoo python...
PDF
Dynamic Reconfiguration of Apache ZooKeeper
PPTX
Winter is coming? Not if ZooKeeper is there!
PDF
Introduction to Apache ZooKeeper
PDF
Zookeeper
PDF
Zookeeper In Action
PDF
Zookeeper In Simple Words
PDF
Apache Zookeeper 分布式服务框架
PPTX
Introduction to Kafka and Zookeeper
PPTX
Groovy to gradle
PPTX
Introduction to apache zoo keeper
PDF
Taming Pythons with ZooKeeper
PDF
ZooKeeper Futures
PPTX
ZooKeeper (and other things)
PDF
Taming Pythons with ZooKeeper (Pyconfi edition)
PDF
ZooKeeper and Embedded ZooKeeper Support for IBM InfoSphere Streams V4.0
PDF
Overview of Zookeeper, Helix and Kafka (Oakjug)
Introduction to Apache ZooKeeper
Apache ZooKeeper
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Distributed system coordination by zookeeper and introduction to kazoo python...
Dynamic Reconfiguration of Apache ZooKeeper
Winter is coming? Not if ZooKeeper is there!
Introduction to Apache ZooKeeper
Zookeeper
Zookeeper In Action
Zookeeper In Simple Words
Apache Zookeeper 分布式服务框架
Introduction to Kafka and Zookeeper
Groovy to gradle
Introduction to apache zoo keeper
Taming Pythons with ZooKeeper
ZooKeeper Futures
ZooKeeper (and other things)
Taming Pythons with ZooKeeper (Pyconfi edition)
ZooKeeper and Embedded ZooKeeper Support for IBM InfoSphere Streams V4.0
Overview of Zookeeper, Helix and Kafka (Oakjug)
Ad

Similar to Introduction to ZooKeeper - TriHUG May 22, 2012 (20)

PDF
NetflixOSS Open House Lightning talks
PDF
A Python Petting Zoo
PPTX
introduction to node.js
PDF
PDF
Tomcat from a cluster to the cloud on RP3
PDF
Netty training
PPTX
Comparison between zookeeper, etcd 3 and other distributed coordination systems
PDF
Things You MUST Know Before Deploying OpenStack: Bruno Lago, Catalyst IT
PDF
Streaming Processing with a Distributed Commit Log
PDF
Load testing in Zonky with Gatling
PDF
Scaling Up Logging and Metrics
PDF
Ippevent : openshift Introduction
PDF
Node.js Presentation
ODP
Java concurrency
PDF
Experiences building a distributed shared log on RADOS - Noah Watkins
PDF
MySQL HA Orchestrator Proxysql Consul.pdf
PDF
Crikeycon 2019 Velociraptor Workshop
PDF
Tornado Web Server Internals
PDF
reBuy on Kubernetes
PPTX
Ob1k presentation at Java.IL
NetflixOSS Open House Lightning talks
A Python Petting Zoo
introduction to node.js
Tomcat from a cluster to the cloud on RP3
Netty training
Comparison between zookeeper, etcd 3 and other distributed coordination systems
Things You MUST Know Before Deploying OpenStack: Bruno Lago, Catalyst IT
Streaming Processing with a Distributed Commit Log
Load testing in Zonky with Gatling
Scaling Up Logging and Metrics
Ippevent : openshift Introduction
Node.js Presentation
Java concurrency
Experiences building a distributed shared log on RADOS - Noah Watkins
MySQL HA Orchestrator Proxysql Consul.pdf
Crikeycon 2019 Velociraptor Workshop
Tornado Web Server Internals
reBuy on Kubernetes
Ob1k presentation at Java.IL

Recently uploaded (20)

PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
cuic standard and advanced reporting.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
KodekX | Application Modernization Development
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Empathic Computing: Creating Shared Understanding
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
Teaching material agriculture food technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Dropbox Q2 2025 Financial Results & Investor Presentation
cuic standard and advanced reporting.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
KodekX | Application Modernization Development
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
MYSQL Presentation for SQL database connectivity
Diabetes mellitus diagnosis method based random forest with bat algorithm
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
Empathic Computing: Creating Shared Understanding
NewMind AI Monthly Chronicles - July 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
The AUB Centre for AI in Media Proposal.docx
20250228 LYD VKU AI Blended-Learning.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Teaching material agriculture food technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...

Introduction to ZooKeeper - TriHUG May 22, 2012

  • 1. Apache ZooKeeper An Introduction and Practical Use Cases
  • 2. Who am I ● David Arthur ● Engineer at Lucid Imagination ● Hadoop user ● Python enthusiast ● Father ● Gardener
  • 3. Play along! Grab the source for this presentation at GitHub github.com/mumrah/trihug-zookeeper-demo You'll need Java, Ant, and bash.
  • 4. Apache ZooKeeper ● Formerly a Hadoop sub-project ● ASF TLP (top level project) since Nov 2010 ● 7 PMC members, 8 committers - most from Yahoo! and Cloudera ● Ugly logo
  • 5. One liner "ZooKeeper allows distributed processes to coordinate with each other through a shared hierarchical name space of data registers" - ZooKeeper wiki
  • 6. Who uses it? Everyone* ● Yahoo! ● HBase ● Solr ● LinkedIn (Kafka, Hedwig) ● Many more * https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
  • 7. What is it good for? ● Configuration management - machines bootstrap config from a centralized source, facilitates simpler deployment/provisioning ● Naming service - like DNS, mappings of names to addresses ● Distributed synchronization - locks, barriers, queues ● Leader election - a common problem in distributed coordination ● Centralized and highly reliable (simple) data registry
  • 8. Namespace (ZNodes) parent : "foo" |-- child1 : "bar" |-- child2 : "spam" `-- child3 : "eggs" `-- grandchild1 : "42" Every znode has data (given as byte[]) and can optionally have children.
  • 9. Sequential znode Nodes created in "sequential" mode will append a 10 digit zero padded monotonically increasing number to the name. create("/demo/seq-", ..., ..., PERSISTENT_SEQUENTIAL) x4 /demo |-- seq-0000000000 |-- seq-0000000001 |-- seq-0000000002 `-- seq-0000000003
  • 10. Ephemeral znode Nodes created in "ephemeral" mode will be deleted when the originating client goes away. create("/demo/foo", ..., ..., PERSISTENT); create("/demo/bar", ..., ..., EPHEMERAL); Connected Disconnected /demo /demo |-- foo `-- foo `-- bar
  • 11. Simple API Pretty much everything lives under the ZooKeeper class ● create ● exists ● delete ● getData ● setData ● getChildren
  • 12. Synchronicity sync and async version of API methods exists("/demo", null); exists("/demo", null, new StatCallback() { @Override public processResult(int rc, String path, Object ctx, Stat stat) { ... } }, null);
  • 13. Watches Watches are a one-shot callback mechanism for changes on connection and znode state ● Client connects/disconnects ● ZNode data changes ● ZNode children change
  • 14. Demo time! For those playing along, you'll need to get ZooKeeper running. Using the default port (2181), run: ant zk Or specify a port like: ant zk -Dzk.port=2181
  • 15. Things to "watch" out for ● Watches are one-shot - if you want continuous monitoring of a znode, you have to reset the watch after each event ● Too many clients watches on a single znode creates a "herd effect" - lots of clients get notifications at the same time and cause spikes in load ● Potential for missing changes ● All watches are executed in a single, separate thread (be careful about synchronization)
  • 16. Building blocks ● Hierarchical nodes ● Parent and leaf nodes can have data ● Two special types of nodes - ephemeral and sequential ● Watch mechanism ● Consistency guarantees ○ Order of updates is maintained ○ Updates are atomic ○ Znodes are versioned for MVCC ○ Many more
  • 17. The Fun Stuff Recipes: ● Lock ● Barrier ● Queue ● Two-phase commit ● Leader election ● Group membership
  • 18. Demo Time! Group membership (i.e., the easy one) Recipe: ● Members register a sequential ephemeral node under the group node ● Everyone keeps a watch on the group node for new children
  • 19. Lots of boilerplate ● Synchronize the asynchronous connection (using a latch or something) ● Handling disconnects/reconnects ● Exception handling ● Ensuring paths exist (nothing like mkdir -p) ● Resetting watches ● Cleaning up
  • 20. What happens? ● Everyone writes their own high level wrapper/connection manager ○ ZooKeeperWrapper ○ ZooKeeperSession ○ (w+)ZooKeeper ○ ZooKeeper(w+)
  • 21. Open Source, FTW! Luckily, some smart people have open sourced their ZooKeeper utilities/wrappers ● Netflix Curator - Netflix/curator ● Linkedin - linkedin/linkedin-zookeeper ● Many others
  • 22. Netflix Curator ● Handles the connection management ● Implements many recipes ○ leader election ○ locks, queues, and barriers ○ counters ○ path cache ● Bonus: service discovery implementation (we use this)
  • 23. Demo Time! Group membership refactored with Curator ● EnsurePath is nice ● Robust connection management is awesome ● Exceptions are more sane
  • 24. Thoughts on Curator i.e., my non-expert subjective opinions ● Good level of abstraction - doesn't do anything "magical" ● Doesn't hide ZooKeeper ● Weird API design (builder soup) ● Extensive, well tested recipe support ● It works!
  • 25. ZooKeeper in the wild Some use cases
  • 26. Use case: Solr 4.0 Used in "Solr cloud" mode for: ● Cluster management - what machines are available and where are they located ● Leader election - used for picking a shard as the "leader" ● Consolidated config storage ● Watches allow for very non-chatty steady- state ● Herd effect not really an issue
  • 27. Use case: Kafka ● Linkedin's distributed pub/sub system ● Queues are persistent ● Clients request a slice of a queue (offset, length) ● Brokers are registered in ZooKeeper, clients load balance requests among live brokers ● Client state (last consumed offset) is stored in ZooKeeper ● Client rebalancing algorithm, similar to leader election
  • 28. Use case: LucidWorks Big Data ● We use Curator's service discovery to register REST services ● Nice for SOA ● Took 1 dev (me) 1 day to get something functional (mostly reading Curator docs) ● So far, so good!
  • 29. Review of "gotchas" ● Watch execution is single threaded and synchronized ● Can't reliably get every change for a znode ● Excessive watchers on the same znode (herd effect) Some new ones ● GC pauses: if your application is prone to long GC pauses, make sure your session timeout is sufficiently long ● Catch-all watches: if you use one Watcher for everything, it can be tedious to infer exactly what happened
  • 30. Four letter words The ZooKeeper server responds to a few "four letter word" commands via TCP or Telnet* > echo ruok | nc localhost 2181 imok I'm glad you're OK, ZooKeeper - really I am. * http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkCommands
  • 31. Quorums In a multi-node deployment (aka, ZooKeeper Quorum), it is best to use an odd number of machines. ZooKeeper uses majority voting, so it can tolerate ceil(N/2)-1 machine failures and still function properly.
  • 32. Multi-tenancy ZooKeeper supports "chroot" at the session level. You can add a path to the connection string that will be implicitly prefixed to everything you do: new ZooKeeper("localhost:2181/my/app"); Curator also supports this, but at the application level: CuratorFrameworkFactory.builder() .namespace("/my/app");
  • 33. Python client Dumb wrapper around C client, not very Pythonic import zookeeper zk_handle = zookeeper.init("localhost:2181") zookeeper.exists(zk_handle, "/demo") zookeeper.get_children(zk_handle, "/demo") Stuff in contrib didn't work for me, I used a statically linked version: zc-zookeeper-static
  • 34. Other clients Included in ZooKeeper under src/contrib: ● C (this is what the Python client uses) ● Perl (again, using the C client) ● REST (JAX-RS via Jersey) ● FUSE? (strange) 3rd-party client implementations: ● Scala, courtesy of Twitter ● Several others
  • 35. Overview ● Basics of ZooKeeper (znode types, watches) ● High-level recipes (group membership, et al.) ● Lots of boilerplate for basic functionality ● 3rd party helpers (Curator, et al.) ● Gotchas and other miscellany