操作系统为:Debian 15.8

下载源码

git clone https://github.com/ArroyoSystems/arroyo.git

安装必须的依赖

国内安装pnpm可能不成功,需要代理

# 需要有clash
export https_proxy=http://192.168.31.32:7890
export http_proxy=http://192.168.31.32:7890
sudo apt-get install pkg-config build-essential \
  libssl-dev openssl cmake curl postgresql postgresql-client protobuf-compiler
sudo systemctl start postgresql
# 安装 rust
curl https://sh.rustup.rs -sSf | sh -s -- -y
cargo install refinery_cli
# 安装npm
curl -fsSL https://get.pnpm.io/install.sh | sh -
# 安装pnpm
wget -qO- https://get.pnpm.io/install.sh | sh -

配置npm和pnpm镜像加速

npm config set registry https://registry.npmmirror.com
pnpm config set registry https://registry.npmmirror.com

配置cargo加速

在用户家目录.cargo目录下新建config.toml文件,输入下面内容:

[source.crates-io]
replace-with = 'rsproxy-sparse'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true

配置Postgres

开发Arroyo需要运行Postgres,默认情况下,它需要一个名为arroyo的数据库,一个用户arroyo和密码arroyo,可以通过设置以下环境变量来更改:

  • DATABASE_NAME
  • DATABASE_HOST
  • DATABASE_PORT
  • DATABASE_USER
  • DATABASE_PASSWORD

建表:

sudo -u postgres psql -c "CREATE USER arroyo WITH PASSWORD 'arroyo' SUPERUSER;"
sudo -u postgres createdb arroyo

配置refinery

如果这步没有配置正确编译会通不过。

refinery setup
mv refinery.toml ~/
refinery migrate -c ~/refinery.toml -p crates/arroyo-api/migrations

设置PostgreSQL允许被远程访问

这步只是为了自己看PostgreSQL数据库的内容比较方便。

修改postgresql.conf

postgresql.conf存放位置在/etc/postgresql/15/main下,这里的x取决于你安装PostgreSQL的版本号,编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求。

listen_addresses = '*'

修改pg_hba.conf

pg_hba.conf,位置与postgresql.conf相同,虽然上面配置允许任意地址连接PostgreSQL,但是这在pg中还不够,我们还需在pg_hba.conf中配置服务端允许的认证方式。任意编辑器打开该文件,编辑或添加下面一行。

# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

默认pg只允许本机通过密码认证登录,修改为上面内容后即可以对任意IP访问进行密码验证。

完成上两项配置后执行sudo systemctl restart postgresql重启PostgreSQL服务后,允许外网访问的配置就算生效了。

构建前端

cd webui
pnpm install
pnpm build

构建服务

使用下面的命令构建:

cargo build --package arroyo

默认情况下,Cargo在调试模式下构建,这为您提供了更短的构建时间,以换取更慢的执行速度。这对于开发来说非常好,但是在部署或基准测试之前,您应该确保始终在发布模式下构建(cargo build --release)。

这将在target/debug/arroyo中构建二进制文件。运行,看到可用的子命令:

target/debug/arroyo
Usage: arroyo <COMMAND>

Commands:
  api         Starts an Arroyo API server
  controller  Starts an Arroyo Controller
  cluster     Starts a complete Arroyo cluster
  worker      Starts an Arroyo worker
  compiler    Starts an Arroyo compiler
  node        Starts an Arroyo node server
  migrate     Runs database migrations on the configure Postgres database
  help        Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

运行集群

所有服务都可以在单个集群中一起运行,也可以单独运行。对于开发,最典型的做法是使用cluster子命令将它们一起运行:

target/debug/arroyo cluster

这将启动一个带有默认“进程”调度程序的新Arroyo集群,该调度程序将每个 pipeline 作为同一节点上的单独进程运行。

集群地址:http://localhost:5115

Cargo还允许使用cargo run命令将构建-运行过程合并为单个步骤,例如:

cargo run --bin arroyo -- cluster

前端开发

在开发前端时,可以利用vite的dev server来缩短开发周期:

cd webui
pnpm run dev

然后访问http://localhost:5173/。这要求群集运行在http://localhost:5115上。

更新前端定义

在arroyo-rpc中修改protobuf定义后,需要重新生成前端使用的Typescript代码:

pnpm run generate

类似地,在arroyo-API中更改REST API类型后,您需要运行:

pnpm run openapi

测试

Arroyo包含了一个覆盖系统大部分部分的大型测试套件。我们使用标准的Rust测试框架,可以通过下面的命令执行:

cargo test

我们还推荐cargo-nextest,它在标准测试运行器之上提供了更好的用户体验。

cargo nextest run

所有选项需要查看nextest的文档。

连接器测试可能需要该系统正在运行的本地实例才能通过;例如,完整的测试套件目前需要Kafka和mqtt。

构建docker

Arroyo repo包含一个Dockerfile,用于打包Arroyo,以便通过Kubernetes或Docker Compose进行开发和部署。

为了提高效率,我们使用目标来构建用于不同目的的图像。可用的目标是:

  • arroyo — 仅包含Arroyo二进制文件;最适用于在Kubernetes或Docker Compose中部署

  • arroyo-full — 还包括Rust编译环境;这是在Web UI中构建UDF所需的;编译器服务将动态获取必要的依赖项,但如果您运行在不允许外部互联网访问的环境中,您可以选择使用arroyo-full

要生成特定的目标,请运行:

docker build . -f docker/Dockerfile -t {target} --target {target}

例如:

docker build . -f docker/Dockerfile -t arroyo-full --target arroyo-full

请注意,这需要一个支持buildx的最新版本的Docker。