use std::time::Duration;
use crate::auth::AuthConfig;
use crate::metadata::MetadataRecoveryStrategy;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum AcknowledgementMode {
#[default]
Implicit,
Explicit,
}
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AcknowledgeType {
Accept = 1,
Release = 2,
Reject = 3,
}
impl AcknowledgeType {
#[inline]
pub fn to_i8(self) -> i8 {
self as i8
}
}
#[non_exhaustive]
#[derive(Debug, Clone)]
pub struct ShareConsumerConfig {
pub(crate) bootstrap_servers: String,
pub(crate) group_id: String,
pub(crate) client_id: String,
pub(crate) acknowledgement_mode: AcknowledgementMode,
pub(crate) fetch_min_bytes: i32,
pub(crate) fetch_max_bytes: i32,
pub(crate) max_poll_records: i32,
pub(crate) max_records: i32,
pub(crate) batch_size: i32,
pub(crate) fetch_max_wait_ms: i32,
pub(crate) request_timeout: Duration,
pub(crate) session_timeout: Duration,
pub(crate) heartbeat_interval: Duration,
pub(crate) client_rack: Option<String>,
pub(crate) metadata_max_age: Duration,
pub(crate) metadata_recovery_strategy: MetadataRecoveryStrategy,
pub(crate) metadata_recovery_rebootstrap_trigger: Duration,
pub(crate) metadata_topic_cache_ttl: Option<Duration>,
pub(crate) auth: Option<AuthConfig>,
pub(crate) max_decompressed_size: usize,
#[cfg(feature = "socks5")]
pub(crate) proxy: Option<crate::network::ProxyConfig>,
}
impl Default for ShareConsumerConfig {
fn default() -> Self {
Self {
bootstrap_servers: String::new(),
group_id: String::new(),
client_id: "krafka".to_string(),
acknowledgement_mode: AcknowledgementMode::Implicit,
fetch_min_bytes: 1,
fetch_max_bytes: 52_428_800, max_poll_records: 500,
max_records: 5000,
batch_size: 500,
fetch_max_wait_ms: 500,
request_timeout: Duration::from_secs(30),
session_timeout: Duration::from_secs(45),
heartbeat_interval: Duration::from_secs(5),
client_rack: None,
metadata_max_age: Duration::from_secs(300),
metadata_recovery_strategy: MetadataRecoveryStrategy::Rebootstrap,
metadata_recovery_rebootstrap_trigger: Duration::from_secs(300),
metadata_topic_cache_ttl: Some(Duration::from_secs(300)),
auth: None,
max_decompressed_size: crate::protocol::RecordBatch::MAX_DECOMPRESSED_SIZE,
#[cfg(feature = "socks5")]
proxy: None,
}
}
}
impl ShareConsumerConfig {
#[inline]
pub fn bootstrap_servers(&self) -> &str {
&self.bootstrap_servers
}
#[inline]
pub fn group_id(&self) -> &str {
&self.group_id
}
#[inline]
pub fn client_id(&self) -> &str {
&self.client_id
}
#[inline]
pub fn acknowledgement_mode(&self) -> AcknowledgementMode {
self.acknowledgement_mode
}
#[inline]
pub fn session_timeout(&self) -> Duration {
self.session_timeout
}
#[inline]
pub fn heartbeat_interval(&self) -> Duration {
self.heartbeat_interval
}
}