Apache Kafka CLI Event streaming tools

Version 4.3.1 · source

Start here

kafka-topics.sh --bootstrap-server <broker> --list
What topics exist?
kafka-topics.sh --bootstrap-server <broker> --create --topic <topic>
Make a topic
kafka-topics.sh --bootstrap-server <broker> --describe --topic <topic>
Partitions and leaders
kafka-console-producer.sh --bootstrap-server <broker> --topic <topic>
Type messages in
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --from-beginning
Read it all
kafka-consumer-groups.sh --bootstrap-server <broker> --list
Who is consuming?
kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group>
Check consumer lag
kafka-configs.sh --bootstrap-server <broker> --describe --entity-type topics --entity-name <topic>
Show topic settings

Concepts

  1. Producer writes records
  2. Topic split in partitions
  3. Consumer group one member per partition
  4. __consumer_offsets saved position

Topics

kafka-topics.sh --bootstrap-server <broker> --list
List topics
kafka-topics.sh --bootstrap-server <broker> --create --topic <topic>
Create a topic
Uses broker defaults for partitions and replication.
kafka-topics.sh --bootstrap-server <broker> --create --topic <topic> --partitions <n> --replication-factor <n>
Create with sizing
kafka-topics.sh --bootstrap-server <broker> --describe --topic <topic>
Show partitions, leaders, replicas
kafka-topics.sh --bootstrap-server <broker> --alter --topic <topic> --partitions <n>
Add partitions
Partitions can only grow, never shrink; key-to-partition mapping changes.
kafka-topics.sh --bootstrap-server <broker> --delete --topic <topic>
Delete a topic
kafka-topics.sh --bootstrap-server <broker> --describe --under-replicated-partitions
Find unhealthy partitions

Produce

kafka-console-producer.sh --bootstrap-server <broker> --topic <topic>
Send lines as messages
One record per line; Ctrl+D or Ctrl+C ends.
kafka-console-producer.sh --bootstrap-server <broker> --topic <topic> --property parse.key=true --property key.separator=:
Send key:value records
kafka-console-producer.sh --bootstrap-server <broker> --topic <topic> < <file>
Send a file line by line
kafka-console-producer.sh --bootstrap-server <broker> --topic <topic> --producer-property acks=all
Set a producer setting

Consume

kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic>
Read new messages
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --from-beginning
Read from the start
Only applies to a group with no committed offsets.
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --group <group>
Consume as a named group
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --property print.key=true
Show keys too
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --property print.timestamp=true --property print.offset=true
Show time and offset
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --max-messages <n>
Stop after n messages
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --partition <n> --offset <n>
Read from one offset
kafka-console-consumer.sh --bootstrap-server <broker> --topic <topic> --isolation-level read_committed
Skip aborted transactions

Consumer groups

kafka-consumer-groups.sh --bootstrap-server <broker> --list
List groups
kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group>
Show offsets and lag
LAG is log-end offset minus committed offset.
kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group> --members --verbose
Show members and assignments
kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group> --state
Show group state
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --reset-offsets --to-earliest --topic <topic> --dry-run
Preview an offset reset
Default without --execute is a dry run; the group must be inactive.
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --reset-offsets --to-earliest --topic <topic> --execute
Rewind to the start
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --reset-offsets --to-latest --all-topics --execute
Skip to the end
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --reset-offsets --to-datetime <YYYY-MM-DDTHH:mm:SS.sss> --topic <topic> --execute
Rewind to a time
kafka-consumer-groups.sh --bootstrap-server <broker> --delete --group <group>
Delete an empty group

Configs and ACLs

kafka-configs.sh --bootstrap-server <broker> --describe --entity-type topics --entity-name <topic>
Show topic overrides
kafka-configs.sh --bootstrap-server <broker> --alter --entity-type topics --entity-name <topic> --add-config retention.ms=<ms>
Set a topic config
kafka-configs.sh --bootstrap-server <broker> --alter --entity-type topics --entity-name <topic> --delete-config retention.ms
Revert to default
kafka-configs.sh --bootstrap-server <broker> --describe --entity-type brokers --entity-default
Show cluster-wide defaults
kafka-acls.sh --bootstrap-server <broker> --list
List ACLs
kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:<name> --operation Read --topic <topic>
Allow a user to read

Inspect and operate

kafka-get-offsets.sh --bootstrap-server <broker> --topic <topic>
Show end offset per partition
kafka-metadata-quorum.sh --bootstrap-server <broker> describe --status
Show KRaft quorum status
kafka-broker-api-versions.sh --bootstrap-server <broker>
Check broker connectivity

Recipes

Create, send and read back
kafka-topics.sh --bootstrap-server <broker> --create --topic orders --partitions 3echo 'k1:hello' | kafka-console-producer.sh --bootstrap-server <broker> --topic orders --property parse.key=true --property key.separator=:kafka-console-consumer.sh --bootstrap-server <broker> --topic orders --from-beginning --property print.key=true --max-messages 1
Replay a group from a time
kafka-consumer-groups.sh --bootstrap-server <broker> --group app --reset-offsets --to-datetime 2026-01-01T00:00:00.000 --topic orders --dry-run# stop the consumers, then repeat with --execute
Shorten retention to one hour
kafka-configs.sh --bootstrap-server <broker> --alter --entity-type topics --entity-name orders --add-config retention.ms=3600000kafka-configs.sh --bootstrap-server <broker> --describe --entity-type topics --entity-name orders
Local broker in Docker
docker run -d --name kafka -p 9092:9092 apache/kafka:4.3.1docker exec -it kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list