Tiny Kafka - Lightweight Kafka Client in Rust
A lightweight, async Rust implementation of a Kafka producer and consumer. This library provides a simple, reliable interface for interacting with Apache Kafka, with built-in timeout handling and connection retries.
Features
- Async/Await Support: Built on tokio for high-performance asynchronous operations
- Timeout Handling: Configurable timeouts for all operations with sensible defaults
- Connection Retries: Automatic retry logic for failed connections with exponential backoff
- Error Handling: Comprehensive error handling with detailed error types
- Simple API: Easy-to-use interface for both producer and consumer
- Zero-Copy: Efficient message handling with minimal memory overhead
- Type Safety: Strong Rust type system ensuring runtime safety
- Logging: Integrated tracing support for debugging and monitoring
Prerequisites
- Rust: Rust 1.70.0 or higher
- Kafka: A running Kafka broker (default: localhost:9092)
Installation
Add this to your Cargo.toml:
[]
= "1.0.6"
= { = "1.0", = ["full"] }
Quick Start
Consumer Example
use KafkaConsumer;
use tokio;
async
Producer Example
use KafkaProducer;
async
Configuration
Consumer Configuration
const RESPONSE_TIMEOUT: Duration = from_secs; // Operation timeout
const CONNECTION_TIMEOUT: Duration = from_secs; // Initial connection timeout
Producer Configuration
The producer supports various configuration options including:
- Batch size
- Compression
- Acknowledgment level
- Retry settings
Error Handling
The library provides detailed error types for different scenarios:
ConnectionError: Failed to establish connectionTimeoutError: Operation exceeded configured timeoutProtocolError: Kafka protocol-related errorsSerializationError: Message serialization failures
Performance Considerations
- Uses zero-copy operations where possible
- Efficient buffer management with
BytesMut - Configurable batch sizes for optimal throughput
- Connection pooling for better resource utilization
Testing
Run the test suite:
For integration tests with a running Kafka instance:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Development Setup
- Clone the repository
- Install Rust (1.70.0 or higher)
- Install Docker and Docker Compose (for running integration tests)
- Run
docker-compose up -dto start Kafka - Run tests with
cargo test
Guidelines
- Write clear commit messages
- Add tests for new features
- Update documentation as needed
- Follow Rust best practices and idioms
License
This project is licensed under the MIT License - see the LICENSE file for details.