JRob
12/16/2025, 4:08 PMVineeth
12/16/2025, 6:39 PMLee Schumacher
12/18/2025, 5:34 PMAdithya Shetty
12/26/2025, 6:23 PMin-place upgrade for Historicals:
• stop the Historical process
• clean up tmp directories and old Druid 29.x binaries
• keep the local segmentCache directory(data dir) intact
• install Druid 30.x and restart the service
The expectation is that on startup the Historical will re-announce and reuse existing local segments (no deep-storage re-downloads), so downtime per node is ~10–15 minutes. We have replicas, so no query downtime is expected.
Is this approach supported for major version upgrades?
Are there any known issues to watch out for (segment compatibility, tmp directories, map state, or other on-disk artifacts) when reusing the same instance and segment cache across 29.x -> 30.x?
Any guidance or confirmation would be appreciated. Thanks!Adithya Shetty
12/30/2025, 9:18 PMdruid.processing.buffer.sizeBytes
• druid.processing.numMergeBuffers
• druid.processing.numThreads
I want to understand how are these used when processing the druid queries, couldn't get much clarity from docs. Could anyone please explain these?
I see there are formulas in the docs, but wanted to understand the logic behind them. For example, when we increase numThreads, more query processing and row scanning happens in parallel, but at some point groupBy/aggregation phases require merge buffers. If merge buffers are insufficient, does query processing block waiting for a merge buffer? What are the key factors to decide appropriate values for these?
https://druid.apache.org/docs/latest/configuration/#historical
2. Heap vs direct memory allocation
Here,
https://druid.apache.org/docs/30.0.1/configuration/#segmentwriteoutmediumfactory
it mentions that for MiddleManagers, heap and direct memory should be the same size. Why is that requirement there?
Also, does this recommendation apply to Historicals as well? ThanksPHP Dev
02/16/2026, 10:55 AMPranav
02/18/2026, 4:48 PMJonathan YAKAN
03/06/2026, 10:28 AMAdithya Shetty
03/12/2026, 11:55 PMisolation.level is set to read_committed
https://druid.apache.org/docs/30.0.1/ingestion/kafka-ingestion/#consumer-properties
But in latest version, I see default value is set to read_uncommitted . Is there any reason why default value is changed. I believe read_commited provides correct behaviour when producer uses transactions/idempotency and has no negative impact when it's not
https://druid.apache.org/docs/latest/ingestion/kafka-ingestion/#consumer-propertiesPawel Rzepinski
04/02/2026, 8:40 AMWhen reading external data, EXTERN can read multiple files in parallel across different worker tasks. However, EXTERN does not split individual files across multiple worker tasks- docs - We should have number of tasks between 2 (1 controller + 1 worker, minimal parallelism) and number of files we are reading (maximum parallelism). - Question 1: If we have 1 task with 4 threads can it read 4 files at once? - Question 2: If we are reading 10 files and writing 20 segments - can segment writing also take advantage of parallelism? Shouldwe have 10 tasks each with 2 threads then?
Worker tasks run single-threaded, which also determines the maximum number of processors on the server that can contribute towards multi-stage queries.- docs - Question 3: Does this relate to default of maxThreads = 1? Or does it mean something else? - Question 4: I am confused. There 3 different mentions of a default thread count for a worker and they give slight different answers. Here we have mention of "single-threaded", in code there a default of 1 thread, here we have "Not set (use default thread count)" (does it mean 1 or
druid.processing.numThreads value?)
Indexing service tasks of type- docs - We can have more than 1 thread per task if we want to parallelize some stage of a query. This can be set in query context (capped atthat execute a query. There can be multiple worker tasks per query. Internally, the tasks process items in parallel using their processing pools (up toquery_workerof execution parallelism within a worker task).druid.processing.numThreads
druid.processing.numThreads config value set for Peon that picks up the task).
- Question 5: What is the benefit of higher druid.processing.numThreads? What query stages can be parallelized? If I am doing simple ingestion (few files, simple select with no transformations) would I benefit from higher thread count at all?David Alexander
04/09/2026, 3:27 PMdruid.server.http.numThreads and druid.query.scheduler.numThreads, it seems the former enforces when 429s will be returned (enableRequestLimit=true here), but I found in the code this enableRequestQueuing that is not documented that when we set to false manually (by default its true), we get the scheduler.numThreads being used as the limit after which 429s are returned. I just wanted to know:
1. Why is this flag not documented, and why is it intended to be removed? I am thinking we would want to enforce limit at the scheduler number because we would always want some capacity of threads avaialble for health checks and to return a 429 to the router - but do let me know if I'm missing something here with how load shedding can be done on the broker
2. On load shedding, would we want the historicals to return a 429, or is that a bad practice? Wondering if that could cause the overall query to fail at the broker or even the broker response to be incompletePawel Rzepinski
04/15/2026, 11:50 AM{
"type": "index_parallel",
"spec": {
"dataSchema": {
"dataSource": "test_2r_1d_1m_no_rollup",
"timestampSpec": {
"column": "ts",
"format": "auto"
},
"dimensionsSpec": {
"dimensions": [
"category"
]
},
"metricsSpec": [
{
"type": "longSum",
"name": "sum_val",
"fieldName": "val"
}
],
"granularitySpec": {
"queryGranularity": "hour",
"rollup": false
}
},
"ioConfig": {
"type": "index_parallel",
"inputSource": {
"type": "inline",
"data": "{\"ts\":\"2026-04-15T10:00:00Z\", \"category\":\"A\", \"val\":10}\n{\"ts\":\"2026-04-15T10:00:00Z\", \"category\":\"A\", \"val\":5}"
},
"inputFormat": {
"type": "json"
}
}
}
}Pramod Immaneni
05/06/2026, 10:37 PMAdithya Shetty
05/18/2026, 6:57 PMstopTaskCount=2 , taskCount=4 and replicas=2 , does stopTaskCount stop 2 task groups (all replicas included), or 2 individual tasks(staggering the two replicas)?
2. With same config as above, will both replicas of a task group start at the same time? During intermediatePersistPeriod flushes, will both hit persist roughly simultaneously? If one peon is blocked on merge buffer acquisition, can the broker use the other replica's peon to serve the query, or does it wait for both?Adithya Shetty
05/19/2026, 3:17 AMJRob
05/19/2026, 3:09 PMJRob
05/19/2026, 3:11 PMStefanos Pliakos
05/21/2026, 1:44 PMhelm repo add datainfrahq <https://datainfrahq.github.io/druid-operator>
but now there is nowhere to be found. ANY IDEA ANYONE?hbajaj
05/27/2026, 8:26 AM(metric_name, resource_id) to act as a presence check so the broker can skip full segment scans when no data exists for that pair.
Curious about real-world experience — ingestion overhead, backfill on existing segments, whether the planner reliably picks the projection for this "is there data" shape.
Thanks!Cristina Munteanu
06/16/2026, 8:11 PMLuke Foskey
06/17/2026, 5:37 AMVP
06/29/2026, 3:27 PMschmichri
06/30/2026, 9:26 AMPawel Rzepinski
07/03/2026, 8:09 AMAdithya Shetty
07/14/2026, 1:22 AMpuja.k
08/18/2026, 4:50 PMpuja.k
08/19/2026, 4:57 PMVinaya Simha V
09/04/2026, 8:44 AMAbhishek Balaji Radhakrishnan
09/07/2026, 7:04 PMJRob
09/18/2026, 5:38 PMDirect Memory: (druid.processing.numMergeBuffers + 1) * druid.processing.buffer.sizeBytes
But the actual limit is:
(druid.server.http.numThreads + druid.processing.numMergeBuffers + 1) * druid.processing.buffer.sizeBytes
Obviously this can get quite large because we want a large number of HTTP threads. However, an HTTP thread only grabs a buffer when it is processing intermediate results, which happens rarely or in bursts. In practice I haven't seen much more than 9 of these at a time (with http threads at 60).
The key problem I see here is that there is no ability to cap the buffer pool since the SimplePool never rejects a request.
Thoughts on this?