use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum StreamsAssignorKind {
#[default]
Auto,
Sticky,
HighlyAvailable,
}
#[derive(Debug, Clone)]
pub struct StreamsGroupConfig {
pub enable: bool,
pub session_timeout: Duration,
pub heartbeat_interval: Duration,
pub min_session_timeout: Duration,
pub max_session_timeout: Duration,
pub min_heartbeat_interval: Duration,
pub max_heartbeat_interval: Duration,
pub max_groups: usize,
pub max_size: usize,
pub num_standby_replicas: i32,
pub num_warmup_replicas: i32,
pub acceptable_recovery_lag: i64,
pub task_offset_interval: Duration,
pub assignor: StreamsAssignorKind,
}
impl Default for StreamsGroupConfig {
fn default() -> Self {
Self {
enable: true,
session_timeout: Duration::from_secs(45),
heartbeat_interval: Duration::from_secs(5),
min_session_timeout: Duration::from_secs(45),
max_session_timeout: Duration::from_mins(1),
min_heartbeat_interval: Duration::from_secs(5),
max_heartbeat_interval: Duration::from_secs(15),
max_groups: 0,
max_size: 200,
num_standby_replicas: 0,
num_warmup_replicas: 2,
acceptable_recovery_lag: 10_000,
task_offset_interval: Duration::from_secs(30),
assignor: StreamsAssignorKind::Auto,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use assert2::assert;
#[test]
fn defaults_are_kafka_ga() {
let c = StreamsGroupConfig::default();
assert!(c.enable);
assert!(c.heartbeat_interval == Duration::from_secs(5));
assert!(c.session_timeout == Duration::from_secs(45));
assert!(c.num_standby_replicas == 0);
assert!(c.num_warmup_replicas == 2);
assert!(c.acceptable_recovery_lag == 10_000);
assert!(c.assignor == StreamsAssignorKind::Auto);
}
}