Boris Tashkulov
02/27/2026, 8:27 AMMark
03/02/2026, 8:14 AMRaghvendra Yadav
03/05/2026, 10:57 PMYash Mayya
03/17/2026, 4:37 AMSrinivasan Duraiswamy
04/01/2026, 2:28 PMSrinivasan Duraiswamy
04/02/2026, 2:19 AMRaghavendra M
04/02/2026, 9:29 AMZEBIN KANG
04/07/2026, 7:37 PMjvm_memory_bytes_used{instance=~'.*staging.*',area="heap"} / on(instance) group_left jvm_memory_bytes_max{instance=~"pinot-.*",instance=~".*staging-.*",instance=~".*realtime-.*",area="heap"} * 100
cc: @Neeraja Sridharan @Sai Tarun TadakamallaShubham Kumar
04/11/2026, 9:36 PMBrokerResourceMissingError (410) on a REALTIME table after adding this to broker config:
pinot.broker.adaptive.server.selector.enable.stats.collection=true
pinot.broker.adaptive.server.selector.type=HYBRID
After updating the config, I am encountering the following error while running the query:
Error Code: 410 (BrokerResourceMissingError)
BrokerResourceMissingError
What am I missing here?
Observations:
• All 3 brokers: idealState: ONLINE but externalView: ERROR for this table only
• Other tables querying fine
• rebuildBrokerResourceFromHelixTags returns "ideal state is the same"Raghavendra M
04/14/2026, 6:51 AMSan Kumar
04/15/2026, 11:54 AMYash Mayya
04/15/2026, 8:34 PMRishabh Sharma
04/22/2026, 5:56 AM.0 files (in the consumers directory) which act as a Write-Ahead Log (WAL) buffer for the currently consuming segment. This continues until a flush is triggered, at which point the .0 file is sealed, converted into an immutable Pinot segment (columnar format with indexes), and a new .0 file is created for the next consuming segment.
With this understanding, I noticed that when the server starts, these .0 files are created immediately before any data arrives — one per Kafka partition. For example for a table with 3 partitions I see them under:
data/server/index/table_REALTIME/consumers/
-rw-r--r--. 1 pinot pinot 536870912 Apr 21 16:20 table__0__0__20260421T1050Z.0
-rw-r--r--. 1 pinot pinot 536870912 Apr 21 16:20 table__1__0__20260421T1050Z.0
-rw-r--r--. 1 pinot pinot 536870912 Apr 21 16:20 table__2__0__20260421T1050Z.0
When I check with ls -lh they always show 512MB regardless of what I set for realtime.segment.flush.desired.size or realtime.segment.flush.threshold.rows. However when I check with du -sh they only show 128KB:
128K table__0__0__20260421T1050Z.0
128K table__1__0__20260421T1050Z.0
128K table__2__0__20260421T1050Z.0
My questions are:
1. Is my understanding correct that .0 files act as WAL buffers for incoming Kafka data before segment commit?
2. Is 512MB a hardcoded pre-allocation size in Pinot regardless of flush settings or can it be configured?
3. Does flush.desired.size only control WHEN the file is flushed/sealed, not the pre-declared file size?
4. As real data arrives from Kafka, will du grow until it hits flush.desired.size and then trigger a flush — meaning the maximum real disk consumed per .0 file equals flush.desired.size?
5. After flush, a new .0 file is created — does it again show 512MB in ls but 128KB in du?
Also what exactly is stored in those initial 128KB — is it column metadata, index structures, or something else?"
@Mayank, @Xiang FuShubham Kumar
04/29/2026, 10:37 AMKoliparthi Lokesh
05/05/2026, 4:52 AMRANJITH KUMAR
05/14/2026, 10:00 AMSenthil Maruthaiappan
05/28/2026, 8:52 PM30 different segments of a table. I use timestamp for the segment partitioning and also setup rangeindexcolumn on the same column 'report_date'. for example select name, total_sales from product_sales where report_date > '2024-01-20' and report_date < '2024-01-27'. I see that no index has been used for this because numEntriesScannedInFilter is not zero. Lets say, I have 100k rows per segment for 30days worth of data then takes about `504ms f`or the query. Anyone knows how to optimize or tune any of the stuff?Valentina
06/23/2026, 8:03 AMWilson
06/24/2026, 10:05 AMSamuel Papin
06/26/2026, 1:03 AMXiang Fu
Rkr
08/13/2026, 6:27 AMRkr
08/14/2026, 3:22 AMRamnik Jain
08/18/2026, 4:07 AMVitor Mattioli
08/28/2026, 3:21 PMSumit Joshi
09/02/2026, 6:31 PMYuri Niitsuma
09/02/2026, 10:17 PMpinot-gateway to route and log queries to kafka or database as a proxy between the client and Pinot Broker.
github.com/ignitz/pinot-gateway
If you wanna learn more about it, can check in this post.
medium.com/@ignitzhjfk/pinot-gateway-closing-the-observability-gap-in-apache-pinot-with-a-query-logger-and-an-ai-feedback…ZEBIN KANG
09/09/2026, 4:51 PM-Xmx 38G, -XX:InitiatingHeapOccupancyPercent=25). After tuning (retention reduction, Xmx increase, instance spread), Old Gen sits at 38–44% depending on the PK sawtooth phase. The PK map is 98% of heap (jmap -histo:live verified, 206 bytes/entry).
We see zero old-gen GC events, 0 query failures, and P50 180ms across 7,200-query benchmarks. However, @Mayank also provided the guideline recommending Old Gen <30% of Xmx for upsert tables or max heap < 70% of Xmx .
So we want to double check if one of the following condition a safe steady state for production
1. ~45% Old Gen with 0 old-gen GC
2. max heap < 70% most of time but some seldom random spike to > 80%Priyanshu Soni
09/09/2026, 4:59 PMZEBIN KANG
09/16/2026, 8:43 PMcompleted block shown as below is helpful for prevent segment relocation after completion thanks
"COMPLETED": {
"tagPoolConfig": {
"tag": "general-realtime",
"poolBased": true,
"numPools": 0
},
"replicaGroupPartitionConfig": {
"replicaGroupBased": true,
"numInstances": 0,
"numReplicaGroups": {{ table_attributes.num_replica_groups }},
"numInstancesPerReplicaGroup": {{ table_attributes.num_instances_per_replica_group }},
"numPartitions": {{ table_attributes.num_segment_partitions }},
"numInstancesPerPartition": 1,
"minimizeDataMovement": true
},
"partitionSelector": "INSTANCE_REPLICA_GROUP_PARTITION_SELECTOR"
}