Skip to main content

crabka_client_consumer/
lib.rs

1//! Subscribe-style consumer client for Apache Kafka in Rust.
2//!
3//! Builds on `crabka-client-core` for transport; adds the classic
4//! consumer-group lifecycle (`JoinGroup` → `SyncGroup` → `Heartbeat` →
5//! `Fetch` → `OffsetCommit` → `LeaveGroup`) and a built-in heartbeat
6//! task.
7//!
8//! ## Quick start
9//!
10//! ```no_run
11//! use crabka_client_consumer::{AutoOffsetReset, Consumer};
12//! use std::time::Duration;
13//!
14//! # async fn run() -> Result<(), Box<dyn std::error::Error>> {
15//! let mut consumer = Consumer::builder()
16//!     .bootstrap("localhost:9092")
17//!     .group_id("my-group")
18//!     .client_id("my-app")
19//!     .auto_offset_reset(AutoOffsetReset::Earliest)
20//!     .subscribe(["my-topic".to_string()])
21//!     .build()
22//!     .await?;
23//!
24//! loop {
25//!     let records = consumer.poll(Duration::from_millis(500)).await?;
26//!     for _r in records {
27//!         // ... handle r ...
28//!     }
29//!     consumer.commit_sync().await?;
30//! }
31//! # }
32//! ```
33//!
34//! ## Share-group consumption
35//!
36//! ```no_run
37//! use crabka_client_consumer::{ShareAckMode, ShareAckType, ShareConsumer};
38//! use std::time::Duration;
39//!
40//! # async fn run() -> Result<(), Box<dyn std::error::Error>> {
41//! let mut consumer = ShareConsumer::builder()
42//!     .bootstrap("localhost:9092")
43//!     .group_id("share-workers")
44//!     .subscribe(["jobs".to_string()])
45//!     .ack_mode(ShareAckMode::Explicit)
46//!     .build()
47//!     .await?;
48//!
49//! let records = consumer.poll(Duration::from_secs(1)).await?;
50//! for record in &records {
51//!     consumer.acknowledge(record, ShareAckType::Accept)?;
52//! }
53//! consumer.commit().await?;
54//! # Ok(())
55//! # }
56//! ```
57//!
58//! ## Capabilities and boundaries
59//!
60//! This crate owns consumer-facing semantics: classic group membership,
61//! assignment, fetch/poll, offset commit, cooperative shutdown, and KIP-932
62//! share-group consumption. It intentionally does not duplicate admin-client
63//! surfaces such as `DescribeGroups`/`ListGroups`, and manual partition fetches
64//! remain available through the lower-level helpers in `crabka-client-core`.
65//! Transactional consume-process-produce workflows use this crate's
66//! [`ConsumerGroupMetadata`] together with `crabka-client-producer`'s
67//! `send_offsets_to_transaction` support.
68//!
69//! ## Cargo features
70//!
71//! None for now.
72
73#![doc(html_root_url = "https://docs.rs/crabka-client-consumer/0.3.5")]
74
75mod assignor;
76mod builder;
77mod commit;
78mod consumer;
79mod coordinator;
80mod error;
81mod group_metadata;
82mod offset_wire;
83mod poll;
84mod position;
85mod share;
86mod validate;
87
88pub use assignor::Assignor;
89pub use builder::{AutoOffsetReset, IsolationLevel};
90pub use consumer::{Consumer, ConsumerRecord};
91pub use error::ConsumerError;
92pub use group_metadata::ConsumerGroupMetadata;
93pub use share::{ShareAckMode, ShareAckType, ShareConsumer, ShareConsumerRecord};