Zookeeper allows storing data in a hierarchical tree structure and notifies subscribers when data changes. It provides functions for creating, deleting, and observing znodes. Zookeeper servers register themselves with ephemeral znodes and automatically remove themselves if they fail. It enables distributed locking and job distribution by allowing clients to create and observe znodes in a predictable sequence. However, write performance can suffer with many writes and each znode is limited to 1MB in size.