Zookeeper
ZooKeeper stores Pinot cluster metadata.
That includes schemas, table configs, segment metadata, and Helix state.
When you need to care
You can keep ZooKeeper “default” for quickstarts.
You should tune and secure it for production.
Typical reasons:
You run a multi-node Pinot cluster.
You want TLS for ZooKeeper client connections.
You use ZooKeeper ACLs / SASL auth.
Your cluster metadata outgrows the default znode limit (1 MB).
Recommended baseline configuration
Run a ZooKeeper ensemble in production.
Use an odd number of nodes (3 or 5).
Put dataDir on fast local disk.
Turn on snapshot cleanup to avoid disk-full incidents.
Example zoo.cfg baseline
Use this as a starting point.
Adapt paths, ports, and node lists.
Point Pinot at ZooKeeper
All Pinot components need the ZooKeeper connection string.
In scripts and containers, this is usually
-zkAddress.In
controller.conf, it’scontroller.zk.str.
You can optionally use a chroot path to isolate clusters:
Secure ZooKeeper with TLS
ZooKeeper can serve TLS on a separate port (recommended).
This avoids breaking legacy clients on clientPort.
You need to do two things:
Enable TLS on ZooKeeper servers.
Configure Pinot JVMs to use ZooKeeper TLS.
1) ZooKeeper server: enable TLS client port
ZooKeeper TLS settings can be configured in zoo.cfg.
Exact keys vary by ZooKeeper version.
Common options (ZooKeeper 3.9.5+):
2) Pinot JVM: ZooKeeper TLS Java options
Pinot (Helix) uses the ZooKeeper Java client.
The ZooKeeper client is configured via JVM system properties.
Set these JVM options on every Pinot component (controller, broker, server, minion):
How you set them depends on your runtime:
pinot-admin.sh / launcher scripts: set
JAVA_OPTS(or equivalent) before starting.Kubernetes: add them to
JAVA_OPTSin the container env.Systemd: add them to the service unit environment.
Then point Pinot at the TLS port:
Secure ZooKeeper with auth (SASL / JAAS)
ZooKeeper supports ACL enforcement and SASL authentication.
This is common with Kerberos-backed environments.
High-level steps:
Enable SASL auth on ZooKeeper.
Provide a JAAS config to Pinot JVMs.
Restart ZooKeeper and Pinot.
ZooKeeper server: enable SASL provider
Example zoo.cfg:
Pinot JVM: SASL Java options
Set JVM options on every Pinot component:
If you run multiple JAAS contexts, you may also need:
Related Pinot guides
Increase znode size for large clusters (large tables)
ZooKeeper limits the maximum znode payload size.
The default is 1 MB.
Large Pinot tables can exceed this when:
You have very high segment counts.
Your Helix
IDEALSTATE/EXTERNALVIEWbecomes large.
Symptoms include:
Fix: increase jute.maxbuffer everywhere
Set jute.maxbuffer on:
All ZooKeeper servers
All Pinot components (ZooKeeper clients)
Example (4 MB):
Restart order:
Rolling restart ZooKeeper ensemble.
Rolling restart Pinot components.
For deeper troubleshooting and alternatives, see Troubleshoot issues with ZooKeeper znodes.
Prefer fewer segments over bigger znodes
Increasing jute.maxbuffer is a safety valve.
It is not a scaling strategy.
Also do at least one of these:
Create bigger segments via Segment threshold.
Merge small segments via the Minion merge rollup task.
Delete old segments via table retention.
Last updated
Was this helpful?

