Kafka Multi Node setup Unreasonable length in Zookeeper logs
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Apache Kafka is a distributed event streaming platform capable of handling trillions of events a day. Initially conceived as a messaging queue, Kafka is based on an abstraction of a distributed commit log. Since it provides functionality similar to a publish-subscribe message queue, it has advanced features like replication, partitioning, and fault tolerance which makes it a highly available and resilient system.
Overview of Kafka Multi-Node Setup
In a production environment, Kafka is usually setup in a multi-node configuration to ensure high availability and fault tolerance. This setup involves multiple Kafka brokers and a ZooKeeper ensemble. ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
ZooKeeper Role in Kafka
ZooKeeper plays a critical role in Kafka’s architecture. Kafka uses ZooKeeper to:
- Manage and coordinate Kafka brokers.
- Help in leader election for partitions.
- Keep track of topic configuration and status.
- Notify Kafka of any node leaving or joining the cluster which triggers rebalance operations.
Kafka Logging and “Unreasonable Length”
When deploying Kafka in a production scenario, particularly a multi-node setup, a common issue might be the generation of logs indicating "unreasonable length" from ZooKeeper. This log message typically points to an issue with the size of the znode(s) being manipulated or watched.
Technical Explanation
ZooKeeper nodes (znodes) are used by Kafka for storing metadata about topics, brokers, and other Kafka resource states. Each znode holds data in a byte array with a maximum size limit set by ZooKeeper (default is 1MB). If Kafka attempts to store more data in a znode than this limit, ZooKeeper logs an "unreasonable length" error indicating that the data size exceeds the maximum limit.
This can commonly occur in cases where:
- There’s a large number of partitions per topic.
- There’s a substantial amount of topic configuration overrides.
- Cluster metadata is vast due to many topics or brokers.
Steps to Resolve
- Review Topic and Partition Count: Reduce the number of partitions per topic or the overall number of topics if it's hitting the ZooKeeper node size limits.
- Configuring ZooKeeper: Increase the maximum znode size limit (
jute.maxbuffer) in ZooKeeper. This isn’t always recommended as it can lead to larger heap size requirements and longer garbage collection pauses. - Cleanup Unused Topics: Periodically clean up unused topics to free space in ZooKeeper.
Example Case
Consider a Kafka cluster with 100 topics, each with 100 partitions, leading to 10,000 total partitions. If each partition's metadata exceeds a certain threshold, the total metadata can surpass the default znode size limit, causing the ZooKeeper to log "unreasonable length".
Summary Table
| Issue Component | Description | Suggested Actions |
| Topic/Partition Count | High topic/partition count increases znode size. | Reduce partitions or topics, or adjust topic configuration. |
| ZooKeeper Configuration | jute.maxbuffer setting too low to accommodate data size. | Consider increasing jute.maxbuffer, but monitor system impact. |
| Unused Topics | Unused or obsolete topics consuming space in ZooKeeper. | Regularly delete unused topics. |
Conclusion
Managing Kafka in a multi-node environment demands careful consideration of ZooKeeper configurations and the overall design and usage patterns of topics and partitions. Observing and adjusting these factors can prevent issues like "unreasonable length" in ZooKeeper logs, ensuring a smooth and efficient operation of your Kafka clusters. Regular monitoring and proactive management play crucial roles in maintaining the health of the Kafka-ZooKeeper ecosystem.
Related reading
- Kafka multiple consumers for a partition
- Kafka multiple partition ordering
- Kafka multiple topic consume
- kafka new producer is not able to update metadata after one of the broker is down
- Kafka No message seen on console consumer after message sent by Java Producer
- kafka NoClassDefFoundError kafka/Kafka
- Kafka new producer timeout
- Kafka No broker in ISR for partition

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.