Skip to content

kaskade is a text user interface for kafka, which allows you to interact and consume topics from your terminal in style!

License

Notifications You must be signed in to change notification settings

sauljabin/kaskade

Repository files navigation

kaskade

GitHub donate Libraries.io dependency status for latest release MIT License Pypi Version Homebrew Version Docker Version Platform Python Versions

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.

Limitations

Kaskade does not include:

  • Schema Registry for protobuf.
  • Avro deserialization without Schema Registry.

Screenshots

kaskade kaskade
kaskade kaskade

Installation

Install it with brew:

brew install kaskade

brew installation.

Install it with pipx:

pipx install kaskade

pipx installation.

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 deserialization formats [bytes, boolean, string, long, integer, double, float, json, avro, protobuf]

Consuming from the beginning:

kaskade consumer -b my-kafka:9092 -t my-topic --from-beginning

Schema registry simple connection and avro deserialization:

kaskade consumer -b my-kafka:9092 -t my-avro-topic \
        -k avro -v avro \
        --schema-registry url=http://my-schema-registry:8081

For more information about Schema Registry configurations go to: Confluent Schema Registry client.

SSL encryption example:

kaskade admin -b my-kafka:9092 -x security.protocol=SSL

For more information about SSL encryption and SSL authentication go to: SSL support in librdkafka.

Confluent cloud admin and consumer:

kaskade admin -b ${BOOTSTRAP_SERVERS} \
        -x security.protocol=SASL_SSL \
        -x sasl.mechanism=PLAIN \
        -x sasl.username=${CLUSTER_API_KEY} \
        -x sasl.password=${CLUSTER_API_SECRET}
kaskade consumer -b ${BOOTSTRAP_SERVERS} -t my-avro-topic \
        -k string -v avro \
        -x security.protocol=SASL_SSL \
        -x sasl.mechanism=PLAIN \
        -x sasl.username=${CLUSTER_API_KEY} \
        -x sasl.password=${CLUSTER_API_SECRET} \
        --schema-registry url=${SCHEMA_REGISTRY_URL} \
        --schema-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

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 FileDescriptorSet at: Protocol Buffers Documentation.

Development

For development instructions see DEVELOPMENT.md.