Tempo 3.1 lets operators with TLS-only Kafka brokers run the 3.0 architecture
Grafana Labs released Tempo 3.1, adding TLS and four SASL mechanisms to a Kafka client that 3.0 limited to unencrypted SASL PLAIN. Redaction by query and a vParquet5 default add upgrade reasons, with a sequencing condition on the redaction flags.
The Engineer · Build desk

Who Tempo 3.1 reaches: TLS-only brokers refused the 3.0 client; 3.1 adds TLS, optional mTLS and SASL mechanisms; older workers ignore --start/--end and remove every match without error; Event Hubs must set gzip; client_rack allows in-zone replica reads.
- constraint Operators with TLS-only brokers The 3.0 client supported only SASL PLAIN unencrypted, so any broker requiring TLS refused it, claim 2
- capability Tempo Kafka client 3.1 adds TLS, optional mTLS, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER and AWS_MSK_IAM, claim 3
- exposure Mixed-version redaction runs Older workers ignore --start/--end and remove every match in each block they receive, without an error, claim 8
- constraint Azure Event Hubs deployments Must set producer_compression to gzip; Event Hubs accepts only gzip and the unset default is snappy, claim 15
- capability Availability-zone consumers client_rack lets them read a replica in their own zone; brokers need rack IDs configured, claim 9
| Who | How | Kind | Claim |
|---|---|---|---|
| Operators with TLS-only brokers | The 3.0 client supported only SASL PLAIN unencrypted, so any broker requiring TLS refused it | constraint | 2 |
| Tempo Kafka client | 3.1 adds TLS, optional mTLS, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER and AWS_MSK_IAM | capability | 3 |
| Mixed-version redaction runs | Older workers ignore --start/--end and remove every match in each block they receive, without an error | exposure | 8 |
| Azure Event Hubs deployments | Must set producer_compression to gzip; Event Hubs accepts only gzip and the unset default is snappy | constraint | 15 |
| Availability-zone consumers | client_rack lets them read a replica in their own zone; brokers need rack IDs configured | capability | 9 |
What happened
- The new Kafka client options include optional mTLS, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER and AWS_MSK_IAM.
- In 3.1 the redact command accepts a TraceQL query where 3.0 required a list of trace IDs, and --dry-run counts matches without touching blocks.
- A new client_rack option lets consumers read from a replica in their own availability zone, but it needs brokers with rack IDs configured.
Why it matters
- exposure A windowed redaction run while any worker is still on 3.0 would delete every match in the blocks that worker handles, inside and outside the window, with no error.
- decision Teams using Azure Event Hubs as the backend have to set producer_compression to gzip, because the unset default is snappy.
- constraint The sampling-aware metrics hint is experimental and needs vParquet4 or later, so alert rules built on sampled data should wait for it to stabilise.
Kafka is on the critical path in the 3.0 design. Distributors write to a Kafka topic, block-builders read from it and turn what they read into Parquet blocks in object storage, and live-stores read the same topic and serve recent traces from it [4]. A client that cannot authenticate to the broker therefore sits in front of both the write path and recent-trace reads. The 3.0 client supported only SASL PLAIN over an unencrypted connection, so any broker requiring TLS refused it [2]. In our view, clusters with such brokers had no way to run the 3.0 design until 3.1 added TLS and four more SASL mechanisms [3][14]. Monolithic mode remains Kafka-free, so the client changes do not apply there [12].
Redaction is the more careful piece of engineering. The query syntax is deliberately narrow: one spanset filter, equality comparisons on resource.* and span.* attributes, and && or || between them [6]. Grafana limits it that way because the rewrite cannot be undone [6]. The --start and --end flags confine a run to a time window. That matters, because Tempo halts compaction for the tenant until the redaction has been applied [7].
Those flags carry a version condition. A worker on an older version silently disregards the window and deletes all matches in any block it is handed, so Grafana says to use the flags only once every scheduler and worker runs 3.1 [8]. A rolling upgrade leaves the fleet mixed for a while. A windowed redaction run in that interval would delete matches outside the window.
The speed claim comes from a narrow test. vParquet5 is the new default block format [16]. Grafana says simple metrics queries run close to twice as fast, and the one test the report cites is a warmed-up run of { } | rate() that finished in slightly over half the time [17][18]. The span-only fetch path, experimental in 3.0, is on by default for vParquet5 blocks [19]. For the number to transfer, your dashboards would need to be mostly queries that simple, your data would need to sit in vParquet5 blocks, and your caches would need to be warm. The report does not say whether blocks written in an older format get rewritten.
Three additions are still experimental: the sampling-aware extrapolate hint [11], span pruning on the trace-by-ID v2 endpoint, and the trace diff endpoint [13]. We would take the Kafka client options, redaction and the new block format with the 3.1 upgrade and wait on those three.
What to watch
- Whether Grafana publishes the setup behind the 'close to twice as fast' figure, or other operators reproduce it on their own block mix.
- Whether Tempo workers gain a version check that rejects --start and --end instead of ignoring them.
- Whether the extrapolate hint, span pruning and the trace diff endpoint leave experimental status in a later 3.x release.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence50
- Adoption
- Insufficient
- Hype gap+15
- Incentives
- Insufficient
- Confidence65
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
Grafana Labs has released Tempo 3.1, the first minor update to the 3.0 architecture.
- [2]
The Tempo 3.0 Kafka client supported only SASL PLAIN over an unencrypted connection, so any broker requiring TLS refused it.
- [3]
Tempo 3.1 adds TLS, including optional mTLS, plus SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER, and AWS_MSK_IAM to the Kafka client.
- [4]
In the 3.0 design, distributors write to a Kafka topic; block-builders consume the topic to write Parquet blocks to object storage, and live-stores consume it to serve recent traces. Because Kafka is now on the critical path, the 3.0 client's limits became a problem.
- [5]
Trace redaction, introduced in 3.0 through tempo-cli redact, previously required enumerating trace IDs. In 3.1 the command takes a TraceQL query and supports --dry-run, which counts matches without modifying blocks.
- [6]
Grafana limits the redaction query syntax to one spanset filter, using equality comparisons on resource.* and span.* attributes along with && and ||, because the rewrite cannot be undone.
- [7]
The --start and --end flags narrow the redaction time range, which matters because Tempo pauses compaction for a tenant while a redaction applies.
- [8]
Grafana warns that older workers ignore the --start/--end window and remove every match in each block they receive, without an error. The flags should only be used once every scheduler and worker runs 3.1.
- [9]
A new client_rack option enables rack-aware fetching (KIP-392), so block-builders, live-stores, and metrics-generators can read from a replica in their own availability zone and avoid cross-zone transfer charges. It requires brokers with rack IDs configured.
- [10]
A new producer_compression option accepts none, gzip, snappy, lz4, or zstd, and defaults to snappy when unset. Grafana notes that this, together with TLS, makes Azure Event Hubs usable as a backend, since it accepts only gzip.
- [11]
An experimental TraceQL metrics hint, with (extrapolate=true), scales by the sampling rate in tracestate; at 50% sampling each stored span counts as two. It requires vParquet4 or later.
- [12]
Monolithic mode remains Kafka-free.
- [13]
An experimental span pruning option on the trace-by-ID v2 endpoint collapses similar leaf spans into one summary span, and a new experimental POST /api/v2/traces/diff endpoint compares two traces.
- [14]
Tempo 3.1 adds four SASL mechanisms beyond SASL PLAIN: SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER and AWS_MSK_IAM.
- [15]
An Azure Event Hubs deployment has to set producer_compression to gzip explicitly, because Event Hubs accepts only gzip and the unset default is snappy.
- [16]
vParquet5 becomes the default block format in Tempo 3.1.
- [17]
According to Grafana, simple metrics queries now run close to twice as fast.
- [18]
In one warmed-up test, { } | rate() finished in slightly over half the time.
- [19]
The span-only fetch path, experimental in 3.0, is now on by default for vParquet5 blocks.
Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.
Sources
1 independent publisher whose own reporting we read for this story.
- infoq.comGrafana Tempo 3.1 Adds Query-Based Trace Redaction and Sampling-Aware TraceQL Metrics
1 article · October 15, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.
Topics
Entities
- Grafana LabsFollow
- TempoFollow
- Apache KafkaFollow
- TraceQLFollow
- Azure Event HubsFollow