13 个版本
0.5.2 | 2024年7月6日 |
---|---|
0.5.1 | 2024年4月24日 |
0.3.9 | 2023年12月4日 |
0.3.8 | 2023年11月17日 |
0.3.0 | 2023年7月11日 |
#938 在 并发 中排名
每月 1,770 次下载
用于 8 个 Crates (直接使用 4 个)
295KB
7K SLoC
sea-streamer-file
: 文件后端
这与 sea-streamer-stdio
非常相似,但区别在于 SeaStreamerStdio 在实时工作,而 sea-streamer-file
则在实时和回放中工作。这意味着 SeaStreamerFile 有能力遍历 .ss
(sea-stream) 文件,并搜索/回滚到特定的时间戳/偏移量。
此外,Stdio 只能与 UTF-8 文本数据一起工作,而 File 可以处理二进制数据。在 Stdio 中,每个进程只有一个 Streamer。在 File 中,同一个进程中可以有多个独立的 Streamer。毕竟,Streamer 只是一个文件。
SeaStreamerFile 的基本思路类似于 tail -f
,每行一条消息,带有自定义的消息帧携带二进制有效负载。有趣的是,在 SeaStreamer 中,我们不使用分隔符来分隔消息。这消除了编码/解码消息有效负载的开销。但这给文件格式增加了复杂性。
SeaStreamerFile 格式是为了高效快进和搜索而设计的。这是通过在文件中放置固定间隔的信标数组来实现的。信标包含流的摘要,因此它像一个原地索引。它还允许读者与消息边界对齐。要了解更多关于文件格式的信息,请阅读 src/format.rs
。
在此基础上,还有 SeaStreamer 的高层多生产者、多消费者流语义,类似于其他 SeaStreamer 后端的行为。特别是,负载均衡行为与 Stdio 相同,即轮询。
解码器
我们提供了一个小型实用程序来解码 .ss
文件
cargo install sea-streamer-file --features=executables --bin ss-decode
# local version
alias ss-decode='cargo run --package sea-streamer-file --features=executables --bin ss-decode'
ss-decode -- --file <file> --format <format>
提示:将其管道传输到 less
以进行分页
ss-decode --file mystream.ss | less
示例 log
格式
# header
[2023-06-05T13:55:53.001 | hello | 1 | 0] message-1
# beacon
示例 ndjson
格式
/* header */
{"header":{"stream_key":"hello","shard_id":0,"sequence":1,"timestamp":"2023-06-05T13:55:53.001"},"payload":"message-1"}
/* beacon */
还有一个在sea-streamer-file-reader
下的Typescript实现。
待办事项
- 可恢复:目前尚未实现。可能的一种实现方式是将数据提交到本地的SQLite数据库中。
- 分片:目前它只流式传输到分片零。
- 验证:一个用于验证和修复SeaStreamer二进制文件的实用程序。
依赖项
~6–22MB
~287K SLoC