Arroyo 开发环境配置
操作系统为: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 作为同一节点上的单独进程运行。
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。