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};