kaskade


Namekaskade JSON
Version 4.0.2 PyPI version JSON
download
home_pagehttps://github.com/sauljabin/kaskade
Summarykaskade is a text user interface for kafka
upload_time2025-01-08 22:53:05
maintainerNone
docs_urlNone
authorSaúl Piña
requires_python<3.14,>=3.10
licenseMIT
keywords kafka kaskade
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
<a href="https://github.com/sauljabin/kaskade"><img alt="kaskade" width="400" src="https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/banner.png"></a>
</p>

<p align="center">
<a href="https://github.com/sauljabin/kaskade"><img alt="GitHub" src="https://img.shields.io/badge/github-blueviolet?logo=github&logoColor=white"></a>
<a href="https://github.com/sponsors/sauljabin"><img alt="donate" src="https://img.shields.io/badge/donate-EA4AAA?logo=github-sponsors&logoColor=white"></a>
<a href="https://libraries.io/pypi/kaskade"><img alt="Libraries.io dependency status for latest release" src="https://img.shields.io/librariesio/release/pypi/kaskade?logo=python&logoColor=white&label="></a>
<a href="https://github.com/sauljabin/kaskade/blob/main/LICENSE"><img alt="MIT License" src="https://img.shields.io/github/license/sauljabin/kaskade"></a>
<a href="https://pypi.org/project/kaskade"><img alt="Pypi Version" src="https://img.shields.io/pypi/v/kaskade"></a>
<a href="https://formulae.brew.sh/formula/kaskade"><img alt="Homebrew Version" src="https://img.shields.io/homebrew/v/kaskade"></a>
<a href="https://hub.docker.com/r/sauljabin/kaskade/tags"><img alt="Docker Version" src="https://img.shields.io/docker/v/sauljabin/kaskade?label=dockerhub"></a>
<a href="https://pypi.org/project/kaskade"><img alt="Platform" src="https://img.shields.io/badge/os-linux%20%7C%20macos-blue"></a>
<a href="https://pypi.org/project/kaskade"><img alt="Python Versions" src="https://img.shields.io/pypi/pyversions/kaskade?label=python"></a>
</p>

## Kaskade

Kaskade is a text user interface (TUI) for Apache Kafka, built with [Textual](https://github.com/Textualize/textual)
by [Textualize](https://www.textualize.io/).

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.

## 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`:

```bash
brew install kaskade
```

[brew installation](https://brew.sh/).

#### Install it with `pipx`:

```bash
pipx install kaskade
```

[pipx installation](https://pipx.pypa.io/stable/installation/).

## Running kaskade

#### Admin view:

```bash
kaskade admin -b my-kafka:9092
```

#### Consumer view:

```bash
kaskade consumer -b my-kafka:9092 -t my-topic
```

## Configuration examples

#### Multiple bootstrap servers:

```bash
kaskade admin -b my-kafka:9092,my-kafka:9093
```

#### Consume and deserialize:

```bash
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:

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

#### Schema registry simple connection deserializer:

```bash
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](https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#schemaregistry-client).

#### Apicurio registry:

```bash
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: https://github.com/apicurio/apicurio-registry

#### SSL encryption example:

```bash
kaskade admin -b my-kafka:9092 -c security.protocol=SSL
```

> For more information about SSL encryption and SSL authentication go
> to: [SSL support in librdkafka](https://github.com/edenhill/librdkafka/wiki/Using-SSL-with-librdkafka#configure-librdkafka-client).

#### Confluent cloud admin and consumer:

```bash
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}
```

```bash
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](https://docs.confluent.io/cloud/current/client-apps/config-client.html).

#### Running with docker:

```bash
docker run --rm -it --network my-networtk sauljabin/kaskade:latest \
    admin -b my-kafka:9092
```

```bash
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:

```bash
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:

```bash
brew install protobuf
```

Generate a _Descriptor Set_ file from your `.proto` file:

```bash
protoc --include_imports \
       --descriptor_set_out=my-descriptor.desc \
       --proto_path=${PROTO_PATH} \
       ${PROTO_PATH}/my-proto.proto
```

Consume using `my-descriptor.desc` file:

```bash
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](https://protobuf.dev/programming-guides/techniques/#self-description).

## Development

For development instructions see [DEVELOPMENT.md](https://github.com/sauljabin/kaskade/blob/main/DEVELOPMENT.md).


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/sauljabin/kaskade",
    "name": "kaskade",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.14,>=3.10",
    "maintainer_email": null,
    "keywords": "kafka, kaskade",
    "author": "Sa\u00fal Pi\u00f1a",
    "author_email": "sauljabin@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/70/7a/f8e5902528fee31a88e85045606c5bfd941cd139c673a369697dbfc63f1d/kaskade-4.0.2.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n<a href=\"https://github.com/sauljabin/kaskade\"><img alt=\"kaskade\" width=\"400\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/banner.png\"></a>\n</p>\n\n<p align=\"center\">\n<a href=\"https://github.com/sauljabin/kaskade\"><img alt=\"GitHub\" src=\"https://img.shields.io/badge/github-blueviolet?logo=github&logoColor=white\"></a>\n<a href=\"https://github.com/sponsors/sauljabin\"><img alt=\"donate\" src=\"https://img.shields.io/badge/donate-EA4AAA?logo=github-sponsors&logoColor=white\"></a>\n<a href=\"https://libraries.io/pypi/kaskade\"><img alt=\"Libraries.io dependency status for latest release\" src=\"https://img.shields.io/librariesio/release/pypi/kaskade?logo=python&logoColor=white&label=\"></a>\n<a href=\"https://github.com/sauljabin/kaskade/blob/main/LICENSE\"><img alt=\"MIT License\" src=\"https://img.shields.io/github/license/sauljabin/kaskade\"></a>\n<a href=\"https://pypi.org/project/kaskade\"><img alt=\"Pypi Version\" src=\"https://img.shields.io/pypi/v/kaskade\"></a>\n<a href=\"https://formulae.brew.sh/formula/kaskade\"><img alt=\"Homebrew Version\" src=\"https://img.shields.io/homebrew/v/kaskade\"></a>\n<a href=\"https://hub.docker.com/r/sauljabin/kaskade/tags\"><img alt=\"Docker Version\" src=\"https://img.shields.io/docker/v/sauljabin/kaskade?label=dockerhub\"></a>\n<a href=\"https://pypi.org/project/kaskade\"><img alt=\"Platform\" src=\"https://img.shields.io/badge/os-linux%20%7C%20macos-blue\"></a>\n<a href=\"https://pypi.org/project/kaskade\"><img alt=\"Python Versions\" src=\"https://img.shields.io/pypi/pyversions/kaskade?label=python\"></a>\n</p>\n\n## Kaskade\n\nKaskade is a text user interface (TUI) for Apache Kafka, built with [Textual](https://github.com/Textualize/textual)\nby [Textualize](https://www.textualize.io/).\n\nIt includes features like:\n\n### Admin\n\n- List topics, partitions, groups and group members.\n- Topic information like lag, replicas and records count.\n- Create, edit and delete topics.\n- Filter topics by name.\n\n### Consumer\n\n- Json, string, integer, long, float, boolean and double deserialization.\n- Filter by key, value, header and/or partition.\n- Schema Registry support for avro and json.\n- Protobuf deserialization support without Schema Registry.\n- Avro deserialization without Schema Registry.\n\n## Limitations\n\nKaskade does not include:\n\n- Schema Registry for protobuf.\n\n## Screenshots\n\n<table>\n  <tr>\n    <td>\n      <img alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/admin.png\">\n    </td>\n    <td>\n      <img alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/create-topic.png\">\n    </td>\n  </tr>\n  <tr>\n    <td>\n      <img alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/consumer.png\">\n    </td>\n    <td>\n      <img alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/record.png\">\n    </td>\n  </tr>\n</table>\n\n## Installation\n\n#### Install it with `brew`:\n\n```bash\nbrew install kaskade\n```\n\n[brew installation](https://brew.sh/).\n\n#### Install it with `pipx`:\n\n```bash\npipx install kaskade\n```\n\n[pipx installation](https://pipx.pypa.io/stable/installation/).\n\n## Running kaskade\n\n#### Admin view:\n\n```bash\nkaskade admin -b my-kafka:9092\n```\n\n#### Consumer view:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-topic\n```\n\n## Configuration examples\n\n#### Multiple bootstrap servers:\n\n```bash\nkaskade admin -b my-kafka:9092,my-kafka:9093\n```\n\n#### Consume and deserialize:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-json-topic -k json -v json\n```\n\n> Supported deserializers `[bytes, boolean, string, long, integer, double, float, json, avro, protobuf, registry]`\n\n#### Consuming from the beginning:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-topic --from-beginning\n```\n\n#### Schema registry simple connection deserializer:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-avro-topic \\\n        -k registry -v registry \\\n        --registry url=http://my-schema-registry:8081\n```\n\n> For more information about Schema Registry configurations go\n> to: [Confluent Schema Registry client](https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#schemaregistry-client).\n\n#### Apicurio registry:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-avro-topic \\\n        -k registry -v registry \\\n        --registry url=http://my-apicurio-registry:8081/apis/ccompat/v7\n```\n\n> For more about apicurio go to: https://github.com/apicurio/apicurio-registry\n\n#### SSL encryption example:\n\n```bash\nkaskade admin -b my-kafka:9092 -c security.protocol=SSL\n```\n\n> For more information about SSL encryption and SSL authentication go\n> to: [SSL support in librdkafka](https://github.com/edenhill/librdkafka/wiki/Using-SSL-with-librdkafka#configure-librdkafka-client).\n\n#### Confluent cloud admin and consumer:\n\n```bash\nkaskade admin -b ${BOOTSTRAP_SERVERS} \\\n        -c security.protocol=SASL_SSL \\\n        -c sasl.mechanism=PLAIN \\\n        -c sasl.username=${CLUSTER_API_KEY} \\\n        -c sasl.password=${CLUSTER_API_SECRET}\n```\n\n```bash\nkaskade consumer -b ${BOOTSTRAP_SERVERS} -t my-avro-topic \\\n        -k string -v registry \\\n        -c security.protocol=SASL_SSL \\\n        -c sasl.mechanism=PLAIN \\\n        -c sasl.username=${CLUSTER_API_KEY} \\\n        -c sasl.password=${CLUSTER_API_SECRET} \\\n        --registry url=${SCHEMA_REGISTRY_URL} \\\n        --registry basic.auth.user.info=${SR_API_KEY}:${SR_API_SECRET}\n```\n\n> More about confluent cloud configuration\n> at: [Kafka Client Quick Start for Confluent Cloud](https://docs.confluent.io/cloud/current/client-apps/config-client.html).\n\n#### Running with docker:\n\n```bash\ndocker run --rm -it --network my-networtk sauljabin/kaskade:latest \\\n    admin -b my-kafka:9092\n```\n\n```bash\ndocker run --rm -it --network my-networtk sauljabin/kaskade:latest \\\n    consumer -b my-kafka:9092 -t my-topic\n```\n\n#### Avro consumer:\n\nConsume using `my-schema.avsc` file:\n\n```bash\nkaskade consumer -b my-kafka:9092 --from-beginning \\\n        -k string -v avro \\\n        -t my-avro-topic \\\n        --avro value=my-schema.avsc\n```\n\n#### Protobuf consumer:\n\nInstall `protoc` command:\n\n```bash\nbrew install protobuf\n```\n\nGenerate a _Descriptor Set_ file from your `.proto` file:\n\n```bash\nprotoc --include_imports \\\n       --descriptor_set_out=my-descriptor.desc \\\n       --proto_path=${PROTO_PATH} \\\n       ${PROTO_PATH}/my-proto.proto\n```\n\nConsume using `my-descriptor.desc` file:\n\n```bash\nkaskade consumer -b my-kafka:9092 --from-beginning \\\n        -k string -v protobuf \\\n        -t my-protobuf-topic \\\n        --protobuf descriptor=my-descriptor.desc \\\n        --protobuf value=mypackage.MyMessage\n```\n\n> More about protobuf and `FileDescriptorSet` at: [Protocol Buffers Documentation](https://protobuf.dev/programming-guides/techniques/#self-description).\n\n## Development\n\nFor development instructions see [DEVELOPMENT.md](https://github.com/sauljabin/kaskade/blob/main/DEVELOPMENT.md).\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "kaskade is a text user interface for kafka",
    "version": "4.0.2",
    "project_urls": {
        "Documentation": "https://github.com/sauljabin/kaskade",
        "Homepage": "https://github.com/sauljabin/kaskade",
        "Repository": "https://github.com/sauljabin/kaskade",
        "changelog": "https://github.com/sauljabin/kaskade/blob/main/CHANGELOG.md",
        "funding": "https://github.com/sponsors/sauljabin",
        "issues": "https://github.com/sauljabin/kaskade/issues"
    },
    "split_keywords": [
        "kafka",
        " kaskade"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "71ee0d06a3d0b67e2f69f969aa4f17401f0f16396cdbb30d4bfb945f5d8dd568",
                "md5": "0ed553d47d39a22c7fe4d1fb141678ef",
                "sha256": "8a751348d77c02c2525867f241e152091a9271438866011acf1fae29fff89c63"
            },
            "downloads": -1,
            "filename": "kaskade-4.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0ed553d47d39a22c7fe4d1fb141678ef",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.14,>=3.10",
            "size": 25084,
            "upload_time": "2025-01-08T22:53:02",
            "upload_time_iso_8601": "2025-01-08T22:53:02.646489Z",
            "url": "https://files.pythonhosted.org/packages/71/ee/0d06a3d0b67e2f69f969aa4f17401f0f16396cdbb30d4bfb945f5d8dd568/kaskade-4.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "707af8e5902528fee31a88e85045606c5bfd941cd139c673a369697dbfc63f1d",
                "md5": "dca4f8ed83f8ec1d716d73ec4f1b3283",
                "sha256": "aeff83257d9a4cc3b47da6aa9456c337800523d7ada22f20c4750a84d902e0f8"
            },
            "downloads": -1,
            "filename": "kaskade-4.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "dca4f8ed83f8ec1d716d73ec4f1b3283",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.14,>=3.10",
            "size": 22092,
            "upload_time": "2025-01-08T22:53:05",
            "upload_time_iso_8601": "2025-01-08T22:53:05.230898Z",
            "url": "https://files.pythonhosted.org/packages/70/7a/f8e5902528fee31a88e85045606c5bfd941cd139c673a369697dbfc63f1d/kaskade-4.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-08 22:53:05",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sauljabin",
    "github_project": "kaskade",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "kaskade"
}
        
Elapsed time: 0.45964s