Truncating an Apache Kafka Topic is not an easy task. Typically, I have done this by deleting and recreating a topic,
which isn’t always easy or possible. While truncating a topic is something that should never be done in production,
it is quite useful in development. With this in mind, kafka-topic-truncate
CLI was created.
Introduction
Command-line tools are the cornerstone to Kafka development. Here is a tool added to support our development process; and hoping it can help you. This project is licensed with the Apache License Version 2.0.
Why?
This tool is more a convenience than a requirement for developer success. The goal here is to make it easier for a developer to reset their environment as easily as possible. Publishing Avro to a JSON topic will lead to serialization exceptions; while offsets can be reset, those messages are still there and could impact them again and again as they work through their consumer development; this allows for quick removal and restart.
Cluster Prevents Topic Deletion
Not all clusters have (or give) developers the ability to delete topics. This tool allows them to remove contents from a topic, which would be otherwise be impossible.
Truncating an Active Topic
Another advantage of this tool, is that it can be performed on a topic that has active producer and consumed; something that cannot be done when a topic is deleted and recreated.
Important Features
Requires --execute
to do the truncation
This mimics the approach used by the Apache Kafka CLI, such as kafka-consumer-groups
. When an action is to be performed where
no rollback available, the use of --execute
gives additional (although minor) “are you sure” feature.
Requires --force
if the topic does not have a delete
cleanup policy.
There are 2 cleanup policies for a topic, delete
and compact
. The Admin API cannot perform deleteRecords
on a topic
that does not have a delete
cleanup policy. This tool will temporarily add delete
cleanup policy to the topic so the
delete operation can be performed. Now, because of this additional action needed, the use of --force
is required for
a topic w/out a delete cleanup policy.
If there was an exception performed during this operation, please validate that the cleanup.policy
was restored. The
reset is in a finally block, but it could fail too.
- This is only required for a topic that does not have a
delete
cleanup policy. In other words, a cleanup policy ofcompact,delete
does not require the--force
flag.
Project
This CLI tool is the first tool to be added to the KTools opened-source project. The project will have a .tar release for each version. The project is written in Java, and leverages the Kafka Admin API for performing the delete operation. As time allows, additional CLI tools I have found to be beneficial in developing Kafka applications will be added to this project.
The ktools-cli
submodule leverages picocli
library for providing CLI operations to this project; all future CLI tools
will just become a new subcommand, and scripts will be added to the bin
directory to call the java jar command.
The project, as stated earlier, is licensed under the Apache License Version 2.0.
Finally, this project is brand new; hence the 0.0.x release. As will all code you download, please verify it is developed to your liking.
Reach out
Please contact us if you have ideas or suggestions. Use the project’s GitHub Issues page for specifics for the project.