dgkafka
Python package for working with Apache Kafka supporting multiple data formats.
Installation
pip install dgkafka
For Avro support (requires additional dependencies):
pip install dgkafka[avro]
For Json support (requires additional dependencies):
pip install dgkafka[json]
Features
- Producers and consumers for different data formats:
- Raw messages (bytes/strings)
- JSON
- Avro (with Schema Registry integration)
- Robust error handling
- Comprehensive operation logging
- Context manager support
- Flexible configuration
Quick Start
Basic Producer/Consumer
from dgkafka import KafkaProducer, KafkaConsumer
# Producer
with KafkaProducer(bootstrap_servers='localhost:9092') as producer:
producer.produce('test_topic', 'Hello, Kafka!')
# Consumer
with KafkaConsumer(bootstrap_servers='localhost:9092', group_id='test_group') as consumer:
consumer.subscribe(['test_topic'])
for msg in consumer.consume():
print(msg.value())
JSON Support
from dgkafka import JsonKafkaProducer, JsonKafkaConsumer
# Producer
with JsonKafkaProducer(bootstrap_servers='localhost:9092') as producer:
producer.produce('json_topic', {'key': 'value'})
# Consumer
with JsonKafkaConsumer(bootstrap_servers='localhost:9092', group_id='json_group') as consumer:
consumer.subscribe(['json_topic'])
for msg in consumer.consume():
print(msg.value()) # Automatically deserialized JSON
Avro Support
from dgkafka import AvroKafkaProducer, AvroKafkaConsumer
# Producer
value_schema = {
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "age", "type": "int"}
]
}
with AvroKafkaProducer(
schema_registry_url='http://localhost:8081',
bootstrap_servers='localhost:9092',
default_value_schema=value_schema
) as producer:
producer.produce('avro_topic', {'name': 'Alice', 'age': 30})
# Consumer
with AvroKafkaConsumer(
schema_registry_url='http://localhost:8081',
bootstrap_servers='localhost:9092',
group_id='avro_group'
) as consumer:
consumer.subscribe(['avro_topic'])
for msg in consumer.consume():
print(msg.value()) # Automatically deserialized Avro object
Classes
Base Classes
KafkaProducer- base message producerKafkaConsumer- base message consumer
Specialized Classes
JsonKafkaProducer- JSON message producer (inherits fromKafkaProducer)JsonKafkaConsumer- JSON message consumer (inherits fromKafkaConsumer)AvroKafkaProducer- Avro message producer (inherits fromKafkaProducer)AvroKafkaConsumer- Avro message consumer (inherits fromKafkaConsumer)
Configuration
All classes accept standard Kafka configuration parameters:
config = {
'bootstrap.servers': 'localhost:9092',
'group.id': 'my_group',
'auto.offset.reset': 'earliest'
}
Avro classes require additional parameter:
schema_registry_url- Schema Registry URL
Logging
All classes use dglog.Logger for logging. You can provide a custom logger:
from dglog import Logger
logger = Logger()
producer = KafkaProducer(logger_=logger, ...)
Best Practices
- Always use context managers (
with) for proper resource cleanup - Implement error handling and retry logic for production use
- Pre-register Avro schemas in Schema Registry
- Configure appropriate
acksandretriesparameters for producers - Monitor consumer lag and producer throughput
Advanced Usage
Custom Serialization
# Custom Avro serializer
class CustomAvroProducer(AvroKafkaProducer):
def _serialize_value(self, value):
# Custom serialization logic
return super()._serialize_value(value)
Message Headers
# Adding headers to messages
headers = {
'correlation_id': '12345',
'message_type': 'user_update'
}
producer.produce(
topic='events',
value=message_data,
headers=headers
)
Error Handling
from confluent_kafka import KafkaException
try:
with AvroKafkaProducer(...) as producer:
producer.produce(...)
except KafkaException as e:
print(f"Kafka error occurred: {e}")
Performance Tips
- Batch messages when possible (
batch.num.messagesconfig) - Adjust
linger.msfor better batching - Use
compression.type(lz4, snappy, or gzip) - Tune
fetch.max.bytesandmax.partition.fetch.bytesfor consumers
License
MIT
Metadata
Release files for dgkafka 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dgkafka-1.0.1.tar.gz | 12.5 kB | Without provenance | Details for dgkafka-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dgkafka-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for dgkafka-1.0.1-py3-none-any.whl |
Total release size: 25.7 kB
Release files / dgkafka-1.0.1.tar.gz
| Download URL | dgkafka-1.0.1.tar.gz |
|---|---|
| Size | 12.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
06f727c8bccd795e8eaed28cbfffcfcadcada4991d720876c3710a9726e725f7
|
|
BLAKE2b-256 checksum How to use checksums |
f55e9347901c2ca080d350568d1b176045d3ca7d927954659212380c6be45505
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Release files / dgkafka-1.0.1-py3-none-any.whl
| Download URL | dgkafka-1.0.1-py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9c16a3ab8f16019a8a7a8fbb32dc080342f0e15c259ad4262b12a756c0be0f2a
|
|
BLAKE2b-256 checksum How to use checksums |
19573a49836eee716f6ecd412402a405232e02cf655bd32c0962f6bc8445d66a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Security for dgkafka 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.