Bento是一个高性能且具有弹性的流处理器,能够以各种代理模式连接各种源和接收器,并对有效载荷执行水合、丰富、转换和过滤操作。
它配备了强大的映射语言,易于部署和监控,并可以作为静态二进制文件、Docker镜像或无服务器函数轻松集成到您的管道中,使其具有极高的云原生特性。
Bento采用声明式方式,可以仅用一个配置文件定义流管道,让您能够指定连接器和处理阶段列表:
input:
gcp_pubsub:
project: foo
subscription: bar
pipeline:
processors:
- mapping: |
root.message = this
root.meta.link_count = this.links.length()
root.user.age = this.user.age.number()
output:
redis_streams:
url: tcp://TODO:6379
stream: baz
max_in_flight: 20
传输保证
传输保证可能是一个棘手的问题。Bento使用进程内事务模型处理和确认消息,无需任何磁盘持久化状态,因此在连接至少一次源和接收器时,即使发生崩溃、磁盘损坏或其他意外服务器故障,它也能保证至少一次传输。
这种行为是默认的,且没有任何限制,这也使得部署和扩展Bento变得更加简单。
支持的源和接收器
AWS(DynamoDB、Kinesis、S3、SQS、SNS)、Azure(Blob存储、队列存储、表存储)、GCP(Pub/Sub、云存储、Big Query)、Kafka、NATS(JetStream、流式处理)、NSQ、MQTT、AMQP 0.91(RabbitMQ)、AMQP 1、Redis(流、列表、发布/订阅、哈希)、Cassandra、Elasticsearch、HDFS、HTTP(服务器和客户端,包括WebSocket)、MongoDB、SQL(MySQL、PostgreSQL、Clickhouse、MSSQL),以及点击此处查看全部,因为它们太多无法在README中全部列出。
我们正在不断添加新的连接器,如果您需要的某个连接器尚未支持,请提交一个issue。
文档
如果你想完全深入了解Bento,那就不要浪费时间在这里,请查看文档网站。 关于如何配置更高级的流处理概念,如流连接、数据丰富工作流等,请查看指南部分。 如果你想用Go语言构建自己的自定义插件,请查看公共API。
安装
我们正在完善发布流程,但您可以选择从源代码编译或拉取Docker镜像:
docker pull ghcr.io/warpstreamlabs/bento
欲了解更多信息,请查看入门指南。
运行
bento -c ./config.yaml
或者,使用Docker:
# 使用配置文件
docker run --rm -v /path/to/your/config.yaml:/bento.yaml ghcr.io/warpstreamlabs/bento
# 使用一系列 -s 标志
docker run --rm -p 4195:4195 ghcr.io/warpstreamlabs/bento \
-s "input.type=http_server" \
-s "output.type=kafka" \
-s "output.kafka.addresses=kafka-server:9092" \
-s "output.kafka.topic=bento_topic"
监控
健康检查
Bento 提供两个 HTTP 端点用于健康检查:
/ping
可用作存活探针,它始终返回 200 状态码。/ready
可用作就绪探针,只有当输入和输出都已连接时才会返回 200 状态码,否则返回 503 状态码。
指标
Bento 暴露了大量指标,可以输出到 Statsd、Prometheus、JSON HTTP 端点等多种方式。
追踪
Bento 还发出开放遥测追踪事件,可用于可视化管道内的处理器。
配置
Bento提供了许多工具,使配置的发现、调试和组织变得容易。您可以在此处阅读相关内容。
构建
使用 Go 构建(任何当前支持的版本):
git clone git@github.com:warpstreamlabs/bento
cd bento
make
go build -o bento ./cmd/bento/main.go
代码检查
Bento 使用 golangci-lint 进行代码检查,您可以通过以下命令安装:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
安装完成后,可以使用 make lint
命令运行代码检查。
插件
用Go语言为Bento编写自定义插件非常简单,如需了解更多信息,请查看API文档。
额外插件
默认情况下,Bento 不会构建需要链接外部库的组件,例如 zmq4
输入和输出。如果你希望在本地构建包含这些依赖项的 Bento,请设置构建标签 x_bento_extra
:
# 使用 go
go install -tags "x_bento_extra" github.com/warpstreamlabs/bento/cmd/bento@latest
# 使用 make
make TAGS=x_bento_extra
请注意,此标签可能会在主要版本发布之外发生变更或被拆分为单个组件的细粒度标签。如果你尝试构建时这些依赖项不存在,你会看到类似 ld: library not found for -lzmq
的错误消息。
Docker 构建
这里有一个多阶段的 Dockerfile
用于创建一个从零开始的最小化 Bento docker 镜像。你可以通过以下命令构建它:
make docker
然后使用该镜像:
docker run --rm \
-v /path/to/your/bento.yaml:/config.yaml \
-v /tmp/data:/data \
-p 4195:4195 \
bento -c /config.yaml