Kaskade
kaskade is a text user interface for kafka, which allows you to interact and consume topics from your terminal in style!
Install / Use
/learn @sauljabin/KaskadeREADME
Kaskade
Kaskade is a text user interface (TUI) for Apache Kafka, built with Textual by Textualize.
It includes features like:
Admin
- List topics, partitions, groups and group members.
- Topic information like lag, replicas and records count.
- Create, edit and delete topics.
- Filter topics by name.
Consumer
- Json, string, integer, long, float, boolean and double deserialization.
- Filter by key, value, header and/or partition.
- Schema Registry support for avro and json.
- Protobuf deserialization support without Schema Registry.
- Avro deserialization without Schema Registry.
Limitations
Kaskade does not include:
- Schema Registry for protobuf.
- Runtime auto-refresh.
Screenshots
<table> <tr> <td> <img alt="kaskade" src="https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/admin.png"> </td> <td> <img alt="kaskade" src="https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/create-topic.png"> </td> </tr> <tr> <td> <img alt="kaskade" src="https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/consumer.png"> </td> <td> <img alt="kaskade" src="https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/record.png"> </td> </tr> </table>Installation
Install it with brew:
brew install kaskade
Install it with pipx:
pipx install kaskade
Running kaskade
Admin view:
kaskade admin -b my-kafka:9092
Consumer view:
kaskade consumer -b my-kafka:9092 -t my-topic
Configuration examples
Multiple bootstrap servers:
kaskade admin -b my-kafka:9092,my-kafka:9093
Consume and deserialize:
kaskade consumer -b my-kafka:9092 -t my-json-topic -k json -v json
Supported deserializers
[bytes, boolean, string, long, integer, double, float, json, avro, protobuf, registry]
Consuming from the beginning:
kaskade consumer -b my-kafka:9092 -t my-topic --from-beginning
Schema registry simple connection deserializer:
kaskade consumer -b my-kafka:9092 -t my-avro-topic \
-k registry -v registry \
--registry url=http://my-schema-registry:8081
For more information about Schema Registry configurations go to: Confluent Schema Registry client.
Apicurio registry:
kaskade consumer -b my-kafka:9092 -t my-avro-topic \
-k registry -v registry \
--registry url=http://my-apicurio-registry:8081/apis/ccompat/v7
For more about apicurio go to: Apicurio registry.
SSL encryption example:
kaskade admin -b my-kafka:9092 -c security.protocol=SSL
For more information about SSL encryption and SSL authentication go to: Configure librdkafka client.
Confluent cloud admin and consumer:
kaskade admin -b ${BOOTSTRAP_SERVERS} \
-c security.protocol=SASL_SSL \
-c sasl.mechanism=PLAIN \
-c sasl.username=${CLUSTER_API_KEY} \
-c sasl.password=${CLUSTER_API_SECRET}
kaskade consumer -b ${BOOTSTRAP_SERVERS} -t my-avro-topic \
-k string -v registry \
-c security.protocol=SASL_SSL \
-c sasl.mechanism=PLAIN \
-c sasl.username=${CLUSTER_API_KEY} \
-c sasl.password=${CLUSTER_API_SECRET} \
--registry url=${SCHEMA_REGISTRY_URL} \
--registry basic.auth.user.info=${SR_API_KEY}:${SR_API_SECRET}
More about confluent cloud configuration at: Kafka client quick start for Confluent Cloud.
Running with docker:
docker run --rm -it --network my-networtk sauljabin/kaskade:latest \
admin -b my-kafka:9092
docker run --rm -it --network my-networtk sauljabin/kaskade:latest \
consumer -b my-kafka:9092 -t my-topic
Avro consumer:
Consume using my-schema.avsc file:
kaskade consumer -b my-kafka:9092 --from-beginning \
-k string -v avro \
-t my-avro-topic \
--avro value=my-schema.avsc
Protobuf consumer:
Install protoc command:
brew install protobuf
Generate a Descriptor Set file from your .proto file:
protoc --include_imports \
--descriptor_set_out=my-descriptor.desc \
--proto_path=${PROTO_PATH} \
${PROTO_PATH}/my-proto.proto
Consume using my-descriptor.desc file:
kaskade consumer -b my-kafka:9092 --from-beginning \
-k string -v protobuf \
-t my-protobuf-topic \
--protobuf descriptor=my-descriptor.desc \
--protobuf value=mypackage.MyMessage
More about protobuf and
FileDescriptorSetat: Protocol Buffers documentation.
Questions
For Q&A go to GitHub Discussions.
Development
For development instructions see DEVELOPMENT.md.
