Skip to content

Conversation

@carlesarnal
Copy link
Member

@carlesarnal carlesarnal commented Jan 13, 2026

Summary

  • Adds a comprehensive OpenTelemetry distributed tracing example demonstrating end-to-end tracing across Kafka (Strimzi) and Apicurio Registry
  • Includes Docker Compose and Kubernetes deployment configurations
  • Provides Quarkus producer and consumer applications with OTel instrumentation

Root Cause

Closes #7109 - Users need reference material showing how to configure OTel tracing in a realistic distributed environment with Kafka and Apicurio Registry.

Changes

  • Added new examples/otel-tracing module with:
    • Docker Compose configuration for local deployment (Jaeger, OTel Collector, Kafka, PostgreSQL, Registry)
    • OpenTelemetry Collector configuration
    • Quarkus producer application demonstrating schema registration and trace propagation
    • Quarkus consumer application demonstrating schema lookup and trace extraction
    • Kubernetes manifests for K8s deployment with Strimzi
    • Comprehensive README documentation covering:
      • Architecture overview
      • Quick start guide for Docker Compose
      • Kubernetes deployment instructions
      • Trace propagation patterns
      • Sampling strategies
      • Troubleshooting guide

Test plan

  • Build producer and consumer applications with mvn clean package -DskipTests
  • Start infrastructure with docker compose up -d
  • Verify all services start successfully
  • Send test messages via curl -X POST "http://localhost:8081/greetings?name=World"
  • Verify traces appear in Jaeger UI at http://localhost:16686
  • Verify trace context propagation across producer -> Kafka -> consumer -> registry
  • Test batch message sending with /greetings/batch endpoint
  • Clean up with docker compose down -v

Resolves #7109

This example demonstrates end-to-end distributed tracing across a complete
stack incorporating Kafka (using Strimzi images) and Apicurio Registry.
Traces flow from message producers through consumers and schema validation
operations, allowing visualization of the complete request flow in Jaeger.

Components included:
- Docker Compose configuration for local deployment
- OpenTelemetry Collector configuration
- Quarkus producer application with OTel instrumentation
- Quarkus consumer application with OTel instrumentation
- Kubernetes manifests for K8s deployment with Strimzi
- Comprehensive documentation

Resolves Apicurio#7109
…acing example

- Update Quarkus version from 3.17.7 to 3.27.0 to fix Jandex index version incompatibility
- Add quarkus-apicurio-registry-avro extension with exclusions to satisfy Quarkus Kafka processor checks
- Replace bundled 2.x serde with project's own 3.x apicurio-registry-avro-serde-kafka
- Remove invalid quarkus.otel.instrument.kafka property (Kafka OTel is automatic)
- Remove deprecated quarkus.health.extensions.enabled property
- Update docker-compose.yml and README.md to remove invalid config references
- Add Avro schema to consumer module for Quarkus code generation
@carlesarnal carlesarnal marked this pull request as ready for review January 14, 2026 13:00
@carlesarnal carlesarnal added this to the 3.1.7 milestone Jan 14, 2026
@carlesarnal carlesarnal moved this to In Progress in Registry 3.1 Jan 14, 2026
@carlesarnal carlesarnal moved this from In Progress to In Review in Registry 3.1 Jan 14, 2026
The OTEL signal properties (traces/metrics/logs enabled) are build-time
properties in Quarkus that cannot be changed at runtime. This fix:

- Enables all OTEL signals at build-time (available for use)
- Adds quarkus.otel.sdk.disabled=true as runtime default (OTEL off)
- Users enable OTEL by setting QUARKUS_OTEL_SDK_DISABLED=false

This ensures OTEL can be properly controlled at deployment time.

Fixes Apicurio#7147
- Add custom spans using @WithSpan annotation and Tracer API
- Add error tracing endpoint with recordException() demonstration
- Add baggage propagation for tenant context across services
- Implement background consumer with GreetingMessageStore for realistic pattern
- Add Kafka partition/offset span attributes
- Add consumer statistics endpoint (/consumer/stats)
- Add batch consumption endpoints
- Add verification scripts (smoke-test.sh, verify-tracing.sh, test-scenarios.sh)
- Update README with comprehensive verification section and API reference
- Fix K8s registry.yaml to use QUARKUS_OTEL_SDK_DISABLED instead of build-time properties
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create OpenTelemetry distributed tracing example with Strimzi Kafka and Apicurio Registry

1 participant