High level pub/sub package
Project description
Papfa
Papfa is a high level pub/sub pattern Python library.
Quick Start for Django
Install Papfa:
$ pip install papfa
Add Papfa to your settings:
PAPFA = {
'BROKER': 'KAFKA',
'KAFKA_BOOTSTRAP_SERVERS': ...,
'KAFKA_SASL_PASSWORD': ...,
'KAFKA_SASL_USERNAME': ...,
'KAFKA_SASL_MECHANISM': ...,
'KAFKA_SECURITY_PROTOCOL': ...,
'GROUP_ID_PREFIX': ...,
'SCHEMA_REGISTRY_URL': ...,
'SCHEMA_REGISTRY_BASIC_AUTH': ...,
'CONSUMER_MIDDLEWARES': [
...
]
}
Consumer
Add <django_project>.papfa.py
from papfa import Papfa
papfa_app = Papfa()
Import papfa in <django_project>.__init__.py
from <django_project>.papfa import papfa_app
__all__ = ['papfa_app']
Add consumer in <app>/consumers.py:
from papfa.consumers import consumer
from papfa.dtos import Record
@consumer(topic='topic_name')
def my_consumer(messages: List[Record]):
print(messages)
Use papfa cli to consume
papfa consume -a <django_app> <consumer_name>
Example of project structure:
└── shop
├── shop
│ ├── __init__.py
│ ├── papfa.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── app1
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── consumers.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── app2
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── consumers.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py
Producer
Produce Message:
from dataclasses import dataclass
from dataclasses_avroschema import AvroModel
from papfa.producer import get_message_producer
from papfa.dtos import Record
@dataclass
class User(AvroModel):
name: str
age: int
r1 = Record(value=User(name='thom', age=53))
r1 = Record(value=User(name='jonny', age=50))
message_producer = get_message_producer(topic='topic_name', User)
message_producer.produce(messages=[r1, r2])
CLI
Papfa provides a command line interface to consume and monitor consumers.
Command |
Description |
---|---|
list |
list of all consumers |
consume |
consume messages from a known consumer |
stats |
show stats of a consumer |
Middleware
Papfa provides middlewares for both consumers and producers. You can implement your own middleware by extending the papfa.middlewares.consumer.ConsumerMiddleware and papfa.middlwares.producer.ProducerMiddleware class.
Default Middlewares
papfa.middlewares.consumer.ConsumedMessageStatsMiddleware - Logs the last message consumed by each topic - consumer group
Serialization
For Now Papfa only support confluent avro serialization with schema registry.
Broker
For Now Papfa only support Apache Kafka.
Features
Batch Processing (Commit per batch)
Consumed Messages Stats
Todos
Handle Idempotency
Add Other Brokers & Serializers
Handle Multiple Broker Cluster
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
History
0.1.11 (2023-01-23)
Fix meta_data bug
0.1.10 (2023-01-23)
Add Transactional Producer
Add More Logs for Consumers
Fix Avro Dependency
0.1.9 (2023-01-03)
Add consumer_kwargs in consumer
0.1.8 (2022-12-07)
Add kafka_config in consumer
0.1.7 (2022-11-29)
Add deserialize key flag
0.1.6 (2022-11-27)
Add Python 3.10 Support
0.1.5 (2022-06-08)
Fix AppRegistryNotReady error when importing celery
0.1.4 (2022-06-01)
Fix group id with prefix in consumer
0.1.3 (2022-05-31)
Fix auto commit in batch processing.
0.1.1 (2022-05-28)
Fix value error caused by schema registry invalid configuration.
0.1.0 (2022-05-11)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file papfa-0.1.19-py2.py3-none-any.whl
.
File metadata
- Download URL: papfa-0.1.19-py2.py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e34e1e2b8748938ecf00607566fda7c8fe2c3b67f4f42afc91b9ed7f4a86a74 |
|
MD5 | 607cfd739e30ba8ad9055f157478ad59 |
|
BLAKE2b-256 | 0660454ddb86453a7c59f3e38a0250fe377bf423f5b02077198a3187e1f3791f |