Skip to main content

A python library to easily create kafka producer and consumer

Project description

Heizer

A python library to easily create kafka producer and consumer

Install

pip install heizer

Setup

Use docker-compose.yaml file to start kafka service

docker-compose up -d

Sample

Producer

from heizer import HeizerConfig, HeizerTopic, producer

producer_config = HeizerConfig(
    {
        "bootstrap.servers": "localhost:9092",
    }
)

my_topics = [
    HeizerTopic(name="my.topic1", partitions=[0]),
    HeizerTopic(name="my.topic2", partitions=[0, 1]),
]


@producer(
    topics=my_topics,
    config=producer_config,
)
def my_producer(my_name: str):
    return {
        "name": my_name
    }


if __name__ == "__main__":
    my_producer("Jack")
    my_producer("Alice")

Consumer

from heizer import HeizerConfig, HeizerTopic, consumer, producer
from confluent_kafka import Message
import json

producer_config = HeizerConfig(
    {
        "bootstrap.servers": "localhost:9092",
    }
)

consumer_config = HeizerConfig(
    {
        "bootstrap.servers": "localhost:9092",
        "group.id": "default",
        "auto.offset.reset": "earliest",
    }
)

topics = [HeizerTopic(name="my.topic1")]


@producer(
    topics=topics,
    config=producer_config
)
def produce_data(status: str, result: str):
    return {
        "status": status,
        "result": result,
    }


# Heizer expects consumer stopper func return Bool type result
# For this example, consumer will stop and return value if 
# `status` is `success` in msg
# If there is no stopper func, consumer will keep running forever
def stopper(msg: Message):
    data = json.loads(msg.value().decode("utf-8"))
    if data["status"] == "success":
        return True

    return False


@consumer(
    topics=topics,
    config=consumer_config,
    stopper=stopper,
)
def consume_data(message):
    data = json.loads(message.value().decode("utf-8"))
    print(data)
    return data["result"]


if __name__ == "__main__":
    produce_data("start", "1")
    produce_data("loading", "2")
    produce_data("success", "3")
    produce_data("postprocess", "4")

    result = consume_data()

    print("Expected Result:", result)

After you executed this code block, you will see those output on your terminal

{'status': 'start', 'result': '1'}
{'status': 'loading', 'result': '2'}
{'status': 'success', 'result': '3'}

Expected Result: 3

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

heizer-999999.dev1679768959.tar.gz (662.6 kB view details)

Uploaded Source

Built Distribution

heizer-999999.dev1679768959-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file heizer-999999.dev1679768959.tar.gz.

File metadata

  • Download URL: heizer-999999.dev1679768959.tar.gz
  • Upload date:
  • Size: 662.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for heizer-999999.dev1679768959.tar.gz
Algorithm Hash digest
SHA256 99393e88b41b253be4537b822a2ae52dcbabf7fbff5fcd194b9978ffad9acf99
MD5 5eb0c1efb5b1015373dcbc52c817c825
BLAKE2b-256 cee86e16e03ec1c222d6abb21bb8270191fe81e466354a74eac38f21661d7ed7

See more details on using hashes here.

File details

Details for the file heizer-999999.dev1679768959-py3-none-any.whl.

File metadata

File hashes

Hashes for heizer-999999.dev1679768959-py3-none-any.whl
Algorithm Hash digest
SHA256 ab534ea82800f702b8b0b29f3203267a33acaf5d249fdbae99415cafbddeb3b6
MD5 723edbc5950aad9888f670d333150217
BLAKE2b-256 182ab0f1f8afd9501f6c7110ad760298a40e2dd90ad2727c1da9c4fb28a70d3c

See more details on using hashes here.

Supported by

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