Enhanced Apache Kafka library with priority-based message processing
Project description
KafkaBoost ๐
KafkaBoost is an enhanced Apache Kafka library that extends standard Kafka functionality with priority-based message processing, automatic topic management, and intelligent consumer orchestration.
๐ Key Features
๐ฏ Priority-Based Message Processing
- Priority Boost Mode: Routes messages to priority-specific topics and serves highest priority first
- Standard Mode: Sorts messages by priority field within batches
- Dynamic Consumer Management: Automatically pauses/resumes consumers based on priority
๐ง Automatic Topic Management
- Smart Topic Creation: Automatically creates priority-specific topics with configurable partitions
- S3 Configuration Integration: Manages topic configurations through S3
- Dynamic Configuration Updates: Supports runtime configuration changes
โก Enhanced Consumer Experience
- Async Support: Non-blocking polling for async applications
- Intelligent Partitioning: Configurable partition counts per priority level
- Consumer Group Management: Unique group IDs for each priority level
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Producer โ โ KafkaBoost โ โ Consumer โ
โ โ โ โ โ โ
โ โข Priority โโโโโถโ โข Topic Routing โโโโโถโ โข Priority โ
โ Routing โ โ โข Auto Creation โ โ Queues โ
โ โข S3 Config โ โ โข S3 Integration โ โ โข Smart Polling โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Kafka Topics โ
โ โ
โ โข base_topic โ
โ โข base_topic_5 โ
โ โข base_topic_7 โ
โ โข base_topic_10 โ
โโโโโโโโโโโโโโโโโโโโ
๐ Quick Start
Installation
pip install kafkaboost
Basic Usage
from kafkaboost.consumer import KafkaboostConsumer
from kafkaboost.producer import KafkaboostProducer
# Producer with priority routing
producer = KafkaboostProducer(
bootstrap_servers=['localhost:9092'],
user_id='user123' # Enables S3 config lookup
)
# Send messages with different priorities
producer.send('orders', {'order_id': 1, 'priority': 5})
producer.send('orders', {'order_id': 2, 'priority': 10}) # Higher priority
# Consumer with priority boost
consumer = KafkaboostConsumer(
bootstrap_servers=['localhost:9092'],
topics=['orders'],
group_id='priority_group',
user_id='user123' # Enables priority boost mode
)
# Messages are automatically served by priority (10 first, then 5)
messages = consumer.poll(timeout_ms=1000)
๐ Configuration
S3 Configuration Structure
{
"user_id": "user123",
"max_priority": 10,
"default_priority": 0,
"Priority_boost": [
{
"topic_name": "orders",
"priority_boost_min_value": 5,
"number_of_partitions": 9
}
],
"Topics_priority": [
{
"topic": "notifications",
"priority": 8
}
],
"Rule_Base_priority": [
{
"role_name": "admin",
"value": "high",
"priority": 9
}
]
}
Configuration Parameters
| Parameter | Description | Default |
|---|---|---|
topic_name |
Base topic name for priority routing | Required |
priority_boost_min_value |
Minimum priority level for boost mode | 0 |
number_of_partitions |
Number of partitions for priority topics | 1 |
max_priority |
Maximum priority level supported | 10 |
๐ Priority Boost Mode
How It Works
- Topic Discovery: Automatically finds priority-specific topics (e.g.,
orders_5,orders_7,orders_10) - Consumer Creation: Creates separate consumers for each priority level
- Smart Polling: Serves messages from highest priority first
- Dynamic Management: Pauses lower priority consumers when higher priority has messages
Topic Naming Convention
Priority topics follow the pattern: {base_topic}_{priority_level}
Examples:
orders_0- Lowest priority ordersorders_5- Medium priority ordersorders_10- Highest priority orders
Consumer Group Management
Each priority level gets its own consumer group:
group_id_base- For base topicgroup_id_priority_5- For priority 5 topicsgroup_id_priority_10- For priority 10 topics
๐ ๏ธ Advanced Usage
Producer with Priority Routing
from kafkaboost.producer import KafkaboostProducer
producer = KafkaboostProducer(
bootstrap_servers=['localhost:9092'],
user_id='user123'
)
# Messages are automatically routed to priority topics
producer.send('orders', {
'order_id': 123,
'customer_id': 'cust_456',
'amount': 99.99
}, priority=10) # Goes to orders_10 topic
producer.send('orders', {
'order_id': 124,
'customer_id': 'cust_789',
'amount': 49.99
}, priority=5) # Goes to orders_5 topic
Consumer with Async Support
import asyncio
from kafkaboost.consumer import KafkaboostConsumer
async def consume_orders():
consumer = KafkaboostConsumer(
bootstrap_servers=['localhost:9092'],
topics=['orders'],
user_id='user123'
)
try:
while True:
# Non-blocking async polling
messages = await consumer.poll_async(timeout_ms=1000)
for msg in messages:
priority = msg.value.get('priority', 0)
print(f"Processing order with priority {priority}")
except KeyboardInterrupt:
print("Stopping consumer...")
finally:
consumer.close()
# Run async consumer
asyncio.run(consume_orders())
Configuration Management
from kafkaboost.kafka_utils import KafkaConfigManager
# Initialize config manager
config_manager = KafkaConfigManager(
bootstrap_servers='localhost:9092',
user_id='user123'
)
# Ensure priority topics exist
config_manager.check_and_create_priority_topics()
# Get configuration summary
summary = config_manager.get_config_summary()
print(f"Max priority: {summary['max_priority']}")
print(f"Topics count: {summary['topics_count']}")
๐ง Automatic Topic Creation
Features
- Configurable Partitions: Each priority topic can have different partition counts
- Idempotent Creation: Won't create topics that already exist
- Error Handling: Graceful handling of creation failures
- S3 Integration: Uses S3 configuration for topic specifications
Example
# Topics are automatically created based on configuration
# For config: {"topic_name": "orders", "priority_boost_min_value": 5, "number_of_partitions": 9}
# Creates:
# - orders_5 (9 partitions)
# - orders_6 (9 partitions)
# - orders_7 (9 partitions)
# - orders_8 (9 partitions)
# - orders_9 (9 partitions)
# - orders_10 (9 partitions)
๐ Monitoring and Debugging
Configuration Summary
# Get detailed configuration information
summary = consumer.get_config_summary()
print(f"Priority boost enabled: {summary['priority_boost_enabled']}")
print(f"Current subscription: {summary['current_subscription']}")
print(f"Max priority: {summary['max_priority']}")
Consumer State
# Check consumer status
print(f"Priority boost enabled: {consumer.priority_boost_enabled}")
print(f"Active consumers: {len(consumer.priority_consumer_manager.consumers)}")
print(f"Current subscription: {consumer.current_subscription}")
๐งช Testing
Run Priority Boost Tests
# Run comprehensive priority boost tests
python kafkaboost/tests/test_priority_boost_kafka.py
# Run specific test scenarios
python simple_priority_test.py
python fresh_consumer_test.py
Test Results
The test suite validates:
- โ Priority-based message routing
- โ Consumer group management
- โ Topic creation and management
- โ Dynamic consumer pausing/resuming
- โ Configuration updates
๐จ Troubleshooting
Common Issues
-
Priority Boost Not Enabled
# Check S3 configuration summary = consumer.get_config_summary() print(f"Priority boost: {summary['priority_boost_enabled']}")
-
Topics Not Created
# Manually create topics config_manager = KafkaConfigManager('localhost:9092', user_id='user123') config_manager.check_and_create_priority_topics()
-
Consumer Group Issues
# Use unique group IDs consumer = KafkaboostConsumer( bootstrap_servers=['localhost:9092'], topics=['orders'], group_id='unique_group_id', # Ensure uniqueness user_id='user123' )
Debug Mode
import logging
logging.basicConfig(level=logging.DEBUG)
# Enable debug logging for detailed information
consumer = KafkaboostConsumer(
bootstrap_servers=['localhost:9092'],
topics=['orders'],
user_id='user123'
)
๐ API Reference
KafkaboostConsumer
Constructor Parameters
bootstrap_servers: Kafka server address(es)topics: Topic(s) to consume fromgroup_id: Consumer group IDuser_id: User ID for S3 config lookup (enables priority boost)auto_offset_reset: Offset reset strategy ('earliest', 'latest', 'none')**kwargs: Additional KafkaConsumer parameters
Key Methods
poll(timeout_ms=1000, max_records=None): Poll for messagespoll_async(timeout_ms=1000, max_records=None): Async pollingrefresh_config(): Refresh configuration from S3get_config_summary(): Get configuration summaryclose(): Close consumer and cleanup
KafkaboostProducer
Constructor Parameters
bootstrap_servers: Kafka server address(es)user_id: User ID for S3 config lookup**kwargs: Additional KafkaProducer parameters
Key Methods
send(topic, value, priority=None): Send message with optional priorityclose(): Close producer
KafkaConfigManager
Constructor Parameters
bootstrap_servers: Kafka server address(es)user_id: User ID for S3 config lookup
Key Methods
check_and_create_priority_topics(): Create priority topicsget_config_summary(): Get configuration summaryfind_matching_topics(base_topics): Find priority topic variants
๐ Migration Guide
From Standard Kafka Consumer
# Before
from kafka import KafkaConsumer
consumer = KafkaConsumer('orders', bootstrap_servers=['localhost:9092'])
# After
from kafkaboost.consumer import KafkaboostConsumer
consumer = KafkaboostConsumer(
bootstrap_servers=['localhost:9092'],
topics=['orders'],
user_id='user123' # Enables priority boost
)
From Standard Kafka Producer
# Before
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
# After
from kafkaboost.producer import KafkaboostProducer
producer = KafkaboostProducer(
bootstrap_servers=['localhost:9092'],
user_id='user123' # Enables priority routing
)
๐ Best Practices
Topic Design
- Use descriptive base topic names
- Keep priority levels manageable (0-10 recommended)
- Ensure consistent naming across environments
Consumer Groups
- Use different group IDs for different priority requirements
- Consider separate consumers for different priority ranges
- Monitor consumer group rebalancing
Performance
- Priority boost mode is most effective with high message volumes
- Consider batch sizes for optimal throughput
- Monitor partition assignment and rebalancing
Error Handling
- Always close consumers in finally blocks
- Handle configuration refresh errors gracefully
- Monitor partition pausing/resuming for performance
๐ฆ Dependencies
kafka-python- Core Kafka functionalityboto3- S3 configuration managementasyncio- Async support (Python 3.7+)
๐ License
This project extends the existing kafkaboost library with priority-aware features while maintaining backward compatibility.
๐ค Contributing
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
๐ Support
For issues and questions:
- Check the troubleshooting section
- Review the test examples
- Open an issue on GitHub
KafkaBoost - Making Kafka priority-aware and production-ready! ๐
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 Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kafkaboost-0.1.0.tar.gz.
File metadata
- Download URL: kafkaboost-0.1.0.tar.gz
- Upload date:
- Size: 17.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9b1af80bbd0b366fde28ac1588866ccf68746e7ad205242160d6245d80f0927
|
|
| MD5 |
66f1356156891bd826eb9a6d2e73afec
|
|
| BLAKE2b-256 |
d2855e6f3bf67c98f33540f31d2bdc92cffba84472435759dc43ffe89196df3a
|
File details
Details for the file kafkaboost-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kafkaboost-0.1.0-py3-none-any.whl
- Upload date:
- Size: 93.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c879830d9bdc7203fa6554265aa07200006c98be166aa5de0921167e869251db
|
|
| MD5 |
25a22fb9e65fcc933810463c49d63417
|
|
| BLAKE2b-256 |
3ce6bdb0d73635a7a05ce1f2033859b15a13e304e6f309fff47bd36c5b3fbfa7
|