<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic OpenTelemetry &amp;amp; Apache Arrow – a winning combination in OTel</title>
    <link>https://community.dynatrace.com/t5/OTel/OpenTelemetry-amp-Apache-Arrow-a-winning-combination/m-p/303519#M418</link>
    <description>&lt;P class=""&gt;The &lt;A href="https://opentelemetry.io/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry (OTel)&lt;/SPAN&gt;&lt;/A&gt; ecosystem has grown and matured a LOT since its inception in 2019. Traces, logs, and metrics have reached general availability (GA). &lt;A href="https://opentelemetry.io/blog/2024/profiling/?utm_source=copilot.com" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Profiling&lt;/SPAN&gt;&lt;/A&gt; was added as a new OTel signal. The &lt;A href="https://github.com/open-telemetry/opentelemetry-demo" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Demo&lt;/SPAN&gt;&lt;/A&gt; has expanded. The &lt;A href="https://github.com/open-telemetry/opentelemetry-collector" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Collector&lt;/SPAN&gt;&lt;/A&gt; has expanded, with new components being added regularly. We've seen the addition of new components to the OTel ecosystem to help make it more ergonomic, including &lt;A href="https://medium.com/womenintechnology/opentelemetry-opamp-for-you-and-me-dcc6f84a2e32" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpAMP&lt;/SPAN&gt;&lt;/A&gt;, the &lt;A href="https://adri-v.medium.com/list/opentelemetry-operator-0ee6378d630a" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Operator&lt;/SPAN&gt;&lt;/A&gt;, &lt;A href="https://medium.com/womenintechnology/lets-learn-about-otel-weaver-together-8f5700fefc11" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Weaver&lt;/SPAN&gt;&lt;/A&gt;, and OTel Arrow.&lt;/P&gt;&lt;P class=""&gt;More organizations are adopting OpenTelemetry, and as they start emitting more OTel data, they're starting to see scaling issues. One such issue is the explosion of telemetry data, which translates to increased pressure on resources and increased costs associated with telemetry. Organizations obviously see value in making their systems observable, but they're probably not super excited about spending a small fortune to do it. So what's the solution?&lt;/P&gt;&lt;P class=""&gt;Before we get to that, let's dig into the problem a bit more.&lt;/P&gt;&lt;H3&gt;&lt;STRONG&gt;OTLP is great, until it isn't&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;OpenTelemetry uses the &lt;A href="https://github.com/open-telemetry/opentelemetry-proto" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTLP protobuf&lt;/SPAN&gt;&lt;/A&gt; data format, which is not optimized for managing high volumes of telemetry data. This is because:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Telemetry data is hierarchical: Protobuf must recursively encode and decode the data, which is CPU intensive.&lt;/LI&gt;&lt;LI&gt;OTLP is row-based: Each record is stored as a single message. This becomes expensive for duplicate (common) values.&lt;/LI&gt;&lt;LI&gt;Serialization/deserialization is expensive: The path SDK → Collector → Backend requires encoding/decoding. Again, this is CPU intensive, memory intensive, and causes latency.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;This is where &lt;A href="https://github.com/open-telemetry/otel-arrow#opentelemetry-protocol-with-apache-arrow" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Protocol with Apache Arrow (OTAP or OTel Arrow)&lt;/SPAN&gt;&lt;/A&gt; comes to the rescue.&lt;/P&gt;&lt;P class=""&gt;OTel Arrow is based on the &lt;A href="https://arrow.apache.org/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Apache Arrow framework&lt;/SPAN&gt;&lt;/A&gt;, and serves as both a data format (how data is structured) and a transport protocol (how data moves between systems).&lt;/P&gt;&lt;P class=""&gt;It converts OpenTelemetry OTLP data into &lt;A href="https://arrow.apache.org/docs/format/Columnar.html" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Apache Arrow's columnar format&lt;/SPAN&gt;&lt;/A&gt;, providing a more efficient way to represent in-memory batches of OTel signals. OTel Arrow helps thanks to its:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Columnar format: This is optimized for analytics and data storage (optimized for compression). It also reduces data duplication. Repeated data is stored once in a dictionary. "Duplicated" data is replaced by a pointer to the "source of truth" dictionary item.&lt;/LI&gt;&lt;LI&gt;Zero-copy data sharing: When data moves between components, you need to serialize it, copy it to a new buffer, deserialize it, and allocate new memory storage. Zero copy means that everything stays in the same memory buffer. This saves on CPU, lowers memory pressure, and reduces latency.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;OTel Arrow is optimized for:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;High telemetry volume&lt;/LI&gt;&lt;LI&gt;Multi-cloud or multi-region deployments&lt;/LI&gt;&lt;LI&gt;Systems with bandwidth constraints&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;STRONG&gt;OTel Arrow at work&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Awesome, but how is OTel Arrow implemented?&lt;/P&gt;&lt;H4&gt;Phase 1&lt;/H4&gt;&lt;P class=""&gt;OTel Arrow is currently implemented in the OTel Collector via the &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/otelarrowexporter/README.md" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Arrow Exporter&lt;/SPAN&gt;&lt;/A&gt;, which emits data to a backend that accepts OTAP.&lt;/P&gt;&lt;P class=""&gt;BUT…Since most telemetry backends don't accept OTAP out of the box, you'll likely need to add in an OTel Collector Gateway to ingest OTAP data via the &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/otelarrowreceiver/README.md" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Arrow OTLP Receiver&lt;/SPAN&gt;&lt;/A&gt; and export OTLP to your OTLP-compatible observability backend.&lt;/P&gt;&lt;P class=""&gt;&lt;span class="lia-unicode-emoji" title=":sparkles:"&gt;✨&lt;/span&gt;NOTE: If you'd like to see some examples in action, &lt;A href="https://oneuptime.com/blog/post/2026-02-06-otel-arrow-exporter-opentelemetry-collector/view" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;check out this article&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;If you're looking at the above diagram and are thinking that this feels like a lot of steps and that we're losing some efficiency having to convert from OTAP back to OTLP, you're not wrong. This is where Phase 2 of the project comes in.&lt;/P&gt;&lt;H4&gt;Phase 2&lt;/H4&gt;&lt;P class=""&gt;To get even more out of OTel Arrow, the project maintainers are working on Phase 2, the &lt;A href="https://github.com/open-telemetry/otel-arrow/tree/main/rust/otap-dataflow" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Arrow Dataflow Engine&lt;/SPAN&gt;&lt;/A&gt;, which is nearing completion. The dataflow engine is written from the ground up in &lt;A href="https://rust-lang.org/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Rust&lt;/SPAN&gt;&lt;/A&gt;, providing lower-level control, better performance characteristics, and elimination of garbage collection-related issues. The end result will be more performant, provide better compression, and have lower latency than through the current OTel Collector and OTAP exporter combination.&lt;/P&gt;&lt;P class=""&gt;When completed, the new flow will look like this, with the OTel Arrow Dataflow Engine taking the place of the OTel Collector.&lt;/P&gt;&lt;P class=""&gt;Using OTel Arrow currently results in a &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/otelarrowexporter#getting-started" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;50% reduction in bandwidth&lt;/SPAN&gt;&lt;/A&gt;. This number was reached by benchmarking against the same data being of equal batch sizes sent using standard OTLP/gRPC with Zstd compression (fancy compression algorithm). OTel Arrow also boasts a &lt;A href="https://uptrace.dev/ingest/otelarrow#key-benefits" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;compression factors of 15x-30x compared to uncompressed data&lt;/SPAN&gt;&lt;/A&gt;. Even greater overall gains are expected for Phase 2.&lt;/P&gt;&lt;P class=""&gt;To learn more about OTel Arrow Phase 2, check out &lt;A href="https://opentelemetry.io/blog/2025/otel-arrow-phase-2/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;this blog post on opentelemetry.io&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 19 Aug 2026 11:55:46 GMT</pubDate>
    <dc:creator>AdrianaVillela</dc:creator>
    <dc:date>2026-08-19T11:55:46Z</dc:date>
    <item>
      <title>OpenTelemetry &amp; Apache Arrow – a winning combination</title>
      <link>https://community.dynatrace.com/t5/OTel/OpenTelemetry-amp-Apache-Arrow-a-winning-combination/m-p/303519#M418</link>
      <description>&lt;P class=""&gt;The &lt;A href="https://opentelemetry.io/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry (OTel)&lt;/SPAN&gt;&lt;/A&gt; ecosystem has grown and matured a LOT since its inception in 2019. Traces, logs, and metrics have reached general availability (GA). &lt;A href="https://opentelemetry.io/blog/2024/profiling/?utm_source=copilot.com" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Profiling&lt;/SPAN&gt;&lt;/A&gt; was added as a new OTel signal. The &lt;A href="https://github.com/open-telemetry/opentelemetry-demo" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Demo&lt;/SPAN&gt;&lt;/A&gt; has expanded. The &lt;A href="https://github.com/open-telemetry/opentelemetry-collector" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Collector&lt;/SPAN&gt;&lt;/A&gt; has expanded, with new components being added regularly. We've seen the addition of new components to the OTel ecosystem to help make it more ergonomic, including &lt;A href="https://medium.com/womenintechnology/opentelemetry-opamp-for-you-and-me-dcc6f84a2e32" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpAMP&lt;/SPAN&gt;&lt;/A&gt;, the &lt;A href="https://adri-v.medium.com/list/opentelemetry-operator-0ee6378d630a" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Operator&lt;/SPAN&gt;&lt;/A&gt;, &lt;A href="https://medium.com/womenintechnology/lets-learn-about-otel-weaver-together-8f5700fefc11" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Weaver&lt;/SPAN&gt;&lt;/A&gt;, and OTel Arrow.&lt;/P&gt;&lt;P class=""&gt;More organizations are adopting OpenTelemetry, and as they start emitting more OTel data, they're starting to see scaling issues. One such issue is the explosion of telemetry data, which translates to increased pressure on resources and increased costs associated with telemetry. Organizations obviously see value in making their systems observable, but they're probably not super excited about spending a small fortune to do it. So what's the solution?&lt;/P&gt;&lt;P class=""&gt;Before we get to that, let's dig into the problem a bit more.&lt;/P&gt;&lt;H3&gt;&lt;STRONG&gt;OTLP is great, until it isn't&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;OpenTelemetry uses the &lt;A href="https://github.com/open-telemetry/opentelemetry-proto" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTLP protobuf&lt;/SPAN&gt;&lt;/A&gt; data format, which is not optimized for managing high volumes of telemetry data. This is because:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Telemetry data is hierarchical: Protobuf must recursively encode and decode the data, which is CPU intensive.&lt;/LI&gt;&lt;LI&gt;OTLP is row-based: Each record is stored as a single message. This becomes expensive for duplicate (common) values.&lt;/LI&gt;&lt;LI&gt;Serialization/deserialization is expensive: The path SDK → Collector → Backend requires encoding/decoding. Again, this is CPU intensive, memory intensive, and causes latency.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;This is where &lt;A href="https://github.com/open-telemetry/otel-arrow#opentelemetry-protocol-with-apache-arrow" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Protocol with Apache Arrow (OTAP or OTel Arrow)&lt;/SPAN&gt;&lt;/A&gt; comes to the rescue.&lt;/P&gt;&lt;P class=""&gt;OTel Arrow is based on the &lt;A href="https://arrow.apache.org/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Apache Arrow framework&lt;/SPAN&gt;&lt;/A&gt;, and serves as both a data format (how data is structured) and a transport protocol (how data moves between systems).&lt;/P&gt;&lt;P class=""&gt;It converts OpenTelemetry OTLP data into &lt;A href="https://arrow.apache.org/docs/format/Columnar.html" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Apache Arrow's columnar format&lt;/SPAN&gt;&lt;/A&gt;, providing a more efficient way to represent in-memory batches of OTel signals. OTel Arrow helps thanks to its:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Columnar format: This is optimized for analytics and data storage (optimized for compression). It also reduces data duplication. Repeated data is stored once in a dictionary. "Duplicated" data is replaced by a pointer to the "source of truth" dictionary item.&lt;/LI&gt;&lt;LI&gt;Zero-copy data sharing: When data moves between components, you need to serialize it, copy it to a new buffer, deserialize it, and allocate new memory storage. Zero copy means that everything stays in the same memory buffer. This saves on CPU, lowers memory pressure, and reduces latency.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;OTel Arrow is optimized for:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;High telemetry volume&lt;/LI&gt;&lt;LI&gt;Multi-cloud or multi-region deployments&lt;/LI&gt;&lt;LI&gt;Systems with bandwidth constraints&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;STRONG&gt;OTel Arrow at work&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Awesome, but how is OTel Arrow implemented?&lt;/P&gt;&lt;H4&gt;Phase 1&lt;/H4&gt;&lt;P class=""&gt;OTel Arrow is currently implemented in the OTel Collector via the &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/otelarrowexporter/README.md" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Arrow Exporter&lt;/SPAN&gt;&lt;/A&gt;, which emits data to a backend that accepts OTAP.&lt;/P&gt;&lt;P class=""&gt;BUT…Since most telemetry backends don't accept OTAP out of the box, you'll likely need to add in an OTel Collector Gateway to ingest OTAP data via the &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/otelarrowreceiver/README.md" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Arrow OTLP Receiver&lt;/SPAN&gt;&lt;/A&gt; and export OTLP to your OTLP-compatible observability backend.&lt;/P&gt;&lt;P class=""&gt;&lt;span class="lia-unicode-emoji" title=":sparkles:"&gt;✨&lt;/span&gt;NOTE: If you'd like to see some examples in action, &lt;A href="https://oneuptime.com/blog/post/2026-02-06-otel-arrow-exporter-opentelemetry-collector/view" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;check out this article&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;If you're looking at the above diagram and are thinking that this feels like a lot of steps and that we're losing some efficiency having to convert from OTAP back to OTLP, you're not wrong. This is where Phase 2 of the project comes in.&lt;/P&gt;&lt;H4&gt;Phase 2&lt;/H4&gt;&lt;P class=""&gt;To get even more out of OTel Arrow, the project maintainers are working on Phase 2, the &lt;A href="https://github.com/open-telemetry/otel-arrow/tree/main/rust/otap-dataflow" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenTelemetry Arrow Dataflow Engine&lt;/SPAN&gt;&lt;/A&gt;, which is nearing completion. The dataflow engine is written from the ground up in &lt;A href="https://rust-lang.org/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Rust&lt;/SPAN&gt;&lt;/A&gt;, providing lower-level control, better performance characteristics, and elimination of garbage collection-related issues. The end result will be more performant, provide better compression, and have lower latency than through the current OTel Collector and OTAP exporter combination.&lt;/P&gt;&lt;P class=""&gt;When completed, the new flow will look like this, with the OTel Arrow Dataflow Engine taking the place of the OTel Collector.&lt;/P&gt;&lt;P class=""&gt;Using OTel Arrow currently results in a &lt;A href="https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/otelarrowexporter#getting-started" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;50% reduction in bandwidth&lt;/SPAN&gt;&lt;/A&gt;. This number was reached by benchmarking against the same data being of equal batch sizes sent using standard OTLP/gRPC with Zstd compression (fancy compression algorithm). OTel Arrow also boasts a &lt;A href="https://uptrace.dev/ingest/otelarrow#key-benefits" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;compression factors of 15x-30x compared to uncompressed data&lt;/SPAN&gt;&lt;/A&gt;. Even greater overall gains are expected for Phase 2.&lt;/P&gt;&lt;P class=""&gt;To learn more about OTel Arrow Phase 2, check out &lt;A href="https://opentelemetry.io/blog/2025/otel-arrow-phase-2/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;this blog post on opentelemetry.io&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 19 Aug 2026 11:55:46 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/OTel/OpenTelemetry-amp-Apache-Arrow-a-winning-combination/m-p/303519#M418</guid>
      <dc:creator>AdrianaVillela</dc:creator>
      <dc:date>2026-08-19T11:55:46Z</dc:date>
    </item>
  </channel>
</rss>

