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.dev1679769565.tar.gz (662.7 kB view details)

Uploaded Source

Built Distribution

heizer-999999.dev1679769565-py3-none-any.whl (33.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for heizer-999999.dev1679769565.tar.gz
Algorithm Hash digest
SHA256 d35bb06a610b6afe83ad83009ad8427f9c870ef3e056db9948d88797f0703a3b
MD5 5c7bf874b17378bdac9086afca0ce938
BLAKE2b-256 3a12605f83db6d3835ae2bb918c604ffbab82b8423fb3db7c358c24d0570daf6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for heizer-999999.dev1679769565-py3-none-any.whl
Algorithm Hash digest
SHA256 3dc9af7d952ece731cdb12f5d086537408480f50f6e7ca51834d59a0ccbcf973
MD5 183c8b2e8444c0999267894f77188de1
BLAKE2b-256 30f15944ec7ffff19320dfc791b0a2ccb99e4a4fcb28edb6bd5d87c657182dd2

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