Alexander Maniates
12/09/2025, 8:55 PMmetadataTTL is set, do primary keys then expire and free up memroy at the end of the data TTL (set by the segmentsConfig retention settings)? Or do primary keys live forever in this case?
2. Should metadataTTL always be set to longer than the segment config retention setting? I imagine if you went to update a record that fell out of the metadataTTL, but the old segment data was still around, you could have duplicate data at that point?Padmini
12/10/2025, 12:28 PMShubham Kumar
12/15/2025, 6:45 PMRealtimeSegmentValidationManager task, after that also triggered this api tables/{{table_name}}/resumeConsumption?consumeFrom=largest still consuming segments are not spawning. Please help to resolve thisSubham Soni
12/16/2025, 5:56 AMWe create files of length 0.5g (or the requested buffer length, whichever is higher), and map areas of the file for each allocation request within a segmentCan someone confirm if at least 512MB is allocated per Kafka partition consumer, and is there a way to configure this size to reduce RES memory usage incase of high partition count ?
San Kumar
12/17/2025, 12:25 PMSan Kumar
12/17/2025, 12:46 PMSubham Soni
12/30/2025, 12:41 PMUtsav Jain
02/23/2026, 10:00 AMApache Pinot 1.2.0 and we are facing a scaling issue with realtime upserts enabled for our use case, due to the nature of the primary key the updates can fall in after the expiration window of the metadataTTL defined (~8hrs) in our table config, since we cannot keep infinite retention so we are not able to show accurate information on our views due to duplicate entries being recorded
We are thinking to write a custom minion job, which should do stuffs like
1. Fetch all such duplicate entries within a time window
2. Only keep the latest one and mark others as invalid so that they can be taken up for deletion in future
We wanted to get community help as we didn't find any resources which provides such functionality open source , can anyone help with any references or starting point so that it can help us to use pinot efficiently
cc: @Abhigyan Bharati @Xiang FuValentina
02/25/2026, 7:58 AMBoris 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