HttpV2 Sink
HttpV2 Sink is implemented in Firehose using the Http sink connector implementation in Depot library. For details on all the features supported by HttpV2 Sink, please refer the Depot documentation here.
Configuration
For HttpV2 sink in Firehose we need to set first (SINK_TYPE
=httpv2
). There are some generic configs which are common across different sink types which need to be set which are mentioned in generic.md. Http sink specific configs are mentioned in Depot repository. You can check out the Http Sink configs here
Changelogs
Here’s a detailed and descriptive changelog to help you understand the differences between HTTP V1 and HTTP V2:
JSON Payload Template Format:
- HTTP V1: Uses JSONPath format for setting the JSON payload template. For example, you might have a configuration like
{"test":"$.order_number"}
to specify the field. - HTTP V2: Shifts to using printf format for JSON payload templates. The equivalent configuration would be
{"test":"%s,order_number"}
. This change makes template expressions more consistent with many programming environments.
- HTTP V1: Uses JSONPath format for setting the JSON payload template. For example, you might have a configuration like
Parameter Placement:
- HTTP V1: Parameters are placed either in the header or query string according to the
SINK_HTTP_PARAMETER_PLACEMENT
setting. - HTTP V2: Parameters can now be placed in both the header and query string simultaneously, offering more flexibility in parameter placement.
- HTTP V1: Parameters are placed either in the header or query string according to the
Parameter Source Configuration:
- HTTP V1: Uses a single setting,
SINK_HTTP_PARAMETER_SOURCE
, to determine the source for both header and query parameters, which could be set to eitherkey
ormessage
. - HTTP V2: Separates these configurations with
SINK_HTTPV2_HEADERS_PARAMETER_SOURCE
for header parameters andSINK_HTTPV2_QUERY_PARAMETER_SOURCE
for query parameters, providing more granular control.
- HTTP V1: Uses a single setting,
Template Configuration for Header/Query Parameters:
- HTTP V1: Uses
INPUT_SCHEMA_PROTO_TO_COLUMN_MAPPING
globally for both header and query parameter templates. - HTTP V2: Introduces
SINK_HTTPV2_HEADERS_TEMPLATE
for header parameters andSINK_HTTPV2_QUERY_TEMPLATE
for query parameters, allowing distinct template settings for each.
- HTTP V1: Uses
Field Indexes vs. Field Names:
- HTTP V1: Utilizes proto field indexes for setting header and query parameters. For example,
{"2":"Order"}
. - HTTP V2: Uses proto field names instead. The equivalent would be
{"Order":"%s,order_id"}
, which makes configurations easier to understand and maintain.
- HTTP V1: Utilizes proto field indexes for setting header and query parameters. For example,
Parameter Ordering:
- HTTP V1: Maintains the ordering of parameters in header or query based on the field indexes. For instance, a template like
{"2":"Order"}
will result in?Order=xyz234
. - HTTP V2: Reverses the ordering, so the same template would translate to
?xyz234=Order
, creating a different query string structure.
- HTTP V1: Maintains the ordering of parameters in header or query based on the field indexes. For instance, a template like
Request Mode Selection:
- HTTP V1: Automatically decides between single and batch mode.
- HTTP V2: Explicitly requires you to set the request mode using
SINK_HTTPV2_REQUEST_MODE
, which can be either single or batch.
Metadata Inclusion:
- HTTP V1: Automatically includes Kafka topic metadata in the requests.
- HTTP V2: Requires additional settings like
SINK_ADD_METADATA_ENABLED=true
andSINK_METADATA_COLUMNS_TYPES=message_topic=string
to include Kafka topic metadata.
JSON Payload Configuration:
- HTTP V1: For JSON payloads, you set
SINK_HTTP_DATA_FORMAT=json
and leaveSINK_HTTP_JSON_BODY_TEMPLATE
empty. - HTTP V2: Uses
SINK_HTTPV2_REQUEST_BODY_MODE=json
to specify that the request body should be JSON formatted.
- HTTP V1: For JSON payloads, you set
Templatized JSON Payload:
- HTTP V1: Requires setting
SINK_HTTP_DATA_FORMAT=json
and definingSINK_HTTP_JSON_BODY_TEMPLATE
for templatized JSON payloads. - HTTP V2: Utilizes
SINK_HTTPV2_REQUEST_BODY_MODE=templatized_json
for similar functionality, making the configuration more intuitive.
- HTTP V1: Requires setting
Raw Proto Payload:
- HTTP V1: Configures raw proto payloads with
SINK_HTTP_DATA_FORMAT=proto
. - HTTP V2: Uses
SINK_HTTPV2_REQUEST_BODY_MODE=raw
to handle such payloads.
- HTTP V1: Configures raw proto payloads with
Templatized Service URL:
- HTTP V1: Incorporates proto field indexes in URL templates, like
http://abc.com/e%%s,2
. - HTTP V2: Moves to proto field names in URLs, such as
http://abc.com/e%s,order_number
, improving readability.
- HTTP V1: Incorporates proto field indexes in URL templates, like
Nested Field Handling:
- HTTP V1: Automatically sends default values for non-empty fields even if nested fields are empty. For example,
driver_pickup_location
. - HTTP V2: Omits fields that are empty, providing cleaner and more accurate payloads.
- HTTP V1: Automatically sends default values for non-empty fields even if nested fields are empty. For example,
Empty Field Handling:
- HTTP V1: Throws exceptions if nested fields like
driver_pickup_location
are empty. - HTTP V2: Manages empty fields differently by sending default values instead of throwing exceptions.
- HTTP V1: Throws exceptions if nested fields like
Timestamp Field Format:
- HTTP V1: Supports both simple date and ISO formats for timestamp fields.
- HTTP V2: Supports only ISO format, simplifying and standardizing date handling.
Template Parameter Use:
- HTTP V1: Allows template parameters to be used in URL, header, query, and body configurations.
- HTTP V2: Restricts the use of template parameters in batch mode for URL, header, and query to ensure consistency and prevent errors.
Template Parameter Mode:
- HTTP V1: Restricts templatized JSON body templates to single mode only.
- HTTP V2: Supports the use of templatized JSON body in both batch and single modes, increasing flexibility.
Field Level Usage:
- HTTP V1: Allows only top-level proto fields to be used in configurations.
- HTTP V2: Supports nested level proto fields, offering more detailed data handling capabilities.
Retryable Error Handling:
- HTTP V1: Automatically retries on certain response status codes by default.
- HTTP V2: Requires adding
SINK_RETRYABLE_ERROR
toERROR_TYPES_FOR_RETRY
to specify which errors are retryable, providing more controlled error handling.
JSON Support:
- HTTP V1: Does not support JSON as an input message data type.
- HTTP V2: Adds support for JSON input message data type, broadening its usability.