Yash 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"
}Xiang Fu
GROUPING SETS, ROLLUP, and CUBE
• New vector-index backends
• Ingestion, query, and reliability improvements
Upgrade note: Pinot services now require Java 25+. Java/JDBC clients and explicitly targeted SPI/common artifacts remain Java 11-compatible. Please review the upgrade notes, removals, and SMART aggregation mixed-version restrictions before upgrading.
📦 Downloads
📝 Release notes and upgrade guidance
📚 1.6.0 documentation
Thanks to everyone who contributed, tested, and voted for this release!Raghvendra Yadav
11/02/2026, 9:32 PMDhanesh Dhakrey
11/06/2026, 4:58 AM-Xmx52g)
• Pinot Minion: 32 GB (-Xmx32g)
• Pinot Broker: 24 GB (-Xmx24g)
• ZooKeeper: 1 GB (-Xmx1g)
We are considering increasing only the Pinot Server heap from 52 GB to 132 GB (-Xmx132g). The heap allocations for the Minion, Broker, and ZooKeeper will remain unchanged.
My main concern is not just heap usage, but the total RSS (physical memory consumption) of all processes, since RSS includes heap, off-heap memory, memory-mapped segments, native allocations, etc.
My questions:
1. How much physical RAM should ideally remain available for off-heap memory and OS filesystem cache after accounting for all JVM heaps?
2. Is there a recommended heap-to-off-heap ratio for Pinot Servers handling heavy query workloads?
3. How should we account for the combined RSS of Server, Minion, Broker, and ZooKeeper when deciding the Server’s maximum heap?
4. Would increasing the Server heap from 52 GB to 132 GB improve query performance, or could it negatively affect performance by reducing memory available for mmap pages and filesystem caching?
5. Are there any real-world production recommendations for heap sizing on a 252 GB RAM node?
Would appreciate suggestions based on production experience.