Skip to main content
Use the JFR record reader to convert Java Flight Recorder recordings into Pinot rows for offline analysis. Each JFR event becomes a row, with common event metadata and flattened event fields available as Pinot columns.

Classes

When to Use

Use this reader when you want to:
  • Load .jfr recordings into an offline Pinot table.
  • Analyze JVM, GC, thread, allocation, and profiling events with SQL.
  • Ingest StarTree query tracing recordings and join operational JFR fields with trace context.
  • Process LZ4-compressed JFR files whose file name ends in .lz4.

Input Files

The reader supports: Use file-name filters to make sure the ingestion job only selects JFR files:
For compressed recordings:

Record Reader Config

The JFR config has one option:

Standalone Batch Job Example

Use dataFormat: 'jfr' with the JFR record reader and config class:

FileIngestionTask Example

For minion-based file ingestion, use the JFR input format and keep the file filter narrow:
Use the standalone job spec when you need to explicitly set className and configClassName. Use FileIngestionTask when your cluster has the jfr format registered and available to minions.

Output Fields

Every output row includes: The reader also flattens JFR event fields: Because JFR event types differ, the set of populated columns varies by row. Use default null values or Pinot null handling for sparse event fields.

Minimal Schema Example

This schema captures common fields that are useful for query profiling:

Table Config Example

Use indexes on event type, stack frame, trace fields, and time ranges to make profile exploration faster:

Denormalized StarTree Trace Context

When denormalize is true, the reader performs a pre-pass over the recording:
  1. Finds StarTree JFR events whose event type starts with startree and that contain traceId.
  2. Records each event’s threadId, startTime, duration, traceId, spanId, and spanName.
  3. Rewinds the recording.
  4. Enriches non-StarTree events on the same thread when the event start time falls inside a recorded StarTree trace frame.
The enriched row gets:
Enable this when the recording contains StarTree tracing events and you want JVM/profile events to be queryable by trace/span context.

Example Queries

Find the busiest event types:
Find hot stack frames:
Inspect events for a trace:

Troubleshooting