Project: Druid (App Definition and Development / Database)
File: tasks-api.md

id: tasks-api title: Tasks API sidebar_label: Tasks import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; <!-- ~ Licensed to the Apache Software Foundation (ASF) under one ~ or more contributor license agreements. See the NOTICE file ~ distributed with this work for additional information ~ regarding copyright ownership. The ASF licenses this file ~ to you under the Apache License, Version 2.0 (the ~ "License"); you may not use this file except in compliance ~ with the License. You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, ~ software distributed under the License is distributed on an ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ~ KIND, either express or implied. See the License for the ~ specific language governing permissions and limitations ~ under the License. --> This document describes the API endpoints for task retrieval, submission, and deletion for Apache Druid. Tasks are individual jobs performed by Druid to complete operations such as ingestion, querying, and compaction. In this topic, `http://ROUTERIP:ROUTERPORT` is a placeholder for the Router service address and port. For example, on the quickstart configuration, use `http://localhost:8888`. Retrieves an array of all tasks in the Druid cluster. Each task object includes information on its ID, status, associated datasource, and other metadata. For definitions of the response properties, see the . `GET` `/druid/indexer/v1/tasks` The endpoint supports a set of optional query parameters to filter results. |Parameter|Type|Description| |||| |`state`|String|Filter list of tasks by task state, valid options are `running`, `complete`, `waiting`, and `pending`.| | `datasource`|String| Return tasks filtered by Druid datasource.| | `createdTimeInterval`|String (ISO-8601)| Return tasks created within the specified interval. Use `` as the delimiter for the interval string. Do not use `/`. For example, `2023-06-272023-06-28`.| | `max`|Integer|Maximum number of `complete` tasks to return. Only applies when `state` is set to `complete`.| | `type`|String|Filter tasks by task type. See for more details.| <Tabs> <TabItem value="1" label="200 SUCCESS"> <br/> Successfully retrieved list of tasks </TabItem> <TabItem value="2" label="400 BAD REQUEST"> <br/> Invalid `state` query parameter value </TabItem> <TabItem value="3" label="500 SERVER ERROR"> <br/> Invalid query parameter </TabItem> </Tabs> The following example shows how to retrieve a list of tasks filtered with the following query parameters: State: `complete` Datasource: `wikipedia_api` Time interval: between `2015-09-12` and `2015-09-13` Max entries returned: `10` Task type: `query_worker` <Tabs> <TabItem value="4" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/tasks/?state=complete&datasource=wikipediaapi&createdTimeInterval=2015-09-122015-09-13&max=10&type=query_worker" ``` </TabItem> <TabItem value="5" label="HTTP"> ```HTTP GET /druid/indexer/v1/tasks/?state=complete&datasource=wikipediaapi&createdTimeInterval=2015-09-122015-09-13&max=10&type=query_worker HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json [ { "id": "query-223549f8-b993-4483-b028-1b0d54713cad-worker0_0", "groupId": "query-223549f8-b993-4483-b028-1b0d54713cad", "type": "query_worker", "createdTime": "2023-06-22T22:11:37.012Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "SUCCESS", "status": "SUCCESS", "runnerStatusCode": "NONE", "duration": 17897, "location": { "host": "localhost", "port": 8101, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null }, { "id": "query-fa82fa40-4c8c-4777-b832-cabbee5f519f-worker0_0", "groupId": "query-fa82fa40-4c8c-4777-b832-cabbee5f519f", "type": "query_worker", "createdTime": "2023-06-20T22:51:21.302Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "SUCCESS", "status": "SUCCESS", "runnerStatusCode": "NONE", "duration": 16911, "location": { "host": "localhost", "port": 8101, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null }, { "id": "query-5419da7a-b270-492f-90e6-920ecfba766a-worker0_0", "groupId": "query-5419da7a-b270-492f-90e6-920ecfba766a", "type": "query_worker", "createdTime": "2023-06-20T22:45:53.909Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "SUCCESS", "status": "SUCCESS", "runnerStatusCode": "NONE", "duration": 17030, "location": { "host": "localhost", "port": 8101, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null } ] ``` </details> Retrieves an array of completed tasks in the Druid cluster. This is functionally equivalent to

For definitions of the response properties, see the . `GET` `/druid/indexer/v1/completeTasks` The endpoint supports a set of optional query parameters to filter results. |Parameter|Type|Description| |||| | `datasource`|String| Return tasks filtered by Druid datasource.| | `createdTimeInterval`|String (ISO-8601)| Return tasks created within the specified interval. The interval string should be delimited by `` instead of `/`. For example, `2023-06-272023-06-28`.| | `max`|Integer|Maximum number of `complete` tasks to return. Only applies when `state` is set to `complete`.| | `type`|String|Filter tasks by task type. See for more details.| <Tabs> <TabItem value="6" label="200 SUCCESS"> <br/> Successfully retrieved list of complete tasks </TabItem> <TabItem value="7" label="404 NOT FOUND"> <br/> Request sent to incorrect service </TabItem> </Tabs> <Tabs> <TabItem value="8" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/completeTasks" ``` </TabItem> <TabItem value="9" label="HTTP"> ```HTTP GET /druid/indexer/v1/completeTasks HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json [ { "id": "query-223549f8-b993-4483-b028-1b0d54713cad-worker0_0", "groupId": "query-223549f8-b993-4483-b028-1b0d54713cad", "type": "query_worker", "createdTime": "2023-06-22T22:11:37.012Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "SUCCESS", "status": "SUCCESS", "runnerStatusCode": "NONE", "duration": 17897, "location": { "host": "localhost", "port": 8101, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null }, { "id": "query-223549f8-b993-4483-b028-1b0d54713cad", "groupId": "query-223549f8-b993-4483-b028-1b0d54713cad", "type": "query_controller", "createdTime": "2023-06-22T22:11:28.367Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "SUCCESS", "status": "SUCCESS", "runnerStatusCode": "NONE", "duration": 30317, "location": { "host": "localhost", "port": 8100, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null } ] ``` </details> Retrieves an array of running task objects in the Druid cluster. It is functionally equivalent to `/druid/indexer/v1/tasks?state=running`. For definitions of the response properties, see the . `GET` `/druid/indexer/v1/runningTasks` The endpoint supports a set of optional query parameters to filter results. |Parameter|Type|Description| |||| | `datasource`|String| Return tasks filtered by Druid datasource.| | `createdTimeInterval`|String (ISO-8601)| Return tasks created within the specified interval. The interval string should be delimited by `` instead of `/`. For example, `2023-06-272023-06-28`.| | `max`|Integer|Maximum number of `complete` tasks to return. Only applies when `state` is set to `complete`.| | `type`|String|Filter tasks by task type. See for more details.| <Tabs> <TabItem value="10" label="200 SUCCESS"> <br/> Successfully retrieved list of running tasks </TabItem> </Tabs> <Tabs> <TabItem value="11" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/runningTasks" ``` </TabItem> <TabItem value="12" label="HTTP"> ```HTTP GET /druid/indexer/v1/runningTasks HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json [ { "id": "query-32663269-ead9-405a-8eb6-0817a952ef47", "groupId": "query-32663269-ead9-405a-8eb6-0817a952ef47", "type": "query_controller", "createdTime": "2023-06-22T22:54:43.170Z", "queueInsertionTime": "2023-06-22T22:54:43.170Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "RUNNING", "duration": -1, "location": { "host": "localhost", "port": 8100, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null } ] ``` </details> Retrieves an array of waiting tasks in the Druid cluster. It is functionally equivalent to `/druid/indexer/v1/tasks?state=waiting`. For definitions of the response properties, see the . `GET` `/druid/indexer/v1/waitingTasks` The endpoint supports a set of optional query parameters to filter results. |Parameter|Type|Description| |||| | `datasource`|String| Return tasks filtered by Druid datasource.| | `createdTimeInterval`|String (ISO-8601)| Return tasks created within the specified interval. The interval string should be delimited by `` instead of `/`. For example, `2023-06-272023-06-28`.| | `max`|Integer|Maximum number of `complete` tasks to return. Only applies when `state` is set to `complete`.| | `type`|String|Filter tasks by task type. See for more details.| <Tabs> <TabItem value="13" label="200 SUCCESS"> <br/> Successfully retrieved list of waiting tasks </TabItem> </Tabs> <Tabs> <TabItem value="14" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/waitingTasks" ``` </TabItem> <TabItem value="15" label="HTTP"> ```HTTP GET /druid/indexer/v1/waitingTasks HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json [ { "id": "indexparallelwikipediaautobiahcbmf_2023-06-26T21:08:05.216Z", "groupId": "indexparallelwikipediaautobiahcbmf_2023-06-26T21:08:05.216Z", "type": "index_parallel", "createdTime": "2023-06-26T21:08:05.217Z", "queueInsertionTime":

"statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "WAITING", "duration": -1, "location": { "host": null, "port": -1, "tlsPort": -1 }, "dataSource": "wikipedia_auto", "errorMsg": null }, { "id": "indexparallelwikipediaautoafggfiec_2023-06-26T21:08:05.546Z", "groupId": "indexparallelwikipediaautoafggfiec_2023-06-26T21:08:05.546Z", "type": "index_parallel", "createdTime": "2023-06-26T21:08:05.548Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "WAITING", "duration": -1, "location": { "host": null, "port": -1, "tlsPort": -1 }, "dataSource": "wikipedia_auto", "errorMsg": null }, { "id": "indexparallelwikipediaautojmmddihf_2023-06-26T21:08:06.644Z", "groupId": "indexparallelwikipediaautojmmddihf_2023-06-26T21:08:06.644Z", "type": "index_parallel", "createdTime": "2023-06-26T21:08:06.671Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "WAITING", "duration": -1, "location": { "host": null, "port": -1, "tlsPort": -1 }, "dataSource": "wikipedia_auto", "errorMsg": null } ] ``` </details> Retrieves an array of pending tasks in the Druid cluster. It is functionally equivalent to `/druid/indexer/v1/tasks?state=pending`. For definitions of the response properties, see the . `GET` `/druid/indexer/v1/pendingTasks` The endpoint supports a set of optional query parameters to filter results. |Parameter|Type|Description| |||| | `datasource`|String| Return tasks filtered by Druid datasource.| | `createdTimeInterval`|String (ISO-8601)| Return tasks created within the specified interval. The interval string should be delimited by `` instead of `/`. For example, `2023-06-272023-06-28`.| | `max`|Integer|Maximum number of `complete` tasks to return. Only applies when `state` is set to `complete`.| | `type`|String|Filter tasks by task type. See for more details.| <Tabs> <TabItem value="16" label="200 SUCCESS"> <br/> Successfully retrieved list of pending tasks </TabItem> </Tabs> <Tabs> <TabItem value="17" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/pendingTasks" ``` </TabItem> <TabItem value="18" label="HTTP"> ```HTTP GET /druid/indexer/v1/pendingTasks HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json [ { "id": "query-7b37c315-50a0-4b68-aaa8-b1ef1f060e67", "groupId": "query-7b37c315-50a0-4b68-aaa8-b1ef1f060e67", "type": "query_controller", "createdTime": "2023-06-23T19:53:06.037Z", "queueInsertionTime": "2023-06-23T19:53:06.037Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "PENDING", "duration": -1, "location": { "host": null, "port": -1, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null }, { "id": "query-544f0c41-f81d-4504-b98b-f9ab8b36ef36", "groupId": "query-544f0c41-f81d-4504-b98b-f9ab8b36ef36", "type": "query_controller", "createdTime": "2023-06-23T19:53:06.616Z", "queueInsertionTime": "2023-06-23T19:53:06.616Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "PENDING", "duration": -1, "location": { "host": null, "port": -1, "tlsPort": -1 }, "dataSource": "wikipedia_api", "errorMsg": null } ] ``` </details> Retrieves the payload of a task given the task ID. It returns a JSON object with the task ID and payload that includes task configuration details and relevant specifications associated with the execution of the task. `GET` `/druid/indexer/v1/task/{taskId}` <Tabs> <TabItem value="19" label="200 SUCCESS"> <br/> Successfully retrieved payload of task </TabItem> <TabItem value="20" label="404 NOT FOUND"> <br/> Cannot find task with ID </TabItem> </Tabs> The following examples shows how to retrieve the task payload of a task with the specified ID `indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z`. <Tabs> <TabItem value="21" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z" ``` </TabItem> <TabItem value="22" label="HTTP"> ```HTTP GET /druid/indexer/v1/task/indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "task": "indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z", "payload": { "type": "index_parallel", "id": "indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z", "groupId": "indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z", "resource": { "availabilityGroup": "indexparallelwikipediashortiajoonnd_2023-07-07T17:53:12.174Z", "requiredCapacity": 1 }, "spec": { "dataSchema": { "dataSource": "wikipedia_short", "timestampSpec": { "column": "time", "format": "iso", "missingValue": null }, "dimensionsSpec": { "dimensions": [ { "type": "string", "name": "cityName", "multiValueHandling": "SORTED_ARRAY", "createBitmapIndex": true }, { "type": "string", "name": "countryName", "multiValueHandling": "SORTED_ARRAY", "createBitmapIndex": true }, { "type": "string", "name": "regionName", "multiValueHandling": "SORTED_ARRAY", "createBitmapIndex": true } ], "dimensionExclusions": [ "time", "time" ], "includeAllDimensions": false, "useSchemaDiscovery": false }, "metricsSpec": [], "granularitySpec": { "type": "uniform", "segmentGranularity": "DAY", "queryGranularity": { "type": "none" }, "rollup": false, "intervals": [ "2015-09-12T00:00:00.000Z/2015-09-13T00:00:00.000Z" ] }, "transformSpec": { "filter": null, "transforms": [] } }, "ioConfig": { "type": "index_parallel", "inputSource": { "type": "local", "baseDir": "quickstart/tutorial", "filter":

}, "inputFormat": { "type": "json", "keepNullColumns": false, "assumeNewlineDelimited": false, "useJsonNodeReader": false }, "appendToExisting": false, "dropExisting": false }, "tuningConfig": { "type": "index_parallel", "maxRowsPerSegment": 5000000, "appendableIndexSpec": { "type": "onheap", "preserveExistingMetrics": false }, "maxRowsInMemory": 25000, "maxBytesInMemory": 0, "skipBytesInMemoryOverheadCheck": false, "maxTotalRows": null, "numShards": null, "splitHintSpec": null, "partitionsSpec": { "type": "dynamic", "maxRowsPerSegment": 5000000, "maxTotalRows": null }, "indexSpec": { "bitmap": { "type": "roaring" }, "dimensionCompression": "lz4", "stringDictionaryEncoding": { "type": "utf8" }, "metricCompression": "lz4", "longEncoding": "longs" }, "indexSpecForIntermediatePersists": { "bitmap": { "type": "roaring" }, "dimensionCompression": "lz4", "stringDictionaryEncoding": { "type": "utf8" }, "metricCompression": "lz4", "longEncoding": "longs" }, "maxPendingPersists": 0, "forceGuaranteedRollup": false, "reportParseExceptions": false, "pushTimeout": 0, "segmentWriteOutMediumFactory": null, "maxNumConcurrentSubTasks": 1, "maxRetry": 3, "taskStatusCheckPeriodMs": 1000, "chatHandlerTimeout": "PT10S", "chatHandlerNumRetries": 5, "maxNumSegmentsToMerge": 100, "totalNumMergeTasks": 10, "logParseExceptions": false, "maxParseExceptions": 2147483647, "maxSavedParseExceptions": 0, "maxColumnsToMerge": -1, "awaitSegmentAvailabilityTimeoutMillis": 0, "maxAllowedLockCount": -1, "partitionDimensions": [] } }, "context": { "forceTimeChunkLock": true, "useLineageBasedSegmentAllocation": true }, "dataSource": "wikipedia_short" } } ``` </details> Retrieves the status of a task given the task ID. It returns a JSON object with the task's status code, runner status, task type, datasource, and other relevant metadata. `GET` `/druid/indexer/v1/task/{taskId}/status` <Tabs> <TabItem value="23" label="200 SUCCESS"> <br/> Successfully retrieved task status </TabItem> <TabItem value="24" label="404 NOT FOUND"> <br/> Cannot find task with ID </TabItem> </Tabs> The following examples shows how to retrieve the status of a task with the specified ID `query-223549f8-b993-4483-b028-1b0d54713cad`. <Tabs> <TabItem value="25" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/query-223549f8-b993-4483-b028-1b0d54713cad/status" ``` </TabItem> <TabItem value="26" label="HTTP"> ```HTTP GET /druid/indexer/v1/task/query-223549f8-b993-4483-b028-1b0d54713cad/status HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "task": "query-223549f8-b993-4483-b028-1b0d54713cad", "status": { "id": "query-223549f8-b993-4483-b028-1b0d54713cad", "groupId": "query-223549f8-b993-4483-b028-1b0d54713cad", "type": "query_controller", "createdTime": "2023-06-22T22:11:28.367Z", "queueInsertionTime": "1970-01-01T00:00:00.000Z", "statusCode": "RUNNING", "status": "RUNNING", "runnerStatusCode": "RUNNING", "duration": -1, "location": {"host": "localhost", "port": 8100, "tlsPort": -1}, "dataSource": "wikipedia_api", "errorMsg": null } } ``` </details> :::info This API is deprecated and will be removed in future releases. ::: Retrieves information about segments generated by the task given the task ID. To hit this endpoint, make sure to enable the audit log config on the Overlord with `druid.indexer.auditLog.enabled = true`. In addition to enabling audit logs, configure a cleanup strategy to prevent overloading the metadata store with old audit logs which may cause performance issues. To enable automated cleanup of audit logs on the Coordinator, set `druid.coordinator.kill.audit.on`. You may also manually export the audit logs to external storage. For more information, see . `GET` `/druid/indexer/v1/task/{taskId}/segments` <Tabs> <TabItem value="27" label="200 SUCCESS"> <br/> Successfully retrieved task segments </TabItem> </Tabs> The following examples shows how to retrieve the task segment of the task with the specified ID `query-52a8aafe-7265-4427-89fe-dc51275cc470`. <Tabs> <TabItem value="28" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/query-52a8aafe-7265-4427-89fe-dc51275cc470/reports" ``` </TabItem> <TabItem value="29" label="HTTP"> ```HTTP GET /druid/indexer/v1/task/query-52a8aafe-7265-4427-89fe-dc51275cc470/reports HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> A successful request returns a `200 OK` response and an array of the task segments. Retrieves the event log associated with a task. It returns a list of logged events during the lifecycle of the task. The endpoint is useful for providing information about the execution of the task, including any errors or warnings raised. Task logs are automatically retrieved from the Middle Manager/Indexer or in long-term storage. For reference, see . `GET` `/druid/indexer/v1/task/{taskId}/log` `offset` (optional) Type: Int Exclude the first passed in number of entries from the response. <Tabs> <TabItem value="30" label="200 SUCCESS"> <br/> Successfully retrieved task log </TabItem> </Tabs> The following examples shows how to retrieve the task log of a task with the specified ID

<Tabs> <TabItem value="31" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/indexkafkasocialmedia0e905aa31037879_nommnaeg/log" ``` </TabItem> <TabItem value="32" label="HTTP"> ```HTTP GET /druid/indexer/v1/task/indexkafkasocialmedia0e905aa31037879_nommnaeg/log HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json 2023-07-03T22:11:17,891 INFO [qtp1251996697-122] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Sequence[indexkafkasocialmedia0e905aa31037879_0] end offsets updated from [{0=9223372036854775807}] to [{0=230985}]. 2023-07-03T22:11:17,900 INFO [qtp1251996697-122] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Saved sequence metadata to disk: [SequenceMetadata{sequenceId=0, sequenceName='indexkafkasocialmedia0e905aa31037879_0', assignments=[0], startOffsets={0=230985}, exclusiveStartPartitions=[], endOffsets={0=230985}, sentinel=false, checkpointed=true}] 2023-07-03T22:11:17,901 INFO [task-runner-0-priority-0] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Received resume command, resuming ingestion. 2023-07-03T22:11:17,901 INFO [task-runner-0-priority-0] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Finished reading partition[0], up to[230985]. 2023-07-03T22:11:17,902 INFO [task-runner-0-priority-0] org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientId=consumer-kafka-supervisor-dcanhmig-1, groupId=kafka-supervisor-dcanhmig] Resetting generation and member id due to: consumer pro-actively leaving the group 2023-07-03T22:11:17,902 INFO [task-runner-0-priority-0] org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientId=consumer-kafka-supervisor-dcanhmig-1, groupId=kafka-supervisor-dcanhmig] Request joining group due to: consumer pro-actively leaving the group 2023-07-03T22:11:17,902 INFO [task-runner-0-priority-0] org.apache.kafka.clients.consumer.KafkaConsumer - [Consumer clientId=consumer-kafka-supervisor-dcanhmig-1, groupId=kafka-supervisor-dcanhmig] Unsubscribed all topics or patterns and assigned partitions 2023-07-03T22:11:17,912 INFO [task-runner-0-priority-0] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Persisted rows[0] and (estimated) bytes[0] 2023-07-03T22:11:17,916 INFO [[indexkafkasocialmedia0e905aa31037879nommnaeg]-appenderator-persist] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Flushed in-memory data with commit metadata [AppenderatorDriverMetadata{segments={}, lastSegmentIds={}, callerMetadata={nextPartitions=SeekableStreamEndSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}}}}] for segments: 2023-07-03T22:11:17,917 INFO [[indexkafkasocialmedia0e905aa31037879_nommnaeg]-appenderator-persist] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Persisted stats: processed rows: [0], persisted rows[0], sinks: [0], total fireHydrants (across sinks): [0], persisted fireHydrants (across sinks): [0] 2023-07-03T22:11:17,919 INFO [task-runner-0-priority-0] org.apache.druid.segment.realtime.appenderator.BaseAppenderatorDriver - Pushing [0] segments in background 2023-07-03T22:11:17,921 INFO [task-runner-0-priority-0] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Persisted rows[0] and (estimated) bytes[0] 2023-07-03T22:11:17,924 INFO [[indexkafkasocialmedia0e905aa31037879nommnaeg]-appenderator-persist] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Flushed in-memory data with commit metadata [AppenderatorDriverMetadata{segments={}, lastSegmentIds={}, callerMetadata={nextPartitions=SeekableStreamStartSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}, exclusivePartitions=[]}, publishPartitions=SeekableStreamEndSequenceNumbers{stream='social_media', partitionSequenceNumberMap={0=230985}}}}] for segments: 2023-07-03T22:11:17,924 INFO [[indexkafkasocialmedia0e905aa31037879_nommnaeg]-appenderator-persist] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Persisted stats: processed rows: [0], persisted rows[0], sinks: [0], total fireHydrants (across sinks): [0], persisted fireHydrants (across sinks): [0] 2023-07-03T22:11:17,925 INFO [[indexkafkasocialmedia0e905aa31037879_nommnaeg]-appenderator-merge] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Preparing to push (stats): processed rows: [0], sinks: [0], fireHydrants (across sinks): [0] 2023-07-03T22:11:17,925 INFO [[indexkafkasocialmedia0e905aa31037879_nommnaeg]-appenderator-merge] org.apache.druid.segment.realtime.appenderator.StreamAppenderator - Push complete... 2023-07-03T22:11:17,929 INFO [[indexkafkasocialmedia0e905aa31037879nommnaeg]-publish] org.apache.druid.indexing.seekablestream.SequenceMetadata - With empty segment set, start offsets [SeekableStreamStartSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}, exclusivePartitions=[]}] and end offsets [SeekableStreamEndSequenceNumbers{stream='social_media', partitionSequenceNumberMap={0=230985}}] are the same, skipping metadata commit. 2023-07-03T22:11:17,930 INFO [[indexkafkasocialmedia0e905aa31037879nommnaeg]-publish] org.apache.druid.segment.realtime.appenderator.BaseAppenderatorDriver - Published [0] segments with commit metadata [{nextPartitions=SeekableStreamStartSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}, exclusivePartitions=[]}, publishPartitions=SeekableStreamEndSequenceNumbers{stream='social_media', partitionSequenceNumberMap={0=230985}}}] 2023-07-03T22:11:17,930 INFO [[indexkafkasocialmedia0e905aa31037879nommnaeg]-publish] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Published 0 segments for sequence [indexkafkasocialmedia0e905aa310378790] with metadata [AppenderatorDriverMetadata{segments={}, lastSegmentIds={}, callerMetadata={nextPartitions=SeekableStreamStartSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}, exclusivePartitions=[]}, publishPartitions=SeekableStreamEndSequenceNumbers{stream='socialmedia', partitionSequenceNumberMap={0=230985}}}}]. 2023-07-03T22:11:17,931 INFO [[indexkafkasocialmedia0e905aa31037879_nommnaeg]-publish] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Saved sequence metadata to disk: [] 2023-07-03T22:11:17,932 INFO [task-runner-0-priority-0] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Handoff complete for segments: 2023-07-03T22:11:17,932 INFO [task-runner-0-priority-0] org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientId=consumer-kafka-supervisor-dcanhmig-1, groupId=kafka-supervisor-dcanhmig] Resetting generation and member id due to: consumer pro-actively leaving the group 2023-07-03T22:11:17,932 INFO [task-runner-0-priority-0] org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientId=consumer-kafka-supervisor-dcanhmig-1, groupId=kafka-supervisor-dcanhmig] Request joining group due to: consumer pro-actively leaving the group 2023-07-03T22:11:17,933 INFO [task-runner-0-priority-0] org.apache.kafka.common.metrics.Metrics - Metrics scheduler closed 2023-07-03T22:11:17,933 INFO [task-runner-0-priority-0] org.apache.kafka.common.metrics.Metrics - Closing reporter org.apache.kafka.common.metrics.JmxReporter 2023-07-03T22:11:17,933 INFO [task-runner-0-priority-0] org.apache.kafka.common.metrics.Metrics - Metrics reporters closed 2023-07-03T22:11:17,935 INFO [task-runner-0-priority-0] org.apache.kafka.common.utils.AppInfoParser - App info kafka.consumer for consumer-kafka-supervisor-dcanhmig-1 unregistered 2023-07-03T22:11:17,936 INFO [task-runner-0-priority-0] org.apache.druid.curator.announcement.Announcer - Unannouncing [/druid/internal-discovery/PEON/localhost:8100] 2023-07-03T22:11:17,972 INFO [task-runner-0-priority-0] org.apache.druid.curator.discovery.CuratorDruidNodeAnnouncer - Unannounced self [{"druidNode":{"service":"druid/middleManager","host":"localhost","bindOnHost":false,"plaintextPort":8100,"port":-1,"tlsPort":-1,"enablePlaintextPort":true,"enableTlsPort":false},"nodeType":"peon","services":{"dataNodeService":{"type":"dataNodeService","tier":"defaulttier","maxSize":0,"type":"indexer-executor","serverType":"indexer-executor","priority":0},"lookupNodeService":{"type":"lookupNodeService","lookupTier":"default"}}}]. 2023-07-03T22:11:17,972 INFO [task-runner-0-priority-0] org.apache.druid.curator.announcement.Announcer - Unannouncing [/druid/announcements/localhost:8100] 2023-07-03T22:11:17,996 INFO [task-runner-0-priority-0] org.apache.druid.indexing.worker.executor.ExecutorLifecycle - Task completed with status: { "id" : "indexkafkasocialmedia0e905aa31037879_nommnaeg", "status" : "SUCCESS", "duration" : 3601130, "errorMsg" : null, "location" : { "host" : null, "port" : -1, "tlsPort" : -1 } } 2023-07-03T22:11:17,998 INFO [main] org.apache.druid.java.util.common.lifecycle.Lifecycle - Stopping lifecycle [module] stage [ANNOUNCEMENTS] 2023-07-03T22:11:18,005 INFO [main] org.apache.druid.java.util.common.lifecycle.Lifecycle - Stopping lifecycle [module] stage [SERVER] 2023-07-03T22:11:18,009 INFO [main] org.eclipse.jetty.server.AbstractConnector - Stopped ServerConnector@6491006{HTTP/1.1, (http/1.1)}{0.0.0.0:8100} 2023-07-03T22:11:18,009 INFO [main] org.eclipse.jetty.server.session - node0 Stopped scavenging 2023-07-03T22:11:18,012 INFO [main] org.eclipse.jetty.server.handler.ContextHandler - Stopped o.e.j.s.ServletContextHandler@742aa00a{/,null,STOPPED} 2023-07-03T22:11:18,014 INFO [main]

- Stopping lifecycle [module] stage [NORMAL] 2023-07-03T22:11:18,014 INFO [main] org.apache.druid.server.coordination.ZkCoordinator - Stopping ZkCoordinator for [DruidServerMetadata{name='localhost:8100', hostAndPort='localhost:8100', hostAndTlsPort='null', maxSize=0, tier='defaulttier', type=indexer-executor, priority=0}] 2023-07-03T22:11:18,014 INFO [main] org.apache.druid.server.coordination.SegmentLoadDropHandler - Stopping... 2023-07-03T22:11:18,014 INFO [main] org.apache.druid.server.coordination.SegmentLoadDropHandler - Stopped. 2023-07-03T22:11:18,014 INFO [main] org.apache.druid.indexing.overlord.SingleTaskBackgroundRunner - Starting graceful shutdown of task[indexkafkasocialmedia0e905aa31037879_nommnaeg]. 2023-07-03T22:11:18,014 INFO [main] org.apache.druid.indexing.seekablestream.SeekableStreamIndexTaskRunner - Stopping forcefully (status: [PUBLISHING]) 2023-07-03T22:11:18,019 INFO [LookupExtractorFactoryContainerProvider-MainThread] org.apache.druid.query.lookup.LookupReferencesManager - Lookup Management loop exited. Lookup notices are not handled anymore. 2023-07-03T22:11:18,020 INFO [main] org.apache.druid.query.lookup.LookupReferencesManager - Closed lookup [name]. 2023-07-03T22:11:18,020 INFO [Curator-Framework-0] org.apache.curator.framework.imps.CuratorFrameworkImpl - backgroundOperationsLoop exiting 2023-07-03T22:11:18,147 INFO [main] org.apache.zookeeper.ZooKeeper - Session: 0x1000097ceaf0007 closed 2023-07-03T22:11:18,147 INFO [main-EventThread] org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x1000097ceaf0007 2023-07-03T22:11:18,151 INFO [main] org.apache.druid.java.util.common.lifecycle.Lifecycle - Stopping lifecycle [module] stage [INIT] Finished peon task ``` </details> Retrieves a for a task. It returns a JSON object with information about the number of rows ingested, and any parse exceptions that Druid raised. `GET` `/druid/indexer/v1/task/{taskId}/reports` <Tabs> <TabItem value="33" label="200 SUCCESS"> <br/> Successfully retrieved task report </TabItem> </Tabs> The following examples shows how to retrieve the completion report of a task with the specified ID `query-52a8aafe-7265-4427-89fe-dc51275cc470`. <Tabs> <TabItem value="34" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/query-52a8aafe-7265-4427-89fe-dc51275cc470/reports" ``` </TabItem> <TabItem value="35" label="HTTP"> ```HTTP GET /druid/indexer/v1/task/query-52a8aafe-7265-4427-89fe-dc51275cc470/reports HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "ingestionStatsAndErrors": { "type": "ingestionStatsAndErrors", "taskId": "query-52a8aafe-7265-4427-89fe-dc51275cc470", "payload": { "ingestionState": "COMPLETED", "unparseableEvents": {}, "rowStats": { "determinePartitions": { "processed": 0, "processedBytes": 0, "processedWithError": 0, "thrownAway": 0, "unparseable": 0 }, "buildSegments": { "processed": 39244, "processedBytes": 17106256, "processedWithError": 0, "thrownAway": 0, "unparseable": 0 } }, "errorMsg": null, "segmentAvailabilityConfirmed": false, "segmentAvailabilityWaitTimeMs": 0 } } } ``` </details> Submits a JSON-based ingestion spec or supervisor spec to the Overlord. It returns the task ID of the submitted task. For information on creating an ingestion spec, refer to the . Note that for most batch ingestion use cases, you should use the instead of JSON-based batch ingestion. `POST` `/druid/indexer/v1/task` <Tabs> <TabItem value="36" label="200 SUCCESS"> <br/> Successfully submitted task </TabItem> <TabItem value="37" label="400 BAD REQUEST"> <br/> Missing information in query </TabItem> <TabItem value="38" label="415 UNSUPPORTED MEDIA TYPE"> <br/> Incorrect request body media type </TabItem> <TabItem value="39" label="500 Server Error"> <br/> Unexpected token or characters in request body </TabItem> </Tabs> The following request is an example of submitting a task to create a datasource named `"wikipedia auto"`. <Tabs> <TabItem value="40" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task" \ --header 'Content-Type: application/json' \ --data '{ "type" : "index_parallel", "spec" : { "dataSchema" : { "dataSource" : "wikipedia_auto", "timestampSpec": { "column": "time", "format": "iso" }, "dimensionsSpec" : { "useSchemaDiscovery": true }, "metricsSpec" : [], "granularitySpec" : { "type" : "uniform", "segmentGranularity" : "day", "queryGranularity" : "none", "intervals" : ["2015-09-12/2015-09-13"], "rollup" : false } }, "ioConfig" : { "type" : "index_parallel", "inputSource" : { "type" : "local", "baseDir" : "quickstart/tutorial/", "filter" : "wikiticker-2015-09-12-sampled.json.gz" }, "inputFormat" : { "type" : "json" }, "appendToExisting" : false }, "tuningConfig" : { "type" : "index_parallel", "maxRowsPerSegment" : 5000000, "maxRowsInMemory" : 25000 } } }' ``` </TabItem> <TabItem value="41" label="HTTP"> ```HTTP POST /druid/indexer/v1/task

Host: http://ROUTERIP:ROUTERPORT Content-Type: application/json Content-Length: 952 { "type" : "index_parallel", "spec" : { "dataSchema" : { "dataSource" : "wikipedia_auto", "timestampSpec": { "column": "time", "format": "iso" }, "dimensionsSpec" : { "useSchemaDiscovery": true }, "metricsSpec" : [], "granularitySpec" : { "type" : "uniform", "segmentGranularity" : "day", "queryGranularity" : "none", "intervals" : ["2015-09-12/2015-09-13"], "rollup" : false } }, "ioConfig" : { "type" : "index_parallel", "inputSource" : { "type" : "local", "baseDir" : "quickstart/tutorial/", "filter" : "wikiticker-2015-09-12-sampled.json.gz" }, "inputFormat" : { "type" : "json" }, "appendToExisting" : false }, "tuningConfig" : { "type" : "index_parallel", "maxRowsPerSegment" : 5000000, "maxRowsInMemory" : 25000 } } } ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "task": "indexparallelwikipediaodofhkle2023-06-23T21:07:28.226Z" } ``` </details> Shuts down a task if it not already complete. Returns a JSON object with the ID of the task that was shut down successfully. `POST` `/druid/indexer/v1/task/{taskId}/shutdown` <Tabs> <TabItem value="42" label="200 SUCCESS"> <br/> Successfully shut down task </TabItem> <TabItem value="43" label="404 NOT FOUND"> <br/> Cannot find task with ID or task is no longer running </TabItem> </Tabs> The following request shows how to shut down a task with the ID `query-52as 8aafe-7265-4427-89fe-dc51275cc470`. <Tabs> <TabItem value="44" label="cURL"> ```shell curl --request POST "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/task/query-52as 8aafe-7265-4427-89fe-dc51275cc470/shutdown" ``` </TabItem> <TabItem value="45" label="HTTP"> ```HTTP POST /druid/indexer/v1/task/query-52as 8aafe-7265-4427-89fe-dc51275cc470/shutdown HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "task": "query-577a83dd-a14e-4380-bd01-c942b781236b" } ``` </details> Shuts down all tasks for a specified datasource. If successful, it returns a JSON object with the name of the datasource whose tasks are shut down. `POST` `/druid/indexer/v1/datasources/{datasource}/shutdownAllTasks` <Tabs> <TabItem value="46" label="200 SUCCESS"> <br/> Successfully shut down tasks </TabItem> <TabItem value="47" label="404 NOT FOUND"> <br/> Error or datasource does not have a running task </TabItem> </Tabs> The following request is an example of shutting down all tasks for datasource `wikipedia_auto`. <Tabs> <TabItem value="48" label="cURL"> ```shell curl --request POST "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/datasources/wikipedia_auto/shutdownAllTasks" ``` </TabItem> <TabItem value="49" label="HTTP"> ```HTTP POST /druid/indexer/v1/datasources/wikipedia_auto/shutdownAllTasks HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "dataSource": "wikipedia_api" } ``` </details> Retrieves list of task status objects for list of task ID strings in request body. It returns a set of JSON objects with the status, duration, location of each task, and any error messages. `POST` `/druid/indexer/v1/taskStatus` <Tabs> <TabItem value="50" label="200 SUCCESS"> <br/> Successfully retrieved status objects </TabItem> <TabItem value="51" label="415 UNSUPPORTED MEDIA TYPE"> <br/> Missing request body or incorrect request body type </TabItem> </Tabs> The following request is an example of retrieving status objects for task ID `indexparallelwikipediaautojndhkpbo2023-06-26T17:23:05.308Z` and `indexparallelwikipediaautojbgiianh2023-06-26T23:17:56.769Z` . <Tabs> <TabItem value="52" label="cURL"> ```shell curl "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/taskStatus" \ --header 'Content-Type: application/json' \ --data '["indexparallelwikipediaautojndhkpbo2023-06-26T17:23:05.308Z","indexparallelwikipediaautojbgiianh2023-06-26T23:17:56.769Z"]' ``` </TabItem> <TabItem value="53" label="HTTP"> ```HTTP POST /druid/indexer/v1/taskStatus HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT Content-Type: application/json Content-Length: 134 ["indexparallelwikipediaautojndhkpbo2023-06-26T17:23:05.308Z", "indexparallelwikipediaautojbgiianh2023-06-26T23:17:56.769Z"] ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "indexparallelwikipediaautojbgiianh_2023-06-26T23:17:56.769Z": { "id": "indexparallelwikipediaautojbgiianh_2023-06-26T23:17:56.769Z", "status": "SUCCESS", "duration": 10630, "errorMsg": null, "location": { "host": "localhost", "port": 8100, "tlsPort": -1 } }, "indexparallelwikipediaautojndhkpbo_2023-06-26T17:23:05.308Z": { "id": "indexparallelwikipediaautojndhkpbo_2023-06-26T17:23:05.308Z", "status": "SUCCESS", "duration": 11012, "errorMsg": null, "location": { "host": "localhost", "port": 8100, "tlsPort": -1 } } } ``` </details> Manually clean up pending segments table in metadata storage for `datasource`. It returns a JSON object response with `numDeleted` for the number of rows deleted from the pending segments table. This API is used by the `druid.coordinator.kill.pendingSegments.on` which automates this operation to perform periodically. `DELETE` `/druid/indexer/v1/pendingSegments/{datasource}` <Tabs> <TabItem value="54" label="200 SUCCESS"> <br/> Successfully deleted pending segments </TabItem> </Tabs> The following request is an example of cleaning up pending segments for the `wikipedia_api` datasource. <Tabs> <TabItem value="55" label="cURL"> ```shell curl --request DELETE "http://ROUTERIP:ROUTERPORT/druid/indexer/v1/pendingSegments/wikipedia_api" ``` </TabItem> <TabItem value="56" label="HTTP"> ```HTTP DELETE /druid/indexer/v1/pendingSegments/wikipedia_api HTTP/1.1 Host: http://ROUTERIP:ROUTERPORT ``` </TabItem> </Tabs> <details> <summary>View the response</summary> ```json { "numDeleted": 2 } ``` </details>