pub struct PartitionConsumer<P = SpuPool> { /* private fields */ }
Expand description

An interface for consuming events from a particular partition

Implementations§

source§

impl<P> PartitionConsumer<P>where P: SpuDirectory,

source

pub fn new( topic: String, partition: PartitionId, pool: Arc<P>, metrics: Arc<ClientMetrics> ) -> Self

source

pub fn topic(&self) -> &str

Returns the name of the Topic that this consumer reads from

source

pub fn partition(&self) -> PartitionId

Returns the ID of the partition that this consumer reads from

source

pub fn metrics(&self) -> Arc<ClientMetrics>

Return a shared instance of ClientMetrics

source

pub async fn stream( &self, offset: Offset ) -> Result<impl Stream<Item = Result<Record, ErrorCode>>>

Continuously streams events from a particular offset in the consumer’s partition

Streaming is one of the two ways to consume events in Fluvio. It is a continuous request for new records arriving in a partition, beginning at a particular offset. You specify the starting point of the stream using an Offset and periodically receive events, either individually or in batches.

Note this uses ConsumerRecord instead of batches

If you want more fine-grained control over how records are streamed, check out the stream_with_config method.

Example
use futures::StreamExt;
let mut stream = consumer.stream(Offset::beginning()).await?;
while let Some(Ok(record)) = stream.next().await {
    let key_str = record.get_key().map(|key| key.as_utf8_lossy_string());
    let value_str = record.get_value().as_utf8_lossy_string();
    println!("Got event: key={:?}, value={value_str}", key_str);
}
source

pub async fn stream_with_config( &self, offset: Offset, config: ConsumerConfig ) -> Result<impl Stream<Item = Result<Record, ErrorCode>>>

Continuously streams events from a particular offset in the consumer’s partition

Most of the time, you shouldn’t need to use a custom ConsumerConfig. If you don’t know what these settings do, try checking out the simpler PartitionConsumer::stream method that uses the default streaming settings.

Streaming is one of the two ways to consume events in Fluvio. It is a continuous request for new records arriving in a partition, beginning at a particular offset. You specify the starting point of the stream using an Offset and a ConsumerConfig, and periodically receive events, either individually or in batches.

Example
use futures::StreamExt;
// Use a custom max_bytes value in the config
let fetch_config = ConsumerConfig::builder()
    .max_bytes(1000)
    .build()?;
let mut stream = consumer.stream_with_config(Offset::beginning(), fetch_config).await?;
while let Some(Ok(record)) = stream.next().await {
    let key_str = record.get_key().map(|key| key.as_utf8_lossy_string());
    let value_str = record.get_value().as_utf8_lossy_string();
    println!("Got record: key={:?}, value={}", key_str, value_str);
}
source

pub async fn stream_batches_with_config( &self, offset: Offset, config: ConsumerConfig ) -> Result<impl Stream<Item = Result<Batch, ErrorCode>>>

Continuously streams batches of messages, starting an offset in the consumer’s partition

use futures::StreamExt;
// Use a custom max_bytes value in the config
let fetch_config = ConsumerConfig::builder()
    .max_bytes(1000)
    .build()?;
let mut stream = consumer.stream_batches_with_config(Offset::beginning(), fetch_config).await?;
while let Some(Ok(batch)) = stream.next().await {
    for record in batch.records() {
        let key_str = record.key().map(|key| key.as_utf8_lossy_string());
        let value_str = record.value().as_utf8_lossy_string();
        println!("Got record: key={:?}, value={}", key_str, value_str);
    }
}

Auto Trait Implementations§

§

impl<P> RefUnwindSafe for PartitionConsumer<P>where P: RefUnwindSafe,

§

impl<P> Send for PartitionConsumer<P>where P: Send + Sync,

§

impl<P> Sync for PartitionConsumer<P>where P: Send + Sync,

§

impl<P> Unpin for PartitionConsumer<P>

§

impl<P> UnwindSafe for PartitionConsumer<P>where P: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> AsyncConnector for Twhere T: Send + Sync,