Kafka 10 kafka-consumer-groups.sh vs. Kafka 8 kafka-run-class.sh of ConsumerOffsetChecker
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
The important difference here is not just the script name. It is the consumer-offset architecture behind the script. In older Kafka 0.8 setups, consumer-group offset inspection was commonly done through ConsumerOffsetChecker, which talked to ZooKeeper. In Kafka 0.10-era tooling, kafka-consumer-groups.sh became the standard interface and worked against the broker-based consumer group system.
That shift matters because it reflects Kafka's move away from ZooKeeper-centric consumer coordination. The newer tool is simpler operationally because it talks to the Kafka cluster directly instead of making you inspect offsets through an older helper class.
Old Style: ConsumerOffsetChecker Through kafka-run-class.sh
In older Kafka 0.8 style workflows, offset inspection often looked like this:
This tool depended on ZooKeeper because older consumer-group metadata and offset tracking patterns were tied much more closely to ZooKeeper.
Operationally, that meant:
- more dependence on ZooKeeper connectivity
- more version-sensitive tooling behavior
- a less ergonomic command surface
It worked, but it reflected an earlier Kafka architecture.
Newer Style: kafka-consumer-groups.sh
With Kafka 0.10-era tooling, the standard command became:
This command reports offsets, log end offsets, lag, and consumer assignment information in a much more direct way. The important input is the broker address, not ZooKeeper.
That change is the real story:
- old tool: class-based helper, ZooKeeper-oriented
- newer tool: dedicated admin script, broker-oriented
The second model fits the direction Kafka continued to move in later versions.
Why the Newer Tool Is Better Operationally
The newer script is easier to remember, easier to automate, and better aligned with how modern Kafka clusters are administered. It focuses on the consumer group as a first-class Kafka concept rather than as data you have to extract indirectly.
It also makes the common operational questions easier to answer:
- what is the current committed offset
- what is the latest log end offset
- how much lag does the group have
- which consumer owns each partition
Those are the questions operators usually care about, and kafka-consumer-groups.sh exposes them with a cleaner interface.
Know the Version Boundary
One source of confusion is the naming. People often say "Kafka 8" and "Kafka 10" when they really mean Kafka 0.8 and Kafka 0.10. The distinction matters because Kafka version numbering later moved to a different style, and tool names changed across that history.
So when reading old answers:
- '
ConsumerOffsetCheckerusually signals an older ZooKeeper-oriented setup' - '
kafka-consumer-groups.shsignals the newer consumer-group administration path'
That helps you recognize whether an operational recipe still matches the cluster you are working on.
Common Pitfalls
The biggest mistake is trying to use ConsumerOffsetChecker advice on a newer cluster without checking whether the offsets and group management model still match that tooling.
Another common issue is confusing ZooKeeper connectivity problems with Kafka consumer lag problems in the old model. The extra dependency made diagnostics noisier.
It is also easy to misread old version labels and think "Kafka 10" means a much newer major version instead of Kafka 0.10.
Finally, do not assume script names are the only change. The tooling difference reflects a deeper architectural difference in how Kafka consumer groups are managed.
Summary
- '
ConsumerOffsetCheckerbelonged to older Kafka0.8style workflows and depended on ZooKeeper.' - '
kafka-consumer-groups.shis the newer broker-oriented tool for consumer-group inspection.' - The real shift is from ZooKeeper-centric offset inspection to Kafka-managed consumer-group administration.
- Newer tooling is simpler to use and easier to automate.
- Always match operational advice to the actual Kafka version and consumer-group model in your cluster.
Related reading
- Kafka 1.0 stops with FATAL SHUTDOWN error. Logs directory failed
- Kafka 3.3 with Kraft - Controller ID keeps changing every second
- kafka 8 and memory - There is insufficient memory for the Java Runtime Environment to continue
- kafka __consumer_offsets topic has excessive partition count
- Kafka + AWS lambda
- Kafka & Flink duplicate messages on restart
- kafka + how to avoid running out of disk storage
- kafka + how to calculate the value of log.retention.byte

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.