kafka_client
A pure Rust Kafka client library built on Tokio async runtime. Supports SASL authentication (PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI/Kerberos) and TLS encryption.
Features
- Pure Rust - No C bindings or external dependencies required
- Async/Await - Built on Tokio for modern async Rust
- SASL Authentication - Supports PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, and Kerberos (via GSSAPI)
- TLS Encryption - Secure connections with configurable TLS
- Layered Architecture - Clean separation between transport, protocol, and API layers
- High-Level API - Easy-to-use Producer, Consumer, and Admin interfaces
- Low-Level Access - Direct protocol access for advanced use cases
- Connection Pooling - Efficient broker connection management
- Metadata Caching - Automatic cluster metadata refresh
Installation
Add to your Cargo.toml:
[]
= "0.5"
Quick Start
Basic Connection
use Client;
let client = builder
.with_client_id
.build
.await?;
// Query cluster metadata
let brokers = client.metadata.get_all_brokers.await;
println!;
Producer
use ;
use Bytes;
let client = builder
.build
.await?;
// Default config
let producer = client.producer_default.await;
// Or with custom config
let producer = client.producer.await;
// Send messages
let record = new;
let metadata = producer.send.await?;
println!;
// Ensure all messages are delivered
producer.flush.await?;
Consumer
use ;
let client = builder
.build
.await?;
// Default group consumer
let mut consumer = client.consumer_default;
// Or with custom config
let mut consumer = client.consumer;
consumer.subscribe.await?;
// Poll for messages
let records = consumer.poll_timeout.await?;
for record in records
Admin
use ;
let client = builder
.build
.await?;
let admin = client.admin;
// Create a topic
admin.create_topic.await?;
// List all topics
let topics = admin.list_topics.await?;
for t in &topics
// Describe cluster
let info = admin.describe_cluster.await?;
println!;
SASL Authentication
use ;
// PLAIN authentication
let client = builder
.with_sasl
.build
.await?;
// SCRAM-SHA-256 authentication
let client = builder
.with_sasl
.build
.await?;
Kerberos (SASL/GSSAPI) Authentication
Kafka calls this mechanism "GSSAPI" on the wire, but it is backed by Kerberos — the client acquires
a service ticket from a KDC and exchanges it with the broker via the GSS-API framework.
Uses a pure Rust Kerberos implementation — no system libkrb5 needed.
use ;
let client = builder
.with_kerberos
.with_kdc
.with_broker_hostname
.build
.await?;
Supported Kerberos encryption types: AES-128/256-CTS-HMAC-SHA1-96 (RFC 3962) and AES-128/256-CTS-HMAC-SHA256/384 (RFC 8009).
TLS Encryption
use ;
let tls = TlsConfig ;
// TLS only
let client = builder
.with_tls_config
.build
.await?;
// TLS + SASL
let client = builder
.with_sasl_tls
.build
.await?;
Architecture
The library uses a layered architecture for clean separation of concerns:
┌─────────────────────────────────────────┐
│ High-Level API Layer │
│ (Client, Producer, Consumer, Admin) │
├─────────────────────────────────────────┤
│ Cluster Layer │
│ (ClusterClient, BrokerManager, │
│ MetadataCache) [crate-internal] │
├─────────────────────────────────────────┤
│ Connection Layer │
│ (Connection, ConnectionPool) │
├─────────────────────────────────────────┤
│ Protocol Layer │
│ (Wire Codec, Request/Response) │
├─────────────────────────────────────────┤
│ Transport Layer │
│ (TCP, TLS, SASL) │
└─────────────────────────────────────────┘
Examples
See the examples directory for complete working examples:
basic_connect.rs- Simple connection and metadata queryproduce_consume.rs- Complete produce/consume workflowsasl_auth.rs- SASL authentication with different mechanismstls_connect.rs- TLS encryption and TLS+SASLadmin_operations.rs- Topic management operationsraw_connection.rs- Low-level Connection APIkerberos.rs- Kerberos authentication via GSSAPI (requires KDC)
Run an example:
# Basic connection
# SASL authentication
SASL_MECHANISM=SCRAM-SHA-256 \
SASL_USERNAME=user \
SASL_PASSWORD=pass \
# TLS connection
KAFKA_DOMAIN=kafka.example.com \
Documentation
Requirements
- Rust 1.92 or later
- Kafka 1.0.0 or later (3-broker tests verified on Kafka 4.x)
- GSSAPI/Kerberos requires SaslHandshake v1 (Kafka 1.0.0+). Pre-1.0.0 "bare TCP" GSSAPI and SaslHandshake v0 are not supported.
Testing
Integration tests require a running Kafka broker:
# Using Docker
# Run tests
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Author
- zzzdong - GitHub - kuwater@163.com