Skip to main content

Kafka client library based on confluent-kafka with retry functionality

Project description

Retriable Kafka Client

This is an opinionated wrapper for confluent_kafka Python library. It only uses specific parts of the underlying library while introducing additional functionalities to these selected parts.

Features

The aim is to provide a fault-tolerant platform for parallel message processing.

Parallel processing

Each consumer requires an executor pool, which will be used for message processing. Each consumer can consume from multiple topics and processes the messages from these topics by a single callable. The callable must be specified by the user of this library.

The library also ensures exactly-once processing when used correctly. To ensure this, the tasks should take short enough time that all of them finish before the cluster forces rebalancing. The library tries to finish tasks from revoked partitions before the rebalance while stopping additional non-started tasks. The default timeout for each task to finish is 30 seconds, but can be changed. Kafka cluster behavior change may also be needed with longer tasks. This behavior only appears during rebalancing and graceful stopping of the consumer.

Fault-tolerance

Each consumer accepts configuration with retry topics. A retry topic is a Kafka topic used for asynchronous retrying of message processing. If the specified target callable fails, the consumer will commit the original message and resends the same message to a retry topic with special headers. The headers include information about the next timestamp at which the message should be processed again (to give some time to the error to disappear if the processing depends on some outside infrastructure).

The retry topic is polled alongside the original topic. If a message contains the special timestamp header, its Kafka partition of origin will be paused and the message will be stored locally. The processing will resume only after the specified timestamp passes. The message will not be processed before the timestamp, it can only gather delay (depending on the occupation of the worker pool). Once the message is sent to the pool for re-processing, the consumption of the blocked partition is resumed.

This whole mechanism does not ensure message ordering. When a message is sent to be retried, another message processing from the same topic is still unblocked.

Local testing

This project uses uv. To set up the project locally, use

uv pip install .

To test, you also need development tools, add them to your local environment using this command:

uv pip install --group dev

Then you can use tox to run linting and unit tests.

For integration tests you also need podman or docker with compose. Run:

podman compose up -d 

Wait a while and then run:

tox -e integration

Don't forget to clean up the test environment afterward. Use

podman compose down

to do that (or switch podman with docker depending on your tool of choice).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

retriable_kafka_client-0.3.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

retriable_kafka_client-0.3.0-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file retriable_kafka_client-0.3.0.tar.gz.

File metadata

  • Download URL: retriable_kafka_client-0.3.0.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for retriable_kafka_client-0.3.0.tar.gz
Algorithm Hash digest
SHA256 460d5c8c9e73d235a2d6b54aa826dcd1e495a5d2b7a9411d3abb724b4c64910f
MD5 05a629ec34576aa674f86cd6a920b25f
BLAKE2b-256 3864004439d37f3bcb86e39635053dcdd827c2794a97d0d066c55960f40c5854

See more details on using hashes here.

File details

Details for the file retriable_kafka_client-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: retriable_kafka_client-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 23.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for retriable_kafka_client-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b24947d28baf8e634bb5bf0a505d6f4b7f466d55157a17b065cf9199c41e92c2
MD5 a531c8b0e36d7b9a1f079d44fa04d783
BLAKE2b-256 45265914c57acb31405d1fb049203a63d835e4b5ca2aa88862a7ff2e377e88fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page