An open API service indexing awesome lists of open source software.

https://github.com/aiven-open/kio

Python data types for the Apache Kafka® Protocol.
https://github.com/aiven-open/kio

binary-serialization kafka python

Last synced: 8 months ago
JSON representation

Python data types for the Apache Kafka® Protocol.

Awesome Lists containing this project

README

          

kio


CI Build Status
Code coverage report


PyPI Package
Python versions


Python data types for the Apache Kafka® Protocol.


Checkout the complete documentation →

## Features

- Exposes immutable dataclass entities for all protocol messages, generated from the
[same source][schema-source] as used internally in Apache Kafka®.
- Message classes are simple light-weight data containers that do not inherit anything
or expose any methods other than a regular dataclass. Encoding and decoding is enabled
by making all the necessary details about Kafka encoding introspectable.
- Widely compatible encoding and decoding of messages through the `IO[bytes]` interface.
- Test suite with focus on roundtrip property tests using Hypothesis, including
compatibility testing against the internals of upstream Apache Kafka®.

[schema-source]:
https://github.com/apache/kafka/tree/trunk/clients/src/main/resources/common/message

## Installation

```shell
$ pip install --require-virtualenv kio
```

## Development

Install development requirements.

```shell
$ pip install --require-virtualenv -e .[all]
```

The test suite contains integration tests that expects to be able to connect to an
Apache Kafka® instance running on `127.0.0.1:9092`. There is a Docker Compose file in
`container/compose.yml` that you can use to conveniently start up an instance.

```shell
$ docker compose up -d kafka
```

Run tests.

```shell
$ python3 -X dev -m pytest --cov
```

Setup pre-commit to run on push.

```shell
$ pre-commit install -t pre-push
```

> [!WARNING]\
> Building the schema will delete the `src/kio/schema` directory and recreate it again, hence
> all of the files under this directory will be deleted. Make sure to not put unrelated files
> there and accidentally wipe out your own work.

Fetch, generate, and format schema.

```shell
$ make build-schema
```