pub struct BoundedOutOfOrdernessWatermark { /* private fields */ }Expand description
Bounded out-of-orderness watermark generator
This generator tracks the maximum timestamp seen and generates watermarks by subtracting a fixed delay. It handles per-partition watermarks and can detect idle partitions.
§Example
use processor::watermark::{BoundedOutOfOrdernessWatermark, WatermarkGenerator};
use std::time::Duration;
let mut generator = BoundedOutOfOrdernessWatermark::new(
Duration::from_secs(5),
None,
);
// Process events
generator.on_event(1000, 0);
generator.on_event(2000, 0);
if let Some(wm) = generator.on_event(3000, 0) {
// Watermark at 3000 - 5000 = -2000 (clamped to min)
}Implementations§
Source§impl BoundedOutOfOrdernessWatermark
impl BoundedOutOfOrdernessWatermark
Sourcepub fn new(
max_out_of_orderness: Duration,
idle_timeout: Option<Duration>,
) -> Self
pub fn new( max_out_of_orderness: Duration, idle_timeout: Option<Duration>, ) -> Self
Creates a new bounded out-of-orderness watermark generator
§Arguments
max_out_of_orderness- The maximum allowed delay for late eventsidle_timeout- Optional timeout for detecting idle partitions
Sourcepub fn with_config(config: BoundedOutOfOrdernessConfig) -> Self
pub fn with_config(config: BoundedOutOfOrdernessConfig) -> Self
Creates a new watermark generator with custom configuration
Sourcepub fn active_partitions(&self) -> Vec<u32>
pub fn active_partitions(&self) -> Vec<u32>
Gets all active partitions (non-idle)
Sourcepub fn idle_partitions(&self) -> Vec<u32>
pub fn idle_partitions(&self) -> Vec<u32>
Gets all idle partitions
Sourcepub fn is_late_event(&self, timestamp: i64) -> bool
pub fn is_late_event(&self, timestamp: i64) -> bool
Checks if an event is late based on the current watermark
Sourcepub fn get_lateness(&self, timestamp: i64) -> i64
pub fn get_lateness(&self, timestamp: i64) -> i64
Gets the lateness of an event (how late it is compared to the watermark)
Returns 0 if the event is not late
Trait Implementations§
Source§impl WatermarkGenerator for BoundedOutOfOrdernessWatermark
impl WatermarkGenerator for BoundedOutOfOrdernessWatermark
Source§fn on_event(&mut self, timestamp: i64, partition: u32) -> Option<Watermark>
fn on_event(&mut self, timestamp: i64, partition: u32) -> Option<Watermark>
Called when a new event arrives Read more
Source§fn on_periodic_check(&mut self) -> Option<Watermark>
fn on_periodic_check(&mut self) -> Option<Watermark>
Called periodically to check if a watermark should be emitted Read more
Source§fn current_watermark(&self) -> Watermark
fn current_watermark(&self) -> Watermark
Gets the current watermark without advancing it
Auto Trait Implementations§
impl !RefUnwindSafe for BoundedOutOfOrdernessWatermark
impl Freeze for BoundedOutOfOrdernessWatermark
impl Send for BoundedOutOfOrdernessWatermark
impl Sync for BoundedOutOfOrdernessWatermark
impl Unpin for BoundedOutOfOrdernessWatermark
impl UnsafeUnpin for BoundedOutOfOrdernessWatermark
impl UnwindSafe for BoundedOutOfOrdernessWatermark
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.