#stage #tokio #ingestion #data-processing #pipelines

tokio_sky

使用 Rust Tokio 进行并发和多阶段数据摄取与数据处理

1 个稳定版本

1.0.0 2022年5月19日

#1796数据库接口

Apache-2.0

84KB
1.5K SLoC

TokioSky

使用 Rust+Tokio 构建并发和多阶段数据摄取与数据处理管道。TokioSky 允许开发者从不同的数据源,称为生产者,如 Apache Kafka 等,有效地消耗数据。受 elixir broadway 启发

功能

TokioSky 负担定义并发 GenStage 顶点,并提供一个简单的配置 API,该 API 自动定义并发生产者、并发处理,从而实现数据摄取和处理的效率和成本效益。它具有以下功能:

  • 生产者 - 数据管道的源头

  • 处理器 - 处理消息,也可以通过 dispatcher 分发到下一阶段

  • 批处理器 - 处理消息组,用于最后一阶段,没有下一阶段

  • 分发器 - 使用三种模式(RoundRobinBroadCastPartition)分发消息

  • 可定制 - 可以使用内置的 ProducerProcessorBatchProcessor,例如 Apache KafkaApache Pulsar 或编写自定义的 ProducerProcessorBatchProcessor

  • 批量处理 - 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_Xrun_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