Skip to content
项目

arkflow-rs/arkflow has 1,315 GitHub stars and 51 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-09 02:19 UTC. Last push 2026-11-01.

这些数字如何统计

High performance Rust stream processing engine seamlessly integrates AI capabilities, providing powerful real-time data processing and intelligent analysis.

可以做什么

  • High Performance: Built on Rust and Tokio async runtime, offering excellent performance and low latency
  • Durable Delivery: Opt-in per-stream WAL durability for at-least-once delivery, with optional exactly-once for transactional sinks
  • Multiple Data Sources: Support for Kafka, MQTT, HTTP, files, SQL databases, and many other input/output sources
  • Powerful Processing: Built-in SQL queries, Python UDFs, JSON processing, Protobuf encoding/decoding, batch processing, and VRL

实测星标增长

24小时
0
7天
0
15天
更新延迟
1个月
更新延迟

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README_zh.md

原文

ArkFlow

English | 中文

Rust License

文档 | 0.5 发布版文档

ArkFlow - High-performance rust stream processing engine | Product Hunt

高性能Rust流处理引擎,无缝集成AI能力,提供强大的实时数据处理与智能分析。 它不仅支持多种输入/输出源和处理器,更集成了 LLM、向量嵌入与向量检索等 AI 服务,实现流式数据和推理、异常检测和复杂事件处理。

CNCF 云原生技术全景图

   

ArkFlow 已收录在 CNCF Cloud Native 云原生技术全景图中。

特性

  • 高性能:基于Rust和Tokio异步运行时构建,提供卓越的性能和低延迟
  • 可靠投递:可选的每流 WAL 持久化提供 at-least-once 投递,并可为事务型 sink 启用 exactly-once
  • 多种数据源:支持Kafka、MQTT、HTTP、文件、SQL 数据库等多种输入输出源
  • 强大的处理能力:内置SQL查询、Python UDF、JSON处理、Protobuf编解码、批处理和 VRL 等处理器
  • 流编解码:JSON 与 Protobuf 编解码,以及 Debezium CDC 信封和 Confluent Schema Registry 线格式
  • 控制面:可选的 Hub 与 Web 控制台,可作为一个集群对多个 ArkFlow 计算节点进行观测、配置与运维
  • 可扩展:模块化设计,易于扩展新的输入、缓冲区、输出和处理器组件

安装

从源码构建

# 克隆仓库
git clone https://github.com/arkflow-rs/arkflow.git
cd arkflow

# 构建项目
cargo build --release

# 运行测试
cargo test

快速开始

  1. 创建配置文件 config.yaml:
logging:
  level: info
streams:
  - input:
      type: "generate"
      context: '{ "timestamp": 1625000000000, "value": 10, "sensor": "temp_1" }'
      interval: 1s
      batch_size: 10

    pipeline:
      thread_num: 4
      processors:
        - type: "json_to_arrow"
        - type: "sql"
          query: "SELECT * FROM flow WHERE value >= 10"

    output:
      type: "stdout"
    error_output:
      type: "stdout"
  1. 运行ArkFlow:
./target/release/arkflow --config config.yaml

配置说明

ArkFlow使用YAML格式的配置文件,支持以下主要配置项:

顶级配置

logging:
  level: info  # 日志级别:debug, info, warn, error

streams: # 流定义列表
  - input:      # 输入配置
    # ...
    pipeline:   # 处理管道配置
    # ...
    output:     # 输出配置
    # ...
    error_output: # 错误输出配置
    # ...
    buffer:     # 缓冲配置
    # ...

输入组件

ArkFlow支持多种输入源:

  • Kafka (kafka):从Kafka主题读取数据
  • MQTT (mqtt):从MQTT主题订阅消息
  • HTTP (http):通过HTTP接收数据
  • 文件 (file):从文件(CSV、JSON、Parquet、Avro、Arrow)读取数据,支持云存储
  • 生成器 (generate):生成测试数据
  • SQL (sql):从 SQL 数据库(MySQL、PostgreSQL、SQLite)查询数据
  • NATS (nats):订阅来自 NATS 主题的消息,支持 JetStream
  • Pulsar (pulsar):订阅来自 Pulsar 主题的消息
  • Redis (redis):订阅来自 Redis 流、列表或发布/订阅频道的消息
  • WebSocket (websocket):订阅来自 WebSocket 连接的消息
  • Modbus (modbus):从 Modbus 设备读取数据
  • 内存 (memory):用于测试的内存数据源
  • 多输入 (multiple_inputs):将多个输入流合并到一个管道

示例:

input:
  type: kafka
  brokers:
    - localhost:9092
  topics:
    - test-topic
  consumer_group: test-group
  client_id: arkflow
  start_from_latest: true

处理器

ArkFlow提供多种数据处理器:

  • JSON (json_to_arrow / arrow_to_json):JSON数据处理和转换
  • SQL (sql):使用SQL查询处理数据
  • Protobuf (arrow_to_protobuf / protobuf_to_arrow):Protobuf编解码
  • 批处理 (batch):将消息批量处理
  • VRL (vrl):使用VRL进行处理数据
  • Python (python):对每个批次运行用户自定义的 Python 函数
  • Embedding (embedding):通过 OpenAI 兼容 API 批量向量化文本列并追加向量列
  • LLM (llm):以有界并发将每行文本发送到 OpenAI 兼容对话补全 API 并追加补全列
  • Vector Search (vector_search):在 Qdrant 集合中检索每行向量的 top-k 近邻并以 JSON 追加匹配结果
  • Milvus Search (milvus_search):以单次批量请求在 Milvus 集合中检索每行向量的 top-k 近邻
  • pgvector Search (pgvector_search):在启用了 pgvector 扩展的 PostgreSQL 表中检索每行向量的 top-k 近邻
  • Lookup (lookup):用外部维表服务解析的列 enrich 每一行,带 TTL 缓存与有界保序并发

示例:

pipeline:
  thread_num: 4
  processors:
    - type: json_to_arrow
    - type: sql
      query: "SELECT * FROM flow WHERE value >= 10"

输出组件

ArkFlow支持多种输出目标:

  • Kafka (kafka):将数据写入Kafka主题
  • MQTT (mqtt):将消息发布到MQTT主题
  • HTTP (http):通过HTTP发送数据
  • InfluxDB (influxdb):将时序数据写入 InfluxDB 2.x
  • MongoDB (mongodb):将文档写入 MongoDB 集合
  • NATS (nats):将消息发布到 NATS 主题
  • Pulsar (pulsar):将消息发布到 Pulsar 主题
  • Redis (redis):写入 Redis 流、列表或发布/订阅频道
  • SQL (sql):写入 SQL 数据库(MySQL、PostgreSQL),支持批量插入与 UPSERT
  • 标准输出 (stdout):将数据输出到控制台
  • Drop (drop):丢弃数据
  • Qdrant (qdrant):将向量与负载写入 Qdrant 集合
  • pgvector (pgvector):将向量与 JSON 负载写入启用了 pgvector 扩展的 PostgreSQL 表
  • Milvus (milvus):通过 REST v2 API 将向量与 JSON 负载写入 Milvus 集合

示例:

output:
  type: kafka
  brokers:
    - localhost:9092
  topic:
    type: value
    value: output-topic
  client_id: arkflow-producer

错误输出组件

error_output 接受上述任意一种输出组件,用于接收处理失败的消息。最常用的是 Kafka、HTTP 和标准输出(便于调试)。

示例:

error_output:
  type: kafka
  brokers:
    - localhost:9092
  topic:
    type: value
    value: error-topic
  client_id: error-arkflow-producer

缓冲组件

ArkFlow 提供缓冲能力,以处理消息的背压和临时存储:

  • 内存缓冲 (memory):内存缓冲区,用于高吞吐量场景和窗口聚合。编译后的 Stream 中它退化为直通,capacity/timeout 选项被忽略。
  • 会话窗口 (session_window):会话窗口缓冲组件提供了一种基于会话的消息分组机制,其中消息根据活动间隙进行分组。它实现了一个会话窗口,在可配置的非活动期后关闭。编译为处理时间窗口算子。
  • 滑动窗口(已弃用) (sliding_window):已弃用且在 Stream 配置中不可达——流编译器会拒绝滑动窗口缓冲。请改用 Job DAG 中的事件时间滑动窗口算子。
  • 滚动窗口 (tumbling_window):滚动窗口缓冲组件提供了一种固定大小、不重叠的批处理消息的窗口机制。它实现了一种滚动窗口算法,具有可配置的间隔设置。编译为处理时间窗口算子。

示例:

buffer:
  type: memory

旧版 join 缓冲同样已弃用且在 Stream 配置中不可达——流编译器会拒绝 join 缓冲,并给出指向 Job DAG 配置的迁移提示;它不是独立的缓冲类型。

编解码组件(Codec)

编解码组件通过 codec 配置挂载到输入/输出上,负责消息负载的编码与解码:

  • JSON (json):将 Arrow RecordBatch 编码/解码为 JSON 负载
  • Protobuf (protobuf):使用 Protobuf 描述符编码/解码 Arrow RecordBatch
  • Debezium JSON (debezium_json):解码来自 Kafka 变更事件主题的 Debezium CDC 信封 JSON
  • Schema Registry (schema_registry):通过 Schema Registry 解析模式,解码 Confluent 线路格式的 Protobuf 与 Avro 消息

临时状态组件(Temporary)

临时状态组件提供处理器可在运行期查询的外部查找状态:

  • Redis (redis):基于 Redis 的临时查找存储(单机或集群),通过编解码器读取

示例

Kafka到Kafka的数据处理

streams:
  - input:
      type: kafka
      brokers:
        - localhost:9092
      topics:
        - test-topic
      consumer_group: test-group

    pipeline:
      thread_num: 4
      processors:
        - type: json_to_arrow
        - type: sql
          query: "SELECT * FROM flow WHERE value > 100"

    output:
      type: kafka
      brokers:
        - localhost:9092
      topic:
        type: value
        value: processed-topic

生成测试数据并处理

streams:
  - input:
      type: "generate"
      context: '{ "timestamp": 1625000000000, "value": 10, "sensor": "temp_1" }'
      interval: 1ms
      batch_size: 10000

    pipeline:
      thread_num: 4
      processors:
        - type: "json_to_arrow"
        - type: "sql"
          query: "SELECT count(*) FROM flow WHERE value >= 10 group by sensor"

    output:
      type: "stdout"

用户

  • Conalog(国家: 韩国)

ArkFlow 插件

ArkFlow 插件示例

许可证

ArkFlow 使用 Apache License 2.0 许可证。

社区

Discord: https://discord.gg/CwKhzb8pux

微信社区群:

wx

您可以在群内提出任何需要改进的地方,我们会考虑合理性并尽快修改。 如果您发现 bug 请及时提 issue,我们会尽快确认并修改。

如果你喜欢或正在使用这个项目来学习或开始你的解决方案,请给它一个star⭐。谢谢!

探索相关项目