<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g" -->

---
title: How Trax keeps aircraft maintenance real-time with Quarkus
description: Trax, an aviation maintenance software provider, built its real-time eMobility platform on Quarkus. Debezium captures Oracle redo log changes and publishes...
canonical: https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How Trax keeps aircraft maintenance real-time with Quarkus | daily.dev
og:description: Trax, an aviation maintenance software provider, built its real-time eMobility platform on Quarkus. Debezium captures Oracle redo log changes and publishes...
og:url: https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g
og:image: https://api.daily.dev/og/posts/QZZyoeg2G.png
og:image:alt: How Trax keeps aircraft maintenance real-time with Quarkus
og:image:width: 1200
og:image:height: 630
og:locale: en
---

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

# How Trax keeps aircraft maintenance real-time with Quarkus

**[Quarkus](https://daily.dev/sources/quarkus)** · 13 min read · 1 upvotes · 0 comments

## Summary

Trax, an aviation maintenance software provider, built its real-time eMobility platform on Quarkus. Debezium captures Oracle redo log changes and publishes them to Kafka, where a Quarkus service using Kafka Streams refreshes caches and broadcasts compact change notifications over WebSockets to React and Swift iOS clients. Updates are debounced over a 1-second window so bursts collapse into one notification instead of thousands. Kubernetes' pod HOSTNAME is reused as the Kafka Streams application id so every pod gets its own consumer group for broadcast delivery. A single OpenAPI spec generates both the Swift and TypeScript API clients, catching breaking changes at compile time.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://quarkus.io/blog/trax-real-time-aircraft-maintenance-with-quarkus>

## Questions this post answers

### Why would you use a Kubernetes pod's HOSTNAME as the Kafka Streams application id?

Because Kafka Streams derives its consumer group from the application id, and a consumer group divides partitions among members, so a shared application id would deliver each change event to only one pod. Using HOSTNAME, which Kubernetes sets to the unique, stable pod name, gives every pod its own consumer group so all pods see every record, letting each one broadcast to the WebSocket clients connected to it.

_Building broadcast-style event consumers on Kafka Streams? See architecture patterns like this one on daily.dev._

### How do you stop a React app from re-rendering excessively when consuming a noisy change data capture (CDC) stream?

Debounce updates before broadcasting them: enqueue each change into a map keyed by the record's identity and use a shared trailing timer that flushes the batch after a fixed delay, such as one second. This collapses repeated updates to the same record into one message and turns a thousand-row batch job into a single notification instead of a thousand separate pushes.

_Developers tuning real-time CDC pipelines can find more implementation patterns like this on daily.dev._

### How can a browser keep a WebSocket connection alive when JavaScript cannot send RFC 6455 ping frames?

Have the browser send a literal text message such as 'ping' and reply with 'pong' from an @OnTextMessage handler, while native clients that can send real ping control frames are handled separately with @OnPingMessage. Quarkus's websockets-next extension also supports a server-side auto-ping-interval configuration property to keep connections alive through firewalls and flaky Wi-Fi.

_Teams hardening WebSocket connections across web and native clients can track techniques like this on daily.dev._

## Similar posts on daily.dev

- [Observability on Kubernetes: OpenTelemetry, Camel & Quarkus](https://daily.dev/posts/observability-on-kubernetes-opentelemetry-camel-quarkus-q9gx7ah7s) · Piotr Minkowski TechBlog · 5 upvotes · 1 comments
- [Automate test and failure analysis via streams for Apache Kafka](https://daily.dev/posts/automate-test-and-failure-analysis-via-streams-for-apache-kafka-2gnxpoh1b) · Red Hat Developer · 4 upvotes · 0 comments
- [Supersonic Subatomic Debezium Server: Native builds with Quarkus and Mandrel](https://daily.dev/posts/supersonic-subatomic-debezium-server-native-builds-with-quarkus-and-mandrel-a5wrequxx) · Debezium · 7 upvotes · 0 comments
- [From 40 seconds to under 10: rebuilding incident detection on OpenTelemetry, Apache Kafka, and Apache Flink on Kubernetes](https://daily.dev/posts/from-40-seconds-to-under-10-rebuilding-incident-detection-on-opentelemetry-apache-kafka-and-apach-owhrwpfy6) · CNCF · 9 upvotes · 0 comments
- [Quarkus Newsletter \#65 - February](https://daily.dev/posts/quarkus-newsletter-65---february-7fnk26ytp) · Quarkus · 0 upvotes · 0 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#kafka](https://daily.dev/tags/kafka), [#quarkus](https://daily.dev/tags/quarkus), [#change-data-capture](https://daily.dev/tags/change-data-capture), [#debezium](https://daily.dev/tags/debezium)

[View this post on daily.dev](https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How Trax keeps aircraft maintenance real-time with Quarkus","url":"https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g"},"datePublished":"2026-10-26T22:38:53.731Z","dateModified":"2026-10-26T23:02:36.075Z","description":"Trax, an aviation maintenance software provider, built its real-time eMobility platform on Quarkus. Debezium captures Oracle redo log changes and publishes...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7ab97eced21a845aaca4e155a5e5171?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7ab97eced21a845aaca4e155a5e5171?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Quarkus","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Quarkus","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/8adf82d719bb4a9492f44a28a27fd396","url":"https://daily.dev/sources/quarkus"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev,kafka,quarkus,change-data-capture,debezium","timeRequired":"PT13M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Quarkus","item":"https://daily.dev/sources/quarkus"},{"@type":"ListItem","position":3,"name":"How Trax keeps aircraft maintenance real-time with Quarkus"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-trax-keeps-aircraft-maintenance-real-time-with-quarkus-qzzyoeg2g#faq","mainEntity":[{"@type":"Question","name":"Why would you use a Kubernetes pod's HOSTNAME as the Kafka Streams application id?","acceptedAnswer":{"@type":"Answer","text":"Because Kafka Streams derives its consumer group from the application id, and a consumer group divides partitions among members, so a shared application id would deliver each change event to only one pod. Using HOSTNAME, which Kubernetes sets to the unique, stable pod name, gives every pod its own consumer group so all pods see every record, letting each one broadcast to the WebSocket clients connected to it. Building broadcast-style event consumers on Kafka Streams? See architecture patterns like this one on daily.dev."}},{"@type":"Question","name":"How do you stop a React app from re-rendering excessively when consuming a noisy change data capture (CDC) stream?","acceptedAnswer":{"@type":"Answer","text":"Debounce updates before broadcasting them: enqueue each change into a map keyed by the record's identity and use a shared trailing timer that flushes the batch after a fixed delay, such as one second. This collapses repeated updates to the same record into one message and turns a thousand-row batch job into a single notification instead of a thousand separate pushes. Developers tuning real-time CDC pipelines can find more implementation patterns like this on daily.dev."}},{"@type":"Question","name":"How can a browser keep a WebSocket connection alive when JavaScript cannot send RFC 6455 ping frames?","acceptedAnswer":{"@type":"Answer","text":"Have the browser send a literal text message such as 'ping' and reply with 'pong' from an @OnTextMessage handler, while native clients that can send real ping control frames are handled separately with @OnPingMessage. Quarkus's websockets-next extension also supports a server-side auto-ping-interval configuration property to keep connections alive through firewalls and flaky Wi-Fi. Teams hardening WebSocket connections across web and native clients can track techniques like this on daily.dev."}}]}
```

