Benthos是一个高性能和有弹性的流处理器,能够以一系列的中介模式连接各种源和汇,并对有效载荷进行水化、丰富、转换和过滤。
它配备了强大的映射语言,易于部署和监控,并且可以作为静态二进制文件、Docker镜像或无服务器功能放入你的管道中,使其成为云端原生功能。
Benthos是完全声明式的,在一个配置文件中定义流管道,允许你指定连接器和处理阶段的列表。
input
交付保证
是的,我们有。Benthos实现了基于事务的弹性和背压。当连接到至少一次的源和汇时,它保证至少一次的交付,而不需要在传输过程中保持消息。
支持的源和汇
Apache Pulsar、AWS(DynamoDB、Kinesis、S3、SQS、SNS)、Azure(Blob存储、队列存储、表存储)、Cassandra、Elasticsearch、File、GCP(Pub/Sub、云存储)、HDFS、HTTP(服务器和客户端,包括websockets)、Kafka、Memcached、MQTT、Nanomsg、NATS、NATS JetStream、NATS Streaming、NSQ、AMQP 0。91 (RabbitMQ), AMQP 1, Redis (streams, list, pubsub, hashes), MongoDB, SQL (MySQL, PostgreSQL, Clickhouse, MSSQL), Stdin/Stdout, TCP & UDP, sockets and ZMQ4.
连接器正在不断地被添加,如果你想要的东西被遗漏了,那么请开一个问题。
文档
如果你想完全深入了解Benthos,那么不要在这个垃圾堆里浪费时间,请查看文档网站。
对于如何配置更高级的流处理概念的指导,如流连接、丰富的工作流程等,请查看cookbooks部分。
关于在Go中建立你自己的自定义插件的指导,请查看公共API。
安装
curl -Lsf https://sh.benthos.dev
或者拉动docker镜像。
docker pull jeffail/benthos
Benthos也可以通过Homebrew安装。
brew install benthos
欲了解更多信息,请查看入门指南。
运行
benthos -c ./config.yaml
或者使用docker。
# Using a config file
监控
健康检查
Benthos为健康检查提供了两个HTTP端点。
/ping可以作为有效性检查使用,因为它总是返回200。/ready可以用作就绪性检测,因为只有当输入和输出都连接好时,它才会返回200,否则会返回503。
衡量标准
Benthos向Statsd、Prometheus或用于调试目的的HTTP端点提供大量指标,返回JSON格式的对象。
追踪
Benthos还向您选择的追踪器(目前只支持Jaeger)发出追踪事件,这可以用来可视化管道中的处理器。
配置
Benthos提供了很多工具,使配置的发现、调试和组织变得容易。你可以在这里阅读这些工具。
构建
使用Go(1.16或更高版本)构建。
git clone git@github.com:benthosdev/benthos
提示
Benthos使用golangci-lint来进行linting,你可以用它来安装。
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh
然后用make lint 来运行它。
插件
在Go中为Benthos编写自己的自定义插件是非常容易的,有关信息请查阅API文档,为了获得灵感,有一个实例库展示了各种插件的实现。
额外的插件
默认情况下,Benthos在构建时不需要链接到外部库,例如zmq4 输入和输出的组件。如果你希望在本地构建Benthos的这些依赖项,那么请设置构建标签x_benthos_extra 。
# With go
请注意,这个标签可能会改变,或者在主要版本之外被分解成个别组件的细化标签。如果你尝试构建,而这些依赖项不存在,你会看到错误信息,如ld: library not found for -lzmq 。
Docker构建
有一个多阶段的Dockerfile ,用于创建Benthos的docker镜像,从而形成一个从头开始的最小镜像。你可以用它来构建。
make docker
然后使用该镜像。
docker run --rm \
-v /path/to/your/benthos.yaml:/config.yaml \
-v /tmp/data:/data \
-p 4195:4195 \
benthos -c /config.yaml