From 0f29ece6a95a9d37998693e59e31bd71aaa1d63a Mon Sep 17 00:00:00 2001
From: Katya Macedo <38017980+ektravel@users.noreply.github.com>
Date: Mon, 12 Feb 2024 15:52:42 -0600
Subject: [PATCH] [Docs] Refactor streaming ingestion section (#15591)
Merging the work so far. @ektravel , @vogievetsky if there are additional improvements, let's track them & make another pr.
* Refactor streaming ingestion docs
* Update property definition
* Update after review
* Update known issues
* Move kinesis and kafka topics to ingestion, add redirects
* Saving changes
* Saving
* Add input format text
* Update after review
* Minor text edit
* Update example syntax
* Revert back to colon
* Fix merge conflicts
* Fix broken links
* Fix spelling error
---
docs/api-reference/supervisor-api.md | 291 +++++--
docs/assets/supervisor-info-dialog.png | Bin 0 -> 107805 bytes
docs/assets/supervisor-view.png | Bin 0 -> 63532 bytes
docs/configuration/extensions.md | 4 +-
docs/configuration/index.md | 14 +-
docs/design/storage.md | 4 +-
.../extensions-core/kafka-ingestion.md | 301 --------
.../kafka-supervisor-operations.md | 287 -------
.../kafka-supervisor-reference.md | 262 -------
.../extensions-core/kinesis-ingestion.md | 720 ------------------
docs/development/extensions-core/protobuf.md | 2 +-
docs/ingestion/data-formats.md | 180 ++++-
docs/ingestion/index.md | 2 +-
docs/ingestion/ingestion-spec.md | 6 +-
docs/ingestion/kafka-ingestion.md | 449 +++++++++++
docs/ingestion/kinesis-ingestion.md | 334 ++++++++
docs/ingestion/partitioning.md | 4 +-
docs/ingestion/rollup.md | 4 +-
docs/ingestion/standalone-realtime.md | 4 +-
docs/ingestion/streaming.md | 35 +
docs/ingestion/supervisor.md | 366 +++++++++
docs/ingestion/tasks.md | 6 +-
docs/ingestion/tranquility.md | 4 +-
docs/operations/basic-cluster-tuning.md | 2 +-
docs/operations/dynamic-config-provider.md | 2 +-
docs/operations/metrics.md | 4 +-
docs/querying/arrays.md | 4 +-
docs/querying/multi-value-dimensions.md | 4 +-
docs/querying/nested-columns.md | 2 +-
docs/querying/sql-metadata-tables.md | 4 +-
docs/tutorials/tutorial-kafka.md | 4 +-
website/redirects.js | 10 +-
website/sidebars.json | 8 +-
33 files changed, 1616 insertions(+), 1707 deletions(-)
create mode 100644 docs/assets/supervisor-info-dialog.png
create mode 100644 docs/assets/supervisor-view.png
delete mode 100644 docs/development/extensions-core/kafka-ingestion.md
delete mode 100644 docs/development/extensions-core/kafka-supervisor-operations.md
delete mode 100644 docs/development/extensions-core/kafka-supervisor-reference.md
delete mode 100644 docs/development/extensions-core/kinesis-ingestion.md
create mode 100644 docs/ingestion/kafka-ingestion.md
create mode 100644 docs/ingestion/kinesis-ingestion.md
create mode 100644 docs/ingestion/streaming.md
create mode 100644 docs/ingestion/supervisor.md
diff --git a/docs/api-reference/supervisor-api.md b/docs/api-reference/supervisor-api.md
index c5f6c0762709..2e63b69c07f6 100644
--- a/docs/api-reference/supervisor-api.md
+++ b/docs/api-reference/supervisor-api.md
@@ -36,8 +36,8 @@ The following table lists the properties of a supervisor object:
|Property|Type|Description|
|---|---|---|
|`id`|String|Unique identifier.|
-|`state`|String|Generic state of the supervisor. Available states:`UNHEALTHY_SUPERVISOR`, `UNHEALTHY_TASKS`, `PENDING`, `RUNNING`, `SUSPENDED`, `STOPPING`. See [Apache Kafka operations](../development/extensions-core/kafka-supervisor-operations.md) for details.|
-|`detailedState`|String|Detailed state of the supervisor. This property contains a more descriptive, implementation-specific state that may provide more insight into the supervisor's activities than the `state` property. See [Apache Kafka ingestion](../development/extensions-core/kafka-ingestion.md) and [Amazon Kinesis ingestion](../development/extensions-core/kinesis-ingestion.md) for supervisor-specific states.|
+|`state`|String|Generic state of the supervisor. Available states:`UNHEALTHY_SUPERVISOR`, `UNHEALTHY_TASKS`, `PENDING`, `RUNNING`, `SUSPENDED`, `STOPPING`. See [Supervisor reference](../ingestion/supervisor.md#status-report) for more information.|
+|`detailedState`|String|Detailed state of the supervisor. This property contains a more descriptive, implementation-specific state that may provide more insight into the supervisor's activities than the `state` property. See [Apache Kafka ingestion](../ingestion/kafka-ingestion.md) and [Amazon Kinesis ingestion](../ingestion/kinesis-ingestion.md) for supervisor-specific states.|
|`healthy`|Boolean|Supervisor health indicator.|
|`spec`|Object|Container object for the supervisor configuration.|
|`suspended`|Boolean|Indicates whether the supervisor is in a suspended state.|
@@ -1205,9 +1205,7 @@ Host: http://ROUTER_IP:ROUTER_PORT
Retrieves the current status report for a single supervisor. The report contains the state of the supervisor tasks and an array of recently thrown exceptions.
-For additional information about the status report, see the topic for each streaming ingestion methods:
-* [Amazon Kinesis](../development/extensions-core/kinesis-ingestion.md#get-supervisor-status-report)
-* [Apache Kafka](../development/extensions-core/kafka-supervisor-operations.md#getting-supervisor-status-report)
+For additional information about the status report, see [Supervisor reference](../ingestion/supervisor.md#status-report).
#### URL
@@ -1309,13 +1307,184 @@ Host: http://ROUTER_IP:ROUTER_PORT
```
+### Get supervisor health
+
+Retrieves the current health report for a single supervisor. The health of a supervisor is determined by the supervisor's `state` (as returned by the `/status` endpoint) and the `druid.supervisor.*` Overlord configuration thresholds.
+
+#### URL
+
+GET
/druid/indexer/v1/supervisor/:supervisorId/health
+
+#### Responses
+
+
+
+
+
+*Supervisor is healthy*
+
+
+
+
+
+*Invalid supervisor ID*
+
+
+
+
+
+*Supervisor is unhealthy*
+
+
+
+
+
+---
+
+#### Sample request
+
+The following example shows how to retrieve the health report for a supervisor with the name `social_media`.
+
+
+
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/social_media/health"
+```
+
+
+
+
+```HTTP
+GET /druid/indexer/v1/supervisor/social_media/health HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+
+
+
+#### Sample response
+
+
+ Click to show sample response
+
+ ```json
+ {
+ "healthy": false
+ }
+ ```
+
+
+### Get supervisor ingestion stats
+
+Returns a snapshot of the current ingestion row counters for each task being managed by the supervisor, along with moving averages for the row counters. See [Row stats](../ingestion/tasks.md#row-stats) for more information.
+
+#### URL
+
+GET
/druid/indexer/v1/supervisor/:supervisorId/stats
+
+#### Responses
+
+
+
+
+
+*Successfully retrieved supervisor stats*
+
+
+
+
+
+*Invalid supervisor ID*
+
+
+
+
+
+---
+
+#### Sample request
+
+The following example shows how to retrieve the current ingestion row counters for a supervisor with the name `custom_data`.
+
+
+
+
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/custom_data/stats"
+```
+
+
+
+
+
+```HTTP
+GET /druid/indexer/v1/supervisor/custom_data/stats HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+
+
+
+#### Sample response
+
+
+ Click to show sample response
+
+ ```json
+ {
+ "0": {
+ "index_kafka_custom_data_881d621078f6b7c_ccplchbi": {
+ "movingAverages": {
+ "buildSegments": {
+ "5m": {
+ "processed": 53.401225142603316,
+ "processedBytes": 5226.400757148808,
+ "unparseable": 0.0,
+ "thrownAway": 0.0,
+ "processedWithError": 0.0
+ },
+ "15m": {
+ "processed": 56.92994990102502,
+ "processedBytes": 5571.772059828217,
+ "unparseable": 0.0,
+ "thrownAway": 0.0,
+ "processedWithError": 0.0
+ },
+ "1m": {
+ "processed": 37.134921285556636,
+ "processedBytes": 3634.2766230628677,
+ "unparseable": 0.0,
+ "thrownAway": 0.0,
+ "processedWithError": 0.0
+ }
+ }
+ },
+ "totals": {
+ "buildSegments": {
+ "processed": 665,
+ "processedBytes": 65079,
+ "processedWithError": 0,
+ "thrownAway": 0,
+ "unparseable": 0
+ }
+ }
+ }
+ }
+ }
+ ```
+
+
## Audit history
An audit history provides a comprehensive log of events, including supervisor configuration, creation, suspension, and modification history.
### Get audit history for all supervisors
-Retrieve an audit history of specs for all supervisors.
+Retrieves an audit history of specs for all supervisors.
#### URL
@@ -1325,7 +1494,7 @@ Retrieve an audit history of specs for all supervisors.
-
+
*Successfully retrieved audit history*
@@ -1339,7 +1508,7 @@ Retrieve an audit history of specs for all supervisors.
-
+
```shell
@@ -1347,7 +1516,7 @@ curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/history"
```
-
+
```HTTP
@@ -1686,13 +1855,13 @@ Retrieves an audit history of specs for a single supervisor.
-
+
*Successfully retrieved supervisor audit history*
-
+
*Invalid supervisor ID*
@@ -1716,7 +1885,7 @@ curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/wikipedia_stream/
```
-
+
```HTTP
@@ -2044,11 +2213,22 @@ Host: http://ROUTER_IP:ROUTER_PORT
### Create or update a supervisor
-Creates a new supervisor or updates an existing one for the same datasource with a new schema and configuration.
+Creates a new supervisor spec or updates an existing one with new configuration and schema information. When updating a supervisor spec, the datasource must remain the same as the previous supervisor.
+
+You can define a supervisor spec for [Apache Kafka](../ingestion/kafka-ingestion.md) or [Amazon Kinesis](../ingestion/kinesis-ingestion.md) streaming ingestion methods.
-You can define a supervisor spec for [Apache Kafka](../development/extensions-core/kafka-ingestion.md#define-a-supervisor-spec) or [Amazon Kinesis](../development/extensions-core/kinesis-ingestion.md#supervisor-spec) streaming ingestion methods. Once created, the supervisor persists in the metadata database.
+The following table lists the properties of a supervisor spec:
-When you call this endpoint on an existing supervisor for the same datasource, the running supervisor signals its tasks to stop reading and begin publishing, exiting itself. Druid then uses the provided configuration from the request body to create a new supervisor. Druid submits a new schema while retaining existing publishing tasks and starts new tasks at the previous task offsets.
+|Property|Type|Description|Required|
+|--------|----|-----------|--------|
+|`type`|String|The supervisor type. One of`kafka` or `kinesis`.|Yes|
+|`spec`|Object|The container object for the supervisor configuration.|Yes|
+|`ioConfig`|Object|The I/O configuration object to define the connection and I/O-related settings for the supervisor and indexing task.|Yes|
+|`dataSchema`|Object|The schema for the indexing task to use during ingestion. See [`dataSchema`](../ingestion/ingestion-spec.md#dataschema) for more information.|Yes|
+|`tuningConfig`|Object|The tuning configuration object to define performance-related settings for the supervisor and indexing tasks.|No|
+
+When you call this endpoint on an existing supervisor, the running supervisor signals its tasks to stop reading and begin publishing, exiting itself. Druid then uses the provided configuration from the request body to create a new supervisor. Druid submits a new schema while retaining existing publishing tasks and starts new tasks at the previous task offsets.
+This way, you can apply configuration changes without a pause in ingestion.
#### URL
@@ -2058,13 +2238,13 @@ When you call this endpoint on an existing supervisor for the same datasource, t
-
+
*Successfully created a new supervisor or updated an existing supervisor*
-
+
*Request body content type is not in JSON format*
@@ -2080,8 +2260,7 @@ The following example uses JSON input format to create a supervisor spec for Kaf
-
-
+
```shell
curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor" \
@@ -2139,8 +2318,8 @@ curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor" \
```
-
+
```HTTP
POST /druid/indexer/v1/supervisor HTTP/1.1
@@ -2218,6 +2397,7 @@ Content-Length: 1359
### Suspend a running supervisor
Suspends a single running supervisor. Returns the updated supervisor spec, where the `suspended` property is set to `true`. The suspended supervisor continues to emit logs and metrics.
+Indexing tasks remain suspended until you [resume the supervisor](#resume-a-supervisor).
#### URL
POST
/druid/indexer/v1/supervisor/:supervisorId/suspend
@@ -2226,19 +2406,19 @@ Suspends a single running supervisor. Returns the updated supervisor spec, where
-
+
*Successfully shut down supervisor*
-
+
*Supervisor already suspended*
-
+
*Invalid supervisor ID*
@@ -2254,7 +2434,7 @@ The following example shows how to suspend a running supervisor with the name `s
-
+
```shell
@@ -2262,7 +2442,7 @@ curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/so
```
-
+
```HTTP
@@ -2592,7 +2772,7 @@ Suspends all supervisors. Note that this endpoint returns an HTTP `200 Success`
-
+
*Successfully suspended all supervisors*
@@ -2606,7 +2786,7 @@ Suspends all supervisors. Note that this endpoint returns an HTTP `200 Success`
-
+
```shell
@@ -2614,7 +2794,7 @@ curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/su
```
-
+
```HTTP
@@ -2649,19 +2829,19 @@ Resumes indexing tasks for a supervisor. Returns an updated supervisor spec with
-
+
*Successfully resumed supervisor*
-
+
*Supervisor already running*
-
+
*Invalid supervisor ID*
@@ -2677,7 +2857,7 @@ The following example resumes a previously suspended supervisor with name `socia
-
+
```shell
@@ -2685,7 +2865,7 @@ curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/so
```
-
+
```HTTP
@@ -3016,7 +3196,7 @@ Resumes all supervisors. Note that this endpoint returns an HTTP `200 Success` c
-
+
*Successfully resumed all supervisors*
@@ -3030,7 +3210,7 @@ Resumes all supervisors. Note that this endpoint returns an HTTP `200 Success` c
-
+
```shell
@@ -3038,7 +3218,7 @@ curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/re
```
-
+
```HTTP
@@ -3063,10 +3243,16 @@ Host: http://ROUTER_IP:ROUTER_PORT
### Reset a supervisor
-Resets the specified supervisor. This endpoint clears _all_ stored offsets in Kafka or sequence numbers in Kinesis, prompting the supervisor to resume data reading. The supervisor will start from the earliest or latest available position, depending on the platform (offsets in Kafka or sequence numbers in Kinesis). It kills and recreates active tasks to read from valid positions.
+The supervisor must be running for this endpoint to be available.
+
+Resets the specified supervisor. This endpoint clears all stored offsets in Kafka or sequence numbers in Kinesis, prompting the supervisor to resume data reading. The supervisor restarts from the earliest or latest available position, depending on the platform: offsets in Kafka or sequence numbers in Kinesis.
+After clearing all stored offsets in Kafka or sequence numbers in Kinesis, the supervisor kills and recreates active tasks,
+so that tasks begin reading from valid positions.
Use this endpoint to recover from a stopped state due to missing offsets in Kafka or sequence numbers in Kinesis. Use this endpoint with caution as it may result in skipped messages and lead to data loss or duplicate data.
+The indexing service keeps track of the latest persisted offsets in Kafka or sequence numbers in Kinesis to provide exactly-once ingestion guarantees across tasks. Subsequent tasks must start reading from where the previous task completed for Druid to accept the generated segments. If the messages at the expected starting offsets in Kafka or sequence numbers in Kinesis are no longer available, the supervisor refuses to start and in-flight tasks fail. Possible causes for missing messages include the message retention period elapsing or the topic being removed and re-created. Use the `reset` endpoint to recover from this condition.
+
#### URL
POST
/druid/indexer/v1/supervisor/:supervisorId/reset
@@ -3075,13 +3261,13 @@ Use this endpoint to recover from a stopped state due to missing offsets in Kafk
-
+
*Successfully reset supervisor*
-
+
*Invalid supervisor ID*
@@ -3097,7 +3283,7 @@ The following example shows how to reset a supervisor with the name `social_medi
-
+
```shell
@@ -3105,7 +3291,7 @@ curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor/so
```
-
+
```HTTP
@@ -3128,13 +3314,19 @@ Host: http://ROUTER_IP:ROUTER_PORT
```
-### Reset Offsets for a supervisor
+### Reset offsets for a supervisor
+
+The supervisor must be running for this endpoint to be available.
+
+Resets the specified offsets for partitions without resetting the entire set.
+
+This endpoint clears only the specified offsets in Kafka or sequence numbers in Kinesis, prompting the supervisor to resume reading data from the specified offsets.
+If there are no stored offsets, the specified offsets are set in the metadata store.
-Resets the specified offsets for a supervisor. This endpoint clears _only_ the specified offsets in Kafka or sequence numbers in Kinesis, prompting the supervisor to resume data reading.
-If there are no stored offsets, the specified offsets will be set in the metadata store. The supervisor will start from the reset offsets for the partitions specified and for the other partitions from the stored offset.
-It kills and recreates active tasks pertaining to the partitions specified to read from valid offsets.
+After resetting stored offsets, the supervisor kills and recreates any active tasks pertaining to the specified partitions,
+so that tasks begin reading specified offsets. For partitions that are not specified in this operation, the supervisor resumes from the last stored offset.
-Use this endpoint to selectively reset offsets for partitions without resetting the entire set.
+Use this endpoint with caution. It can cause skipped messages, leading to data loss or duplicate data.
#### URL
@@ -3180,8 +3372,7 @@ The following table defines the fields within the `partitions` object in the res
#### Sample request
-The following example shows how to reset offsets for a kafka supervisor with the name `social_media`. Let's say the supervisor is reading
-from a kafka topic `ads_media_stream` and has the stored offsets: `{"0": 0, "1": 10, "2": 20, "3": 40}`.
+The following example shows how to reset offsets for a Kafka supervisor with the name `social_media`. For example, the supervisor is reading from a Kafka topic `ads_media_stream` and has the stored offsets: `{"0": 0, "1": 10, "2": 20, "3": 40}`.
@@ -3216,8 +3407,8 @@ Content-Type: application/json
}
```
-The above operation will reset offsets only for partitions 0 and 2 to 100 and 650 respectively. After a successful reset,
-when the supervisor's tasks restart, they will resume reading from `{"0": 100, "1": 10, "2": 650, "3": 40}`.
+The example operation resets offsets only for partitions `0` and `2` to 100 and 650 respectively. After a successful reset,
+when the supervisor's tasks restart, they resume reading from `{"0": 100, "1": 10, "2": 650, "3": 40}`.
diff --git a/docs/assets/supervisor-info-dialog.png b/docs/assets/supervisor-info-dialog.png
new file mode 100644
index 0000000000000000000000000000000000000000..3be424a413ef0772af5ed015ca34e04618274bfe
GIT binary patch
literal 107805
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