pub struct Source<T: Record> { /* private fields */ }Expand description
A streaming data source.
Sources are the entry point for data into a streaming pipeline. They provide a type-safe interface for pushing records and control signals (watermarks).
§Thread Safety
Sources can be cloned to create multiple producers. The first clone triggers an automatic upgrade from SPSC to MPSC mode.
§Example
let (source, sink) = streaming::create::<MyEvent>(config);
// Single producer (SPSC mode)
source.push(event1)?;
// Clone for multiple producers (MPSC mode)
let source2 = source.clone();
std::thread::spawn(move || {
source2.push(event2)?;
});Implementations§
Source§impl<T: Record> Source<T>
impl<T: Record> Source<T>
Sourcepub fn push(&self, record: T) -> Result<(), StreamingError>
pub fn push(&self, record: T) -> Result<(), StreamingError>
Pushes a record to the source, blocking if necessary.
§Errors
Returns StreamingError::ChannelClosed if the sink has been dropped.
Returns StreamingError::ChannelFull if backpressure strategy is Reject.
Sourcepub fn try_push(&self, record: T) -> Result<(), TryPushError<T>>
pub fn try_push(&self, record: T) -> Result<(), TryPushError<T>>
Tries to push a record without blocking.
§Errors
Returns TryPushError containing the record if the push failed.
Sourcepub fn push_batch(&self, records: &[T]) -> usizewhere
T: Clone,
pub fn push_batch(&self, records: &[T]) -> usizewhere
T: Clone,
Pushes multiple records, returning the number successfully pushed.
Stops at the first failure. Requires Clone because records are cloned
before being sent.
§Performance Warning
This method clones each record. For zero-clone batch insertion,
use push_batch_drain which takes ownership
via an iterator.
Sourcepub fn push_batch_drain<I>(&self, records: I) -> usizewhere
I: IntoIterator<Item = T>,
pub fn push_batch_drain<I>(&self, records: I) -> usizewhere
I: IntoIterator<Item = T>,
Sourcepub fn push_arrow(&self, batch: RecordBatch) -> Result<(), StreamingError>
pub fn push_arrow(&self, batch: RecordBatch) -> Result<(), StreamingError>
Pushes an Arrow RecordBatch directly.
This is more efficient than pushing individual records when you already have data in Arrow format.
§Errors
Returns StreamingError::SchemaMismatch if the batch schema doesn’t match.
Returns StreamingError::ChannelClosed if the sink has been dropped.
Sourcepub fn watermark(&self, timestamp: i64)
pub fn watermark(&self, timestamp: i64)
Emits a watermark timestamp.
Watermarks signal that no events with timestamps less than or equal to this value will arrive in the future. This enables window triggers and garbage collection.
Watermarks are monotonically increasing - if a lower timestamp is passed, it will be ignored.
Sourcepub fn current_watermark(&self) -> i64
pub fn current_watermark(&self) -> i64
Returns the current watermark value.
Sourcepub fn mode(&self) -> ChannelMode
pub fn mode(&self) -> ChannelMode
Returns the channel mode.
Sourcepub fn sequence_counter(&self) -> Arc<AtomicU64>
pub fn sequence_counter(&self) -> Arc<AtomicU64>
Returns the shared sequence counter for checkpoint registration.
Sourcepub fn watermark_atomic(&self) -> Arc<AtomicI64>
pub fn watermark_atomic(&self) -> Arc<AtomicI64>
Returns the shared watermark atomic for checkpoint registration.
Trait Implementations§
Source§impl<T: Record> Clone for Source<T>
impl<T: Record> Clone for Source<T>
Source§fn clone(&self) -> Self
fn clone(&self) -> Self
Clones the source, triggering automatic SPSC → MPSC upgrade.
§Performance Warning
This method allocates a new Arc<SourceInner>. The first clone also
triggers an upgrade from SPSC to MPSC mode, which adds synchronization
overhead to all subsequent push operations.
For maximum performance with a single producer, avoid cloning the source. Use clones only when you genuinely need multiple producer threads.
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<T> Freeze for Source<T>
impl<T> !RefUnwindSafe for Source<T>
impl<T> Send for Source<T>
impl<T> Sync for Source<T>
impl<T> Unpin for Source<T>
impl<T> !UnwindSafe for Source<T>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.