1 个稳定版本
1.0.0 | 2022年5月19日 |
---|
#1796 在 数据库接口
84KB
1.5K SLoC
TokioSky
使用 Rust+Tokio 构建并发和多阶段数据摄取与数据处理管道。TokioSky 允许开发者从不同的数据源,称为生产者,如 Apache Kafka 等,有效地消耗数据。受 elixir broadway 启发
功能
TokioSky 负担定义并发 GenStage 顶点,并提供一个简单的配置 API,该 API 自动定义并发生产者、并发处理,从而实现数据摄取和处理的效率和成本效益。它具有以下功能:
-
生产者 - 数据管道的源头
-
处理器 - 处理消息,也可以通过
dispatcher
分发到下一阶段 -
批处理器 - 处理消息组,用于最后一阶段,没有下一阶段
-
分发器 - 使用三种模式(
RoundRobin
、BroadCast
、Partition
)分发消息 -
可定制 - 可以使用内置的
Producer
、Processor
、BatchProcessor
,例如 Apache Kafka、Apache Pulsar 或编写自定义的Producer
、Processor
、BatchProcessor
-
批量处理 - TokioSky 提供了内置的批量处理,允许您根据大小和/或时间对消息进行分组。这在像 Amazon SQS 这样的系统中很重要,其中批量处理是消耗消息在时间和成本方面最高效的方式。例如,如果处理器必须检查数据库连接以插入每个插入操作的记录,那就非常低效,尤其是如果我们正在处理大量的插入。幸运的是,使用 TokioSky,我们可以使用这种技术,即分组操作为批量,也称为分区。请参阅 示例
-
动态批量处理 - TokioSky 允许开发者在自定义标准上批量处理消息。例如,如果您的管道需要根据用户_id、电子邮件地址等构建批次,请参阅 示例
-
订单和分区 - TokioSky 允许开发者跨工作员分区消息,保证同一分区内的消息按顺序处理。例如,如果您想保证与特定用户_id 相关的所有事件按顺序处理,而不是并发处理,可以使用带
Partition
模式选项的 Dispatcher。请参阅示例。 -
数据收集器 - 当您的应用的源
Producer
是 Web 服务器,并且需要从客户端请求中吸收数据时,可以使用 'Collector' 作为Producer
,它异步吸收数据,然后将其馈送到管道中。请参阅示例。 -
优雅关闭 - 首先终止 Producers,等待所有处理器任务完成,然后关闭。
-
拓扑结构 - 创建并同步组件。
示例
完整的示例请参阅链接。
解释
-
工厂 - 实例工厂
-
并发 - 创建多个实例(用于并行处理)
-
路由器 - 由调度器用于路由消息(
RoundRobin
||BroadCast
||Partition
) -
producer_buffer_pool - 产生器内部使用的缓冲区,用于提高吞吐量
-
run_topology - TokioSky 总是有一个生产者层,至少有一个处理层,最多五个处理层,以及一个可选的层
batcher
,用于创建和同步组件,必须使用run_topology_X
或run_topology_X_with_batcher
注意
-
Producer.dispatcher 不能是
Partition
模式 -
如果处理器没有下一阶段通道,则必须返回
ProcResult::Continue
,除非处理器(跳过)该消息 -
所有 内置处理器 如果有下一阶段,调度器不得是分区模式
Crates.io
tokio_sky = 1.0.0
作者
- DanyalMh
许可证
根据 Apache 许可证 2.0 版(“许可证”);除非遵守许可证规定或书面同意,否则不得使用此文件。您可以在https://www.apache.org/licenses/LICENSE-2.0 获取许可证副本。
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。
依赖项
~3–16MB
~206K SLoC