Skip to main content

Components

A good ninja gets clued up on its gear.

Core Components

Every Bento pipeline has at least one input, an optional buffer, an output and any number of processors:

input:
kafka:
addresses: [ TODO ]
topics: [ foo, bar ]
consumer_group: foogroup

buffer:
type: none

pipeline:
processors:
- mapping: |
message = this
meta.link_count = links.length()

output:
aws_s3:
bucket: TODO
path: '${! metadata("kafka_topic") }/${! json("message.id") }.json'

These are the main components within Bento and they provide the majority of useful behaviour.

Observability Components

There are also the observability components http, logger, metrics, and tracing, which allow you to specify how Bento exposes observability data:

http:
address: 0.0.0.0:4195
enabled: true
debug_endpoints: false

logger:
format: json
level: WARN

metrics:
statsd:
address: localhost:8125
flush_period: 100ms

tracer:
jaeger:
agent_address: localhost:6831

Resource Components

Finally, there are caches and rate limits. These are components that are referenced by core components and can be shared.

input:
http_client: # This is an input
url: TODO
rate_limit: foo_ratelimit # This is a reference to a rate limit

pipeline:
processors:
- cache: # This is a processor
resource: baz_cache # This is a reference to a cache
operator: add
key: '${! json("id") }'
value: "x"
- mapping: root = if errored() { deleted() }

rate_limit_resources:
- label: foo_ratelimit
local:
count: 500
interval: 1s

cache_resources:
- label: baz_cache
memcached:
addresses: [ localhost:11211 ]

It's also possible to configure inputs, outputs and processors as resources which allows them to be reused throughout a configuration with the resource input, resource output and resource processor respectively.

For more information about any of these component types check out their sections: