Skip to main content

krabka_client_consumer/
lib.rs

1//! Subscribe-style consumer client for Apache Kafka in Rust.
2//!
3//! This crate builds on `krabka-client-core` for transport. It 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 krabka_client_consumer::{AutoOffsetReset, Consumer};
12//! use krabka_units::millis;
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(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 krabka_client_consumer::{ShareAckMode, ShareAckType, ShareConsumer};
38//! use krabka_units::secs;
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(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 does not duplicate admin-client surfaces such as
63//! `DescribeGroups`/`ListGroups`. Manual partition fetches stay available
64//! through the lower-level helpers in `krabka-client-core`. Transactional
65//! consume-process-produce workflows use this crate's
66//! [`ConsumerGroupMetadata`] together with `krabka-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/krabka-client-consumer/0.7.1")]
74
75mod assignment;
76mod assignor;
77#[cfg(test)]
78mod authentication_failure_tests;
79mod builder;
80mod commit;
81mod consumer;
82mod consumer_group;
83mod control;
84mod coordinator;
85mod error;
86mod fetch_buffer;
87mod fetch_session;
88mod group_metadata;
89#[cfg(test)]
90mod lock_order_model;
91mod offset_wire;
92mod partition_state;
93mod poll;
94mod position;
95mod queries;
96mod rebalance_listener;
97mod seek;
98mod share;
99mod subscription;
100#[cfg(test)]
101pub(crate) mod test_support;
102mod validate;
103
104pub use assignor::Assignor;
105pub use builder::{AutoOffsetReset, IsolationLevel};
106pub use commit::{OffsetAndMetadata, OffsetCommitCallback};
107pub use consumer::{
108    Consumer, ConsumerFetchMaxBytes, ConsumerFetchPartitionMaxBytes, ConsumerLeaveGroupTimeout,
109    ConsumerRecord, ConsumerRetryPolicy, ConsumerSubscriptionMetadataRefreshInterval,
110    DEFAULT_CONSUMER_DEFAULT_API_TIMEOUT, DEFAULT_CONSUMER_FETCH_MAX_WAIT,
111    DEFAULT_CONSUMER_LEAVE_GROUP_TIMEOUT, DEFAULT_CONSUMER_MAX_POLL_INTERVAL,
112    DEFAULT_CONSUMER_MAX_POLL_RECORDS, DEFAULT_CONSUMER_METADATA_MAX_AGE,
113    DEFAULT_CONSUMER_SUBSCRIPTION_METADATA_REFRESH_INTERVAL, GroupMembershipOperation, Header,
114    TimestampType,
115};
116pub use consumer_group::GroupProtocol;
117pub use control::{CloseOptions, DEFAULT_CONSUMER_CLOSE_TIMEOUT, WakeupHandle};
118pub use error::ConsumerError;
119pub use group_metadata::ConsumerGroupMetadata;
120pub use queries::{Node, OffsetAndTimestamp, PartitionInfo};
121pub use rebalance_listener::{ConsumerRebalanceListener, RebalanceListenerError};
122pub use share::{
123    DEFAULT_SHARE_CONSUMER_FETCH_MAX, DEFAULT_SHARE_CONSUMER_FETCH_MAX_RECORDS,
124    DEFAULT_SHARE_CONSUMER_FETCH_MIN, DEFAULT_SHARE_CONSUMER_LEAVE_HEARTBEAT_TIMEOUT, ShareAckMode,
125    ShareAckType, ShareAcquireMode, ShareConsumer, ShareConsumerFetchMaxBytes,
126    ShareConsumerFetchMaxRecords, ShareConsumerFetchMinBytes, ShareConsumerLeaveHeartbeatTimeout,
127    ShareConsumerRecord,
128};
129pub use subscription::TopicPattern;