Otelarrow Exporter
contrib, k8s
Maintainers: @jmacd, @JakeDern
Source: opentelemetry-collector-contrib
Supported Telemetry
Overview
Exports telemetry data using OpenTelemetry Protocol with Apache Arrow components with support for both OpenTelemetry Protocol with Apache Arrow and standard OpenTelemetry Protocol (OTLP) protocol via gRPC.Getting Started
The OpenTelemetry Protocol with Apache Arrow exporter combines the features and configuration syntax of the core OpenTelemetry Collector OTLP exporter component with additional support for the OpenTelemetry Protocol with Apache Arrow. OpenTelemetry Protocol with Apache Arrow supports column-oriented data transport using the Apache Arrow data format. This component converts OTLP data into an optimized representation and then sends batches of data using Apache Arrow to encode the stream. The OpenTelemetry Protocol with Apache Arrow receiver component contains logic to reverse the process used in this component. The use of an OpenTelemetry Protocol with Apache Arrow exporter-receiver pair is recommended when the network is expensive. Typically, expect to see a 50% reduction in bandwidth compared with the same data being sent using standard OTLP/gRPC with Zstd compression, batch sizes being equal. This component includes all the features and configuration of the core OTLP exporter, making it possible to upgrade from the core OTLP exporter component. This is as simple as replacing “otlp” with “otelarrow” as the component name in the collector configuration. To enable the OpenTelemetry Protocol with Apache Arrow exporter, include it in the list of exporters for a pipeline. Theendpoint
setting is required. The tls setting is required for insecure
transport.
endpoint(no default): host:port to which the exporter is going to send OTLP trace data, using the gRPC protocol. The valid syntax is described in grpc’s naming.md. If a scheme ofhttpsis used then client transport security is enabled and overrides theinsecuresetting.tls: see TLS Configuration Settings for the full set of available options.
zstd compression is enabled at the gRPC level. See
compression configuration below. To
disable gRPC-level compression, configure “none”:
Configuration
Several helper files are leveraged to provide additional capabilities automatically:Arrow-specific Configuration
In thearrow configuration block, the following settings enable and
disable the use of OpenTelemetry Protocol with Apache Arrow as opposed
to standard OTLP.
disabled(default: false): disables use of Arrow, causing the exporter to use standard OTLPdisable_downgrade(default: false): prevents this exporter from using standard OTLP.
max_stream_lifetime(default: 30s): duration after which streams are recycled.
num_streams(default:max(1, NumCPU()/2)): the number of concurrent Arrow streams
num_streams default limits the exporter stream count to half the
number of CPUs or 1, whichever is greater. When num_streams is
greater than one, a configurable policy determines how load is
assigned across streams to balance load. The supported policies are
leastloaded, which picks the stream with the smallest number of
outstanding requests, and leastloadedN for N <= num_streams, which
limits the decision to a random subset of N streams.
prioritizer(default: “leastloaded”): policy for distributing load across multiple streams.
Matching Metadata Per Stream
The following configuration values allow for separate streams per unique metadata combinations:metadata_keys(default = empty): When set, this exporter will create one arrow exporter instance per distinct combination of values in the client.Metadata.metadata_cardinality_limit(default = 1000): When metadata_keys is not empty, this setting limits the number of unique combinations of metadata key values that will be processed over the lifetime of the exporter.
Network Configuration
This component usesround_robin by default as the gRPC load
balancer. This can be modified using the balancer_name setting, for
example, to configure the pick_first balancer:
max_stream_lifetime setting is critical to avoiding
abrupt termination of Arrow streams, which causes retries of the
in-flight requests. The maximum stream lifetime should be set to a
value less than the minimum of the server’s keepalive parameter (and
any of the intermediate proxies), plus the export timeout.
OK gRPC status.
The corresponding otelarrowreceiver keepalive setting, that is
compatible with the one above, reads:
Exporter metrics
In addition to the standard exporterhelper and obsreport metrics, this component provides network-level measurement instruments which we anticipate will become part ofexporterhelper and/or
obsreport in the future. At the normal level of metrics detail:
otelcol_exporter_sent: uncompressed bytes sent, prior to compressionotelcol_exporter_sent_wire: compressed bytes sent, on the wire.
otelcol_exporter_sent value by the average otelcol_exporter_sent_wire value.
At the detailed metrics detail level, information about the stream
of data being returned to the exporter will be instrumented:
otelcol_exporter_recv: uncompressed bytes received, prior to compressionotelcol_exporter_recv_wire: compressed bytes received, on the wire.
Compression Configuration
The exporter supports configuring Zstd compression at both the gRPC and the Arrow level. The exporter metrics described above will be correct in either case. The default settings are subject to change as we gain experience. See the Collector compression comparison for general information about the choice of Zstd by default, for other general compression configuration and benchmark information. For the OpenTelemetry Protocol with Apache Arrow streams specifically, gRPC-level the Zstd compression level can be configured. However, there is an important caveat: the gRPC-Go library requires that compressor implementations be registered statically. These libraries use compressors namedzstdarrow1, zstdarrow2, …, zstdarrow10,
supporting 10 configurable compression levels. Note, however that
these configurations are static and only one unique configuration is
possible per level. It is possible to configure multiple
OpenTelemetry Protocol with Apache Arrow exporters with different Zstd
configuration simply by using distinct levels.
Under arrow, the zstd sub-configuration has the following fields:
level: in the range 1-10 determines a number of defaults (default 5)window_size_mib: size of the Zstd window in MiB, 0 indicates to determine based on level (default 0)concurrency: controls background CPU used for compression, 0 indicates to letzstdlibrary decide (default 1)
payload_compression(default “zstd”): compression applied at the Arrow IPC level.
Batching Configuration
This exporter supports built-inexporterhelper support for combined
queue and batch behavior via the sending_queue settings. Note that
the bytes-based batching is supported, but that the exporterhelper
estimates batch sizes using the OTLP representation, not considering
Arrow compression.
In the default configuration, without a persistent storage extension,
the exporter uses an in-memory queue and will respond to the caller
before the export completes.
In the sending_queue structure, the default settings set by this
component are:
block_on_overflow: truewait_for_result: falsesizer: itemsqueue_size: 100_000batch::flush_timeout: 1sbatch::min_size: 1_000batch::max_size: 1_500num_consumers: 100
wait_for_result: true. The example below demonstrates how to use the
in-memory queue for batching with this additional level of safety:
Configuration
Example Configuration
Last generated: 2026-04-13