74 releases

0.21.7 Mar 4, 2024
0.21.3 Nov 24, 2023
0.20.0 Jul 29, 2023
0.18.0 Mar 31, 2023
0.2.3 Nov 11, 2020

#80 in Database interfaces

Download history 44/week @ 2023-12-22 36/week @ 2023-12-29 106/week @ 2024-01-05 281/week @ 2024-01-12 64/week @ 2024-01-19 153/week @ 2024-01-26 131/week @ 2024-02-02 109/week @ 2024-02-09 181/week @ 2024-02-16 240/week @ 2024-02-23 239/week @ 2024-03-01 207/week @ 2024-03-08 96/week @ 2024-03-15 62/week @ 2024-03-22 270/week @ 2024-03-29 140/week @ 2024-04-05

598 downloads per month
Used in 4 crates

Apache-2.0

800KB
17K SLoC

CI Status CD Status fluvio Crates.io version Fluvio Rust documentation Fluvio dependency status Fluvio Discord

What's Fluvio?

Fluvio is a programmable data streaming platform written in Rust. With Fluvio you can create performant real time applications that scale.

Read more about Fluvio in the official website.

Getting Started

Let's write a very simple solution with Fluvio, in the following demostration we will create a topic using the Fluvio CLI and then we wisll produce some records on this topic. Finally these records will be consumed from the topic and printed to the stdout.

  1. Install Fluvio CLI if you havent already

  2. Create a new topic using the CLI

fluvio topic create "echo-test"
  1. Create a new cargo project and install fluvio, futures and async-std
cargo add fluvio
cargo add futures
cargo add async-std --features attributes
  1. Copy and paste the following snippet into your src/main.rs
use std::time::Duration;

use fluvio::{Offset, RecordKey};
use futures::StreamExt;

const TOPIC: &str = "echo-test";
const MAX_RECORDS: u8 = 10;

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let producer = fluvio::producer(TOPIC).await?;
    let consumer = fluvio::consumer(TOPIC, 0).await?;
    let mut consumed_records: u8 = 0;

    for i in 0..10 {
        producer.send(RecordKey::NULL, format!("Hello from Fluvio {}!", i)).await?;
        println!("[PRODUCER] sent record {}", i);
        async_std::task::sleep(Duration::from_secs(1)).await;
    }

    // Fluvio batches records by default, call flush() when done producing
    // to ensure all records are sent
    producer.flush().await?;

    let mut stream = consumer.stream(Offset::beginning()).await?;

    while let Some(Ok(record)) = stream.next().await {
        let value_str = record.get_value().as_utf8_lossy_string();

        println!("[CONSUMER] Got record: {}", value_str);
        consumed_records += 1;

        if consumed_records >= MAX_RECORDS {
            break;
        }
    }

    Ok(())
}
  1. Run cargo run and expect the following output
[PRODUCER] sent record 0
[PRODUCER] sent record 1
[PRODUCER] sent record 2
[PRODUCER] sent record 3
[PRODUCER] sent record 4
[PRODUCER] sent record 5
[PRODUCER] sent record 6
[PRODUCER] sent record 7
[PRODUCER] sent record 8
[PRODUCER] sent record 9
[CONSUMER] Got record: Hello, Fluvio 0!
[CONSUMER] Got record: Hello, Fluvio 1!
[CONSUMER] Got record: Hello, Fluvio 2!
[CONSUMER] Got record: Hello, Fluvio 3!
[CONSUMER] Got record: Hello, Fluvio 4!
[CONSUMER] Got record: Hello, Fluvio 5!
[CONSUMER] Got record: Hello, Fluvio 6!
[CONSUMER] Got record: Hello, Fluvio 7!
[CONSUMER] Got record: Hello, Fluvio 8!
[CONSUMER] Got record: Hello, Fluvio 9!
  1. Clean Up
fluvio topic delete echo-test
topic "echo-test" deleted

Learn More

  • Read on tutorials to get the most from Fluvio and InfinyOn Cloud to scale your streaming solution.

  • You can use Fluvio to send or receive records from different sources using Connectors.

  • If you want to filter or transform records on the fly read more about SmartModules.

Dependencies

~14–33MB
~513K SLoC