> ## Documentation Index
> Fetch the complete documentation index at: https://otel.fyi/llms.txt
> Use this file to discover all available pages before exploring further.

# Pulsar

> OpenTelemetry exporter for Pulsar

# Pulsar Exporter

![Status](https://img.shields.io/badge/status-alpha-red)

**Available in:** `contrib`

**Maintainers:** [@dao-jun](https://github.com/dao-jun)

**Source:** [opentelemetry-collector-contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/pulsarexporter)

## Supported Telemetry

![Logs](https://img.shields.io/badge/logs-alpha-blue) ![Metrics](https://img.shields.io/badge/metrics-alpha-green) ![Traces](https://img.shields.io/badge/traces-alpha-orange)

## Overview

Pulsar exporter exports logs, metrics, and traces to [Apache Pulsar](https://pulsar.apache.org/).
This exporter uses a synchronous producer that blocks and able to batch messages.

## Get Started

The following settings can be optionally configured:

* `endpoint` (default = pulsar://localhost:6650): The url of pulsar cluster.
* `topic` (default = otlp\_spans for traces, otlp\_metrics for metrics, otlp\_logs for logs): The name of the pulsar topic to export to.
* `encoding` (default = otlp\_proto): The encoding of the traces sent to pulsar. All available encodings:
  * `otlp_proto`: payload is Protobuf serialized from `ExportTraceServiceRequest` if set as a traces exporter or `ExportMetricsServiceRequest` for metrics or `ExportLogsServiceRequest` for logs.
  * `otlp_json`:  \*\* EXPERIMENTAL \*\* payload is JSON serialized from `ExportTraceServiceRequest` if set as a traces exporter or `ExportMetricsServiceRequest` for metrics or `ExportLogsServiceRequest` for logs.
  * The following encodings are valid *only* for **traces**.
    * `jaeger_proto`: the payload is serialized to a single Jaeger proto `Span`, and keyed by TraceID.
    * `jaeger_json`: the payload is serialized to a single Jaeger JSON Span using `jsonpb`, and keyed by TraceID.
* `auth`
  * `tls`
    * `cert_file`:
    * `key_file`:
  * `token`
    * `token`
  * `oauth2`
    * `issuer_url`:
    * `client_id`:
    * `audience`:
    * `scope`:
    * `private_key`: Path to the private client credentials json file. Must contain `type`, `client_id`, `client_secret` and `issuer_url` fields.
  * `athenz`
    * `provider_domain`:
    * `tenant_domain`:
    * `tenant_service`:
    * `private_key`:
    * `key_id`:
    * `principal_header`:
    * `zts_url`:
* `producer`
  * `max_reconnect_broker`: specifies the maximum retry number of reconnectToBroker. (default: ultimate)
  * `hashing_scheme`: used to define the partition on where to publish a particular message. Can be set to `java_string_hash` (default) or `murmur3_32hash`.
  * `compression_level`: one of 'default' (default), 'faster', or 'better'.
  * `compression_type`: one of 'none' (default), 'lz4', 'zlib', or 'zstd'.
  * `max_pending_messages`: specifies the max size of the queue holding the messages pending to receive an acknowledgment from the broker.
  * `batch_builder_type`: one of 'default' (default) or 'key\_based'.
  * `partitions_auto_discovery_interval`: the time interval for the background process to discover new partitions
  * `batching_max_publish_delay`: specifies the time period within which the messages sent will be batched (default: 10ms)
  * `batching_max_messages`: specifies the maximum number of messages permitted in a batch. (default: 1000)
  * `batching_max_size`: specifies the maximum number of bytes permitted in a batch. (default 128 KB)
  * `disable_block_if_queue_full`: controls whether Send and SendAsync block if producer's message queue is full. Defaults to false.
  * `disable_batching`: controls whether automatic batching of messages is enabled for the producer. Defaults to false.
* `tls_trust_certs_file_path`: path to the CA cert. For a client this verifies the server certificate. Should
  only be used if `insecure` is set to true.
* `tls_allow_insecure_connection`: configure whether the Pulsar client accept untrusted TLS certificate from broker (default: false)
* `timeout`: send pulsar message timeout (default: 5s)
* `operation_timeout`: sets producer-create, subscribe and unsubscribe operations timeout (default: 30 seconds)
* `connection_timeout`: timeout for the establishment of a TCP connection (default: 5 seconds)
* `max_connections_per_broker`: max number of connections to a single broker that will kept in the pool. (default: 1 connection)
* `retry_on_failure`
  * `enabled` (default = true)
  * `initial_interval` (default = 5s): Time to wait after the first failure before retrying; ignored if `enabled` is `false`
  * `max_interval` (default = 30s): Is the upper bound on backoff; ignored if `enabled` is `false`
  * `max_elapsed_time` (default = 120s): Is the maximum amount of time spent trying to send a batch; ignored if `enabled` is `false`
* `sending_queue`
  * `enabled` (default = true)
  * `num_consumers` (default = 10): Number of consumers that dequeue batches; ignored if `enabled` is `false`
  * `queue_size` (default = 1000): Maximum number of batches kept in memory before dropping data; ignored if `enabled` is `false`;
    User should calculate this as `num_seconds * requests_per_second` where:
    * `num_seconds` is the number of seconds to buffer in case of a backend outage
    * `requests_per_second` is the average number of requests per seconds.

Example configuration:

```yaml theme={null}
exporters:
  pulsar:
    endpoint: pulsar://localhost:6650
    topic: otlp-spans
    encoding: otlp_proto
    auth:
      tls:
        cert_file: cert.pem
        key_file: key.pem
    timeout: 10s
    tls_allow_insecure_connection: false
    tls_trust_certs_file_path: ca.pem
```

## Configuration

### Example Configuration

```yaml theme={null}
pulsar:
  topic: spans
  endpoint: pulsar://localhost:6650
  encoding: otlp-spans
  tls_trust_certs_file_path: ca.pem
  auth:
    tls:
      cert_file: cert.pem
      key_file: key.pem
  timeout: 20s
  sending_queue:
    enabled: true
    num_consumers: 2
    queue_size: 10
  retry_on_failure:
    enabled: true
    initial_interval: 10s
    max_interval: 60s
    max_elapsed_time: 10m
  producer:
    disable_block_if_queue_full: false
    max_pending_messages: 100
    hashing_scheme: java_string_hash
    compression_type: zstd
    compression_level: default
    batch_builder_type: key_based
    disable_batching: false
    # unit is nanoseconds (10^-9), set to 10 milliseconds in nanoseconds
    batching_max_publish_delay: 10ms
    batching_max_messages: 1000
    batching_max_size: 128000
    # unit is nanoseconds (10^-9), set to 1 minute in nanoseconds
    partitions_auto_discovery_interval: 1m
```

***

*Last generated: 2026-07-06*
