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

Uploaded Source

Built Distribution

heizer-999999.dev1679767692-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: heizer-999999.dev1679767692.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.dev1679767692.tar.gz
Algorithm Hash digest
SHA256 38ec5bedc29480ef8379416dcabde6af010da4207f0fb8edb33d81329db9265b
MD5 cbd5f552ee4ab97f29920dfce2df425b
BLAKE2b-256 0765bb2aa0ae26084ec51ec4a9697266fa1156c969709a7611bd13293606e977

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for heizer-999999.dev1679767692-py3-none-any.whl
Algorithm Hash digest
SHA256 21dda36d32a01c750442dd2d5af0c9231850fdc717a3a8c928a937c6cd6270f9
MD5 b3b33b30f014acc7bd0368b1c55a74fd
BLAKE2b-256 f5cddae3b3c71dc4e097799b5b5e09ae4bdc2f9f3c1ed521935ae3c0ed74c17c

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