4 releases (breaking)

0.5.0 Apr 24, 2024
0.3.0 Jul 11, 2023
0.2.0 Mar 25, 2023
0.1.0 Mar 2, 2023

#1175 in Concurrency

Download history 561/week @ 2024-08-20 515/week @ 2024-08-27 467/week @ 2024-09-03 461/week @ 2024-09-10 551/week @ 2024-09-17 576/week @ 2024-09-24 717/week @ 2024-10-01 515/week @ 2024-10-08 454/week @ 2024-10-15 489/week @ 2024-10-22 529/week @ 2024-10-29 577/week @ 2024-11-05 612/week @ 2024-11-12 648/week @ 2024-11-19 715/week @ 2024-11-26 605/week @ 2024-12-03

2,651 downloads per month
Used in 8 crates (2 directly)

MIT/Apache

94KB
2K SLoC

sea-streamer-stdio: Standard I/O Backend

This is the stdio backend implementation for SeaStreamer. It is designed to be connected together with unix pipes, enabling great flexibility when developing stream processors or processing data locally.

You can connect processors together with pipes: processor_a | processor_b.

You can also connect them asynchronously:

touch stream # set up an empty file
tail -f stream | processor_b # program b can be spawned anytime
processor_a >> stream # append to the file

You can also use cat to replay a file, but it runs from start to end as fast as possible then stops, which may or may not be the desired behavior.

You can write any valid UTF-8 string to stdin and each line will be considered a message. In addition, you can write some message meta in a simple format:

[timestamp | stream_key | sequence | shard_id] payload

Note: the square brackets are literal [ ].

The following are all valid:

a plain, raw message
[2022-01-01T00:00:00] { "payload": "anything" }
[2022-01-01T00:00:00.123 | my_topic] "a string payload"
[2022-01-01T00:00:00 | my-topic-2 | 123] ["array", "of", "values"]
[2022-01-01T00:00:00 | my-topic-2 | 123 | 4] { "payload": "anything" }
[my_topic] a string payload
[my_topic | 123] { "payload": "anything" }
[my_topic | 123 | 4] { "payload": "anything" }

The following are all invalid:

[Jan 1, 2022] { "payload": "anything" }
[2022-01-01T00:00:00] 12345

If no stream key is given, it will be assigned the name broadcast and sent to all consumers.

You can create consumers that subscribe to only a subset of the topics.

Consumers in the same ConsumerGroup will be load balanced (in a round-robin fashion), meaning you can spawn multiple async tasks to process messages in parallel.

Dependencies

~4–17MB
~229K SLoC