<a id="cc-aws-lambda-sink"></a>

# AWS Lambda Sink Connector for Confluent Cloud

The fully managed AWS Lambda Sink connector for Confluent Cloud pulls records from
one or more Apache Kafka® topics, converts them to JSON, and executes an AWS Lambda
function. The AWS Lambda function can be invoked by this connector either
synchronously or asynchronously.

* In **synchronous mode**, records within a topic and partition are processed sequentially. Records within different topic partitions can be processed in parallel. The response from AWS Lambda is written to `success-<connector-id>` topic. If an error occurs during Lambda execution, the connector is configured to write the error to the `error-<connector-id>` topic and proceed. For additional details about Lambda invocation, see [Synchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html).
* In **asynchronous mode**, the connector operates in a fire-and-forget mode. Records are processed on a best-effort, sequential basis. The connector does not attempt any retries. AWS Lambda automatically retries up to two times, after which AWS Lambda can move the request to a dead letter queue. For additional details about Lambda invocation, see [Asynchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html).

#### NOTE
* This Quick Start is for the fully managed Confluent Cloud connector. If you are
  installing the connector locally for Confluent Platform, see [AWS Lambda
  Sink Connector for Confluent Platform](https://docs.confluent.io/kafka-connectors/aws-lambda/current/).
* If you require private networking for fully managed connectors, make sure to set up the proper
  networking beforehand. For more information, see [Manage Networking for Confluent Cloud Connectors](networking/internet-resource.md#clusters-connect-cloud).

## Features

The AWS Lambda Sink connector provides the following features:

* **Supports multiple Lambda functions**: The connector supports a single AWS
  Lambda function or multiple Lambda functions.
* **Provider integration support**: The connector supports IAM role-based authorization using
  Confluent Provider Integration. For more information about provider integration setup, see
  the [IAM roles authentication](#cc-aws-lambda-sink-setup-connection).
* **Synchronous and Asynchronous Lambda function invocation**: The AWS Lambda function can be invoked by this connector either synchronously or asynchronously.
* **At-least-once delivery**: The connector guarantees at-least-once processing semantics
  in synchronous mode. In asynchronous mode, at-least-once delivery is guaranteed, but it does not
  guarantee at-least-once processing by the AWS Lambda function. This is because AWS Lambda may
  drop async events if it cannot process them after a few retries.

  Under certain circumstances, a record may be processed more than once. You should design
  your AWS Lambda function to be [idempotent](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/).
  If you have configured the connector to log the response from the Lambda function to a Kafka
  topic, the topic can contain duplicate records. You can enable Kafka log compaction on the
  topic to remove duplicate records.  Alternatively, you can write a ksqlDB query to detect
  duplicate records in a time window.
* **Supports multiple tasks**: The connector supports running one or more tasks. More tasks may improve performance.
* **Results topics**: In synchronous mode, AWS Lambda results are stored in the `success-<connector-id>` and `error-<connector-id>` topics.
* **Input Data Format with or without a Schema**: The connector supports input data from Kafka topics in Avro, JSON Schema (JSON_SR), Protobuf, JSON (schemaless), Bytes, or String format. [Schema Registry](../get-started/schema-registry.md#cloud-sr-config) must be enabled to use a Schema Registry-based format.

  #### NOTE
  If no schema is defined, values are encoded as plain strings. For example,  `"name": "Kimberley Human"` is encoded as `name=Kimberley Human`.
* **Input Key Format**: The connector supports Avro, JSON Schema (JSON_SR), Protobuf, JSON (schemaless), Bytes, or String format for the Kafka record key, configured independently from the value format. The default is Bytes. [Schema Registry](../get-started/schema-registry.md#cloud-sr-config) must be enabled to use a Schema Registry-based format.
* **Backward compatibility**: The API for this connector is compatible with
  earlier versions.
* **Supports AWS Lambda function versions and aliases**: The connector supports invoking specific AWS Lambda function versions or aliases by appending a colon and the desired version or alias to the function name (for example, `function:1` for a version or `function:alias` for an alias).
* **Secret manager integration**: The connector supports secret manager integration. For `Access Keys` based
  authentication, the connector can retrieve the following configurations from an integrated secret manager
  at runtime as needed.

  | **Secret manager managed configuration**   | **Type**   |
  |--------------------------------------------|------------|
  | `aws.access.key.id`                        | `PASSWORD` |
  | `aws.secret.access.key`                    | `PASSWORD` |

  For more information, see [Create a secret manager integration in Confluent Cloud](secret-manager-integration/overview.md#cloud-secret-manager-quickstart).

For more information and examples to use with the Confluent Cloud API for Connect,
see the [Confluent Cloud API for Connect Usage Examples](connect-api-section.md#ccloud-connect-api) section.

## Limitations

Be sure to review the following information.

* For connector limitations, see [AWS Lambda Sink Connector](limits.md#aws-lambda-sink-limits) limitations.
* If you plan to use one or more Single Message Transformations (SMTs), see [SMT Limitations](single-message-transforms.md#cc-single-message-transforms-limitations).

## Quick Start

Use this quick start to get up and running with the Confluent Cloud AWS Lambda Sink
connector. The quick start provides the basics of selecting the connector and
configuring it to send records to AWS Lambda.

<a id="cc-aws-lambda-sink-prereqs"></a>

Prerequisites
: * Authorized access to a [Confluent Cloud](https://www.confluent.io/confluent-cloud/) cluster on AWS.
  <br/>
    Confluent Cloud is available through the [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-g5ujul6iovvcy?trk=14575e70-1766-4f20-8083-0c2757a1ec75&sc_channel=el)
    or [directly from Confluent](https://www.confluent.io/get-started/).
  * The Confluent CLI installed and configured for the cluster. See [Install the Confluent CLI](https://docs.confluent.io/confluent-cli/current/install.html).
  * [Schema Registry](../get-started/schema-registry.md#cloud-sr-config) must be enabled to use a Schema Registry-based format (for example, Avro, JSON_SR (JSON Schema), or Protobuf).
  <br/>
    #### NOTE
    If no schema is defined, values are encoded as plain strings. For example,  `"name": "Kimberley Human"` is encoded as `name=Kimberley Human`.
  * For networking considerations, see [Networking and DNS](overview.md#connect-internet-access-resources). To use a set of public egress IP addresses, see [Public Egress IP Addresses for Confluent Cloud Connectors](static-egress-ip.md#cc-static-egress-ips).
  * Your AWS Lambda project should be in the same region as your Confluent Cloud cluster where you are running the connector.
  * An AWS account configured with [Access Keys](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys).
  * You need to configure a Lambda IAM policy for the account to allow the following:
    * `lambda:InvokeFunction` and `lambda:GetFunction`.
    * Add resource to allow invoking all aliases and versions of the function, including `$LATEST`. When you specify function name without a version or alias suffix, all underlying versions, aliases, and `$LATEST` are implicitly included and accessible.
  <br/>
    The following shows a JSON example for setting this policy:
    ```json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "lambda:InvokeFunction",
                    "lambda:GetFunction"
                ],
                "Resource": [
                  "arn:aws:lambda:*:*:function:<function-name>"
                ]
            }
        ]
    }
    ```
  <br/>
  #### NOTE
  If you want to restrict the connector to a particular alias or version, update the permission policy with alias or versions appended at the end as show below:
  <br/>
  ```none
  arn:aws:lambda:*:*:function:functionName:alias
  OR
  arn:aws:lambda:*:*:function:functionName:1
  ```
  <br/>
  - Kafka cluster credentials. The following lists the different ways you can provide credentials.
    - Enter an existing [service account](service-account.md#s3-cloud-service-account) resource ID.
    - Create a Confluent Cloud [service account](service-account.md#s3-cloud-service-account) for the connector. Make sure to review the ACL entries required in the [service account documentation](service-account.md#s3-cloud-service-account). Some connectors have specific ACL requirements.
    - Create a Confluent Cloud API key and secret. To create a key and secret, you can use [confluent api-key create](https://docs.confluent.io/confluent-cli/current/command-reference/api-key/confluent_api-key_create.html) *or* you can autogenerate the API key and secret directly in the Cloud Console when setting up the connector.

### Using the Confluent Cloud Console

#### Step 1: Launch your Confluent Cloud cluster

To create and launch a Kafka cluster in Confluent Cloud, see [Create a kafka cluster in Confluent Cloud](../get-started/index.md#cloud-create-kafka-cluster).

#### Step 2: Add a connector

In the left navigation menu, click **Connectors**. If you already have connectors in your cluster, click **+ Add
connector**.

#### Step 3: Select your connector

Click the **AWS Lambda Sink** connector card.

![AWS Lambda Sink Connector Card](images/ccloud-aws-lambda-sink-icon.png)

<a id="cc-aws-lambda-sink-setup-connection"></a>

#### Step 4: Enter the connector details

#### NOTE
* Ensure you have all your [prerequisites](#cc-aws-lambda-sink-prereqs) completed.
* An asterisk ( \* ) designates a required entry.

At the **Add AWS Lambda Sink Connector** screen, complete the
following:

### Topic selection

If you’ve already populated your Kafka topics, select the topics you want
to connect from the **Topics** list.

To create a new topic, click **+Add new topic**.

### Kafka access

1. Select the way you want to provide **Kafka Cluster credentials**. You can
   choose one of the following options:
   - **My account**: This setting allows your connector to globally access everything
     that you have access to. With a user account, the connector uses an API key and
     secret to access the Kafka cluster. This option is not recommended for production.
   - **Service account**: This setting limits the access for your connector by using a
     [service account](service-account.md#s3-cloud-service-account). This option is recommended for
     production.
   - **Use an existing API key**: This setting allows you to specify an API key and a
     secret pair. You can use an existing pair or create a new one. This method is not
     recommended for production environments.

   #### NOTE
   Freight clusters support only service accounts for Kafka authentication.
2. Click **Continue**.

### Authentication

1. Configure the authentication properties:

   **Authentication method**
   - **Authentication method**: Under **Amazon credentials**, select how you want to authenticate with AWS:
     - If you select **Access Keys**, enter your AWS credentials in the **Amazon Access Key ID** and **Amazon Secret Access Key** fields. For information about how to set these up, see [Access Keys](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys).
     - If you select **IAM Roles**, choose an existing integration name under **Provider integration name** dropdown that has access to your resource. For more information, see [Manage Provider Integration for Fully Managed Connectors in Confluent Cloud](provider-integration.md#cloud-pi-quickstart).
   - **Use secret manager**: Fetch sensitive configuration values from a secret manager.

   **AWS credentials**
   - **Provider Integration**: Select an existing integration that has access to your resource if you select **IAM Roles** as your authentication method.
   - **AWS access key ID**: Specify the Amazon Access Key that the connector can use to connect to AWS Lambda if you select **Access Keys** as your authentication method.
   - **AWS secret access key**: Specify the Amazon Secret Key that the connector can use to connect to AWS Lambda if you select **Access Keys** as your authentication method.

   **Secret manager configuration**
   - **Secret manager**: Select the secret manager to use for retrieving sensitive data.
   - **Configurations from Secret manager**: Select the configurations whose values Confluent Cloud should
     fetch from the secret manager.
   - **Provider Integration**: Select an existing integration that has access to your resource if you select **IAM Roles** as your authentication method.

   **How should we connect to AWS Lambda?**
   - **AWS Lambda function configuration mode**: The mode in which to run
     the connector. Options are `multiple` to invoke multiple AWS
     Lambda functions or `single` (the default) to invoke a single
     function. One connector instance can support a maximum of 10
     functions.
   - **AWS Lambda function name**: The AWS Lambda function to invoke
     when you select `single` as the configuration mode. You can specify a function version or alias by appending it to the function name with a colon (:). For example, `function:1` for version 1, or `function:alias` for an alias. This enables dynamic routing to specific versions without updating the function name.
   - **AWS Lambda function name to topic map**: A map of Kafka topics to AWS Lambda functions
     when you select `multiple` as the configuration mode. Enter the map as comma-separated
     tuples. For example: `<topic-1>;<function-1>,<topic-2>;<function-2>,...`. You can map
     a maximum of three functions to a single topic. Each function can optionally include a version or alias by appending it with a colon (:). For example, `topic0;function0:1` for version 1, or `topic0;function0:alias0` for an alias. This enables routing to different function versions/aliases per topic.
   - **AWS Lambda Region**: The AWS Lambda Region is hard-coded to the region where the Confluent Cloud cluster
     is running.
2. Click **Continue**.

### Configuration

#### NOTE
Configuration properties that are not shown in the
Cloud Console use the default values.  See
[Configuration Properties](#cc-amazon-lambda-sink-config-properties) for all property values
and definitions.

- **Input Kafka record value format**: Select an input Kafka record value format (data coming from the
  Kafka topic). Valid entries are `AVRO`, `JSON_SR`, `PROTOBUF`, `JSON`, or `BYTES`. A valid schema
  must be available in [Schema Registry](../get-started/schema-registry.md#cloud-sr-config) to use a
  schema-based message format.

### **Show advanced configurations**

- **Schema context**: Select a schema context to use for this connector, if using
  a schema-based data format. This property defaults to the **Default** context,
  which configures the connector to use the default schema set up for Schema Registry in your
  Confluent Cloud environment. A schema context allows you to use separate schemas (like
  schema sub-registries) tied to topics in different Kafka clusters that share the
  same Schema Registry environment. For example, if you select a non-default context, a
  **Source** connector uses only that schema context to register a schema and a
  **Sink** connector uses only that schema context to read from. For more
  information about setting up a schema context, see [What are schema contexts and when should you use them?](../sr/faqs-cc.md#faq-schema-contexts).
- **Input Kafka record key format**: Sets the input Kafka record key format. Valid entries are `AVRO`, `BYTES`, `JSON`, `JSON_SR`, `PROTOBUF`, or `STRING`. Note that you need to have Confluent Cloud Schema Registry configured if using a schema-based message format like `AVRO`, `JSON_SR`, or `PROTOBUF`.
- **AWS Lambda invocation type**: The mode in which the AWS Lambda
  function is invoked. Two modes are supported: **sync** and
  **async**. For more details about Lambda invocation, see
  [Synchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html)
  or [Asynchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html).
- **Batch size**: The maximum number of Kafka records to combine in
  a single AWS Lambda function invocation. You should set this as
  high as possible, without exceeding AWS Lambda invocation payload
  limits. To disable batching of records, set this value to 1.
- **Record Converter Class**: Record converter class to convert
  Kafka records to AWS Lambda payload.
- **Behavior on Error**: The connector’s behavior if the execution of lambda function returns an error. This setting is applicable only when **AWS Lambda invocation type** is set to `sync` mode. Valid options are `log`, `fail` and `ignore`.
  - `log` logs the error message in `error-<connector-id>` topic and continues processing.
  - `fail` stops the connector in case of an error.
  - `ignore` continues to process next set of records.
- **AWS Lambda Socket Timeout**: The socket timeout in milliseconds for the AWS Lambda client. This is the amount of time the client will wait for a response from the AWS Lambda service. The default value is 50000 milliseconds. Minimum value is 1000 milliseconds. Maximum value is 600000 milliseconds.

**Additional Configs**

- **Value Converter Schema ID Deserializer**: Sets the class name of the schema ID deserializer for values. The deserializer reads schema IDs from message headers.
- **Value Converter Reference Subject Name Strategy**: Sets the subject reference name strategy for values. Valid entries are `DefaultReferenceSubjectNameStrategy` or `QualifiedReferenceSubjectNameStrategy`. You can use this strategy only with `PROTOBUF` format; the default strategy is `DefaultReferenceSubjectNameStrategy`.
- **Schema ID For Value Converter**: Sets the schema ID to use for deserialization when using `ConfigSchemaIdDeserializer`. This lets you specify a fixed schema ID for deserializing message values. This property is applicable only when `value.converter.value.schema.id.deserializer` is set to `ConfigSchemaIdDeserializer`.
- **Errors Tolerance**: Use this property to configure the connector’s error handling behavior.

  #### WARNING
  Use this property with caution for sink connectors, as it can lead to data loss. If you set this property to `all`, the connector does not fail on errant records, but logs them (and sends to DLQ for sink connectors) and continues processing. If you set this property to `none`, the connector task fails on errant records.
- **Key Converter Schema ID Deserializer**: Sets the class name of the schema ID deserializer for keys. The deserializer reads schema IDs from message headers.
- **Value Converter Decimal Format**: Specifies the `JSON` or `JSON_SR` serialization format for Connect `DECIMAL` logical type values with two allowed literals:
  `BASE64` to serialize `DECIMAL` logical types as base64 encoded binary data, and
  `NUMERIC` to serialize `DECIMAL` logical type values in `JSON` or `JSON_SR` as a number representing the decimal value.
- **Schema GUID For Key Converter**: Sets the schema GUID to use for deserialization when using `ConfigSchemaIdDeserializer`. This lets you specify a fixed schema GUID for deserializing message keys. This property is applicable only when `key.converter.key.schema.id.deserializer` is set to `ConfigSchemaIdDeserializer`.
- **Schema GUID For Value Converter**: Sets the schema GUID to use for deserialization when using `ConfigSchemaIdDeserializer`. This lets you specify a fixed schema GUID for deserializing message values. This property is applicable only when `value.converter.value.schema.id.deserializer` is set to `ConfigSchemaIdDeserializer`.
- **Value Converter Connect Meta Data**: Enables the Connect converter to add its metadata to the output schema. Applies to Avro converters.
- **Value Converter Value Subject Name Strategy**: Determines how to construct the subject name under which the value schema is registered with Schema Registry.
- **Key Converter Key Subject Name Strategy**: Determines how to construct the subject name for key schema registration.
- **Schema ID For Key Converter**: Sets the schema ID to use for deserialization when using `ConfigSchemaIdDeserializer`. This lets you specify a fixed schema ID for deserializing message keys. This property is applicable only when `key.converter.key.schema.id.deserializer` is set to `ConfigSchemaIdDeserializer`.

**Auto-restart policy**

- **Enable Connector Auto-restart**: Enables the auto-restart behavior of the connector and its
  task in the event of user-actionable errors. Defaults to `true`, enabling the connector to
  automatically restart in case of user-actionable errors. Set this property to `false` to
  disable auto-restart for failed connectors. If disabled, you must manually restart the connector.

**Consumer configuration**

- **Max poll interval(ms)**: Sets the maximum delay between subsequent consume requests to Kafka. Use this property to
  improve connector performance in cases when the connector cannot send records to the sink system.
  The default is 300,000 milliseconds (5 minutes).
- **Max poll records**: Sets the maximum number of records to consume from Kafka in a single request. Use this property to
  improve connector performance in cases when the connector cannot send records to the sink system.
  The default is 500 records.

**Transforms**

- **Single Message Transformations**: To add a new SMT, see [Add transforms](single-message-transforms.md#cc-single-message-transforms-ui).
  For more information about unsupported SMTs, see
  [Unsupported transformations](single-message-transforms.md#cc-single-message-transforms-unsupported-transforms).

**Processing position**

- **Set offsets**: Click **Set offsets** to define a specific offset for
  this connector to begin procession data from. For more information
  on managing offsets, see [Manage offsets](offsets.md#connect-custom-offsets).

See [Configuration Properties](#cc-amazon-lambda-sink-config-properties) for all property
values and definitions.

- Click **Continue**.

### Sizing

Based on the number of topic partitions you select, you will be provided
with a recommended number of tasks.

1. To change the number of recommended tasks, enter the number of
   [tasks](/platform/current/connect/concepts.html#tasks) for the connector to use in
   the **Tasks** field.
2. Click **Continue**.

### Review and Launch

1. Verify the connection details.
2. Click **Launch**.

   The status for the connector should go from **Provisioning** to
   **Running**.

#### Step 5: Check the Lambda function metrics

Go to the AWS Lambda console, open the Lambda function, and verify that records are processing. You can check for processing on the **Monitoring** tab on the Lambda function page. In **synchronous mode**, AWS Lambda results are stored in the following topics:

* `success-<connector-id>`
* `error-<connector-id>`

To quickly identify results that are specific to the AWS Lambda function, a
message header is included that provides the AWS Lambda function name. Search
for the function name in either topic to identify results for the function.

For configuration validation failure or system lag issues, see [Troubleshooting](#cc-amazon-lambda-sink-troubleshooting).

For more information and examples to use with the Confluent Cloud API for Connect,
see the [Confluent Cloud API for Connect Usage Examples](connect-api-section.md#ccloud-connect-api) section.

#### NOTE
When you launch a connector, a Dead Letter Queue (DLQ) topic is automatically created.
See [View Connector Dead Letter Queue Errors in Confluent Cloud](dead-letter-queue.md#ccloud-dlq-topics) for details. If an `InvalidRequestContentException` occurs,
the entire batch containing the failed record is sent to the DLQ.

### Using the Confluent CLI

Complete the following steps to set up and run the connector using the Confluent CLI.

#### NOTE
Make sure you have all your [prerequisites](#cc-aws-lambda-sink-prereqs) completed.

#### Step 1: List the available connectors

Enter the following command to list available connectors:

```none
confluent connect plugin list
```

#### Step 2: List the connector configuration properties

Enter the following command to show the connector configuration properties:

```none
confluent connect plugin describe <connector-plugin-name>
```

The command output shows the required and optional configuration properties.

#### Step 3: Create the connector configuration file

Create a JSON file that contains the connector configuration properties. The
following example shows an example configuration. For two additional examples,
see [Configuration JSON Examples](#cc-amazon-lambda-sink-config-examples).

```none
{
  "connector.class": "LambdaSink",
  "name": "LambdaSinkConnector_0",
  "topics": "topic_aws_lambda_1",
  "input.data.format": "JSON",
  "kafka.auth.mode": "KAFKA_API_KEY",
  "kafka.api.key": "****************",
  "kafka.api.secret": "*************************************************",
  "aws.access.key.id": "****************",
  "aws.secret.access.key": "********************************************",
  "aws.lambda.configuration.mode": "single",
  "aws.lambda.function.name": "lambda-test",
  "aws.lambda.invocation.type": "sync",
  "behavior.on.error": "fail",
  "tasks.max": "1"
}
```

Note the following required property definitions:

* `"connector.class"`: Identifies the connector plugin name.
* `"name"`: Sets a name for your new connector.
* `"topics"`: Identifies the topic name or a comma-separated list of topic names.

* `"kafka.auth.mode"`: Identifies the connector authentication mode you want to use. There are two options: `SERVICE_ACCOUNT` or `KAFKA_API_KEY` (the default). To use an API key and secret, specify the configuration properties `kafka.api.key` and `kafka.api.secret`, as shown in the example configuration (above).  To use a [service account](service-account.md#s3-cloud-service-account), specify the **Resource ID** in the property `kafka.service.account.id=<service-account-resource-ID>`. To list the available service account resource IDs, use the following command:
  ```bash
  confluent iam service-account list
  ```

  For example:
  ```bash
  confluent iam service-account list

     Id     | Resource ID |       Name        |    Description
  +---------+-------------+-------------------+-------------------
     123456 | sa-l1r23m   | sa-1              | Service account 1
     789101 | sa-l4d56p   | sa-2              | Service account 2
  ```

* `"input.data.format"`:  Sets the input Kafka record value format (data coming from the Kafka topic). Valid entries are **AVRO**, **JSON_SR** (JSON Schema), **PROTOBUF**, **JSON** (Schemaless), **BYTES**, or **STRING**. You must have Confluent Cloud Schema Registry configured if using a schema-based message format.

  #### NOTE
  If no schema is defined, values are encoded as plain strings. For example,  `"name": "Kimberley Human"` is encoded as `name=Kimberley Human`.
* `"input.key.format"`: Sets the input Kafka record key format (data coming from the Kafka topic). Valid entries are **AVRO**, **JSON_SR** (JSON Schema), **PROTOBUF**, **JSON** (Schemaless), **BYTES**, or **STRING**. The default is **BYTES**. You must have Confluent Cloud Schema Registry configured if using a schema-based message format.
* `"aws.access.key.id"` and `"aws.secret.access.key"`: Enter the AWS Access Key ID and Secret. For information about how to set these up, see [Access Keys](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys).
* `"aws.lambda.configuration.mode"`: The mode in which to run the connector.
  Options are `multiple` to invoke multiple AWS Lambda functions or
  `single` (the default) to invoke a single function. One connector instance
  can support a maximum of 10 functions.
* `"aws.lambda.function.name"`: The AWS Lambda function to invoke for
  `single` configuration mode.
* `"aws.lambda.topic2function.map"`: A map of Kafka topics to AWS Lambda
  functions for `multiple` configuration mode. Enter the map as comma-
  separated tuples. For example: `<topic-1>;<function-1>,<topic-2>;<function-2>,...`.
  You can map a maximum of three functions to a single topic.

#### NOTE
You can specify a Lambda version or alias for both single (`aws.lambda.function.name`) and multiple (`aws.lambda.topic2function.map`) configuration modes by appending the version or alias to the function name using a colon (:).

* Single configuration mode (`aws.lambda.function.name`): To use Lambda version or alias, append it to the function name using `:`.

```none
# Add version 1
aws.lambda.function.name = <function-name>:1

# Add alias
aws.lambda.function.name = <function-name>:alias
```

* Multiple configuration mode (`aws.lambda.topic2function.map`): Each topic-function mapping can independently specify a Lambda alias or version. This enables routing to different function versions or aliases per topic.

```none
# Add versions 1 and 2 to topic-function mapping
aws.lambda.topic2function.map = <topic-name>;<function-name>:1, <topic-name>;<function-name>:2

# Add aliases alias1 and alias2 to topic-function mapping
aws.lambda.topic2function.map = <topic-name>;<function-name>:alias1, <topic-name>;<function-name>:alias2
```

* `"aws.lambda.invocation.type"`:
  - `"sync"`: Records within a topic and partition are processed sequentially. Records within different topic partitions can be processed in parallel. If configured, the response from AWS Lambda can be written to a Kafka topic. If an error occurs during Lambda execution, the connector can be configured to either ignore the error and proceed, log the error, or stop the connector completely. For additional details about Lambda invocation, see [Synchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html).
  - `"async"`: The connector operates in a fire-and-forget mode. Records are processed on a
    best-effort, sequential basis. The connector does not attempt any retries. AWS Lambda
    automatically retries up to two times, after which AWS Lambda can move the request to a
    dead letter queue (DLQ). For additional details about Lambda invocation,
    see [Asynchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html).
* `"behavior.on.error"`: Select the error handling behavior for the AWS Lambda function invocations:
  - `"fail"`: Stops the connector in case of an error.
  - `"ignore"`: Continues to process the next set of records.
  - `"log"`: Logs the error message in `error-<connector-id>` topic and continues processing.

  #### NOTE
  The setting is only applicable when `aws.lambda.invocation.type` is set to `sync` mode.
* `"tasks.max"`: Enter the number of [tasks](/platform/current/connect/concepts.html#tasks) in use by the connector. Refer to Confluent Cloud [connector limitations](limits.md#aws-lambda-sink-limits) for additional information.

**SMTs**: For details about adding SMTs using the Confluent CLI, see the [Single Message Transformations](single-message-transforms.md#cc-single-message-transforms) documentation.

See [Configuration Properties](#cc-amazon-lambda-sink-config-properties) for all property values and
definitions.

#### Step 4: Load the properties file and create the connector

Enter the following command to load the configuration and start the connector:

```none
confluent connect cluster create --config-file <file-name>.json
```

For example:

```none
confluent connect cluster create --config-file lambda-sink-config.json
```

Example output:

```none
Created connector LambdaSinkConnector_0 lcc-ix4dl
```

#### Step 5: Check the connector status

Enter the following command to check the connector status:

```none
confluent connect cluster list
```

Example output:

```none
ID          |       Name            | Status  | Type
+-----------+-----------------------+---------+------+
lcc-ix4dl   | LambdaSinkConnector_0 | RUNNING | sink
```

#### Step 6: Check the Lambda function metrics.

Go to the AWS Lambda console, open the Lambda function, and verify that records are processing. You can check for processing on the **Monitoring** tab on the Lambda function page. In **synchronous mode**, AWS Lambda results are stored in the following topics:

* `success-<connector-id>`
* `error-<connector-id>`

To quickly identify results that are specific to the AWS Lambda function, a
message header is included that provides the AWS Lambda function name. Search
for the function name in either topic to identify results for the function.

For configuration validation failure or system lag issues, see [Troubleshooting](#cc-amazon-lambda-sink-troubleshooting).

For more information and examples to use with the Confluent Cloud API for Connect,
see the [Confluent Cloud API for Connect Usage Examples](connect-api-section.md#ccloud-connect-api) section.

#### NOTE
When you launch a connector, a Dead Letter Queue (DLQ) topic is automatically created.
See [View Connector Dead Letter Queue Errors in Confluent Cloud](dead-letter-queue.md#ccloud-dlq-topics) for details. If an `InvalidRequestContentException` occurs,
the entire batch containing the failed record is sent to the DLQ.

<a id="cc-amazon-lambda-sink-config-examples"></a>

## Configuration JSON Examples

Select the following tabs for additional configuration examples.

### `single` configuration mode

```none
{
  "connector.class": "LambdaSink",
  "name": "LambdaSinkConnector_0",
  "topics": "topic_aws_lambda_1,topic_aws_lambda_2",
  "input.data.format": "JSON",
  "connector.class": "LambdaSink",
  "kafka.auth.mode": "KAFKA_API_KEY",
  "kafka.api.key": "****************",
  "kafka.api.secret": "********************************************",
  "aws.access.key.id": "****************",
  "aws.secret.access.key": "****************************************",
  "aws.lambda.function.name": "lambda-test",
  "aws.lambda.configuration.mode": "single",
  "aws.lambda.invocation.type": "sync",
  "behavior.on.error": "fail",
  "tasks.max": "1"
}
```

### `multiple` configuration mode

```none
{
  "connector.class": "LambdaSink",
  "name": "LambdaSinkConnector_0",
  "topics": "topic_aws_lambda_1,topic_aws_lambda_2",
  "input.data.format": "JSON",
  "connector.class": "LambdaSink",
  "kafka.auth.mode": "KAFKA_API_KEY",
  "kafka.api.key": "****************",
  "kafka.api.secret": "********************************************",
  "aws.access.key.id": "****************",
  "aws.secret.access.key": "****************************************",
  "aws.lambda.topic2function.map": "topic_aws_lambda_1;arn:aws:lambda:<region>:<account_id>:function:lambda1:lambdatest2,topic_aws_lambda_2;arn:aws:lambda:<region>:<account_id>:function:lambda1",
  "aws.lambda.configuration.mode": "multiple",
  "aws.lambda.invocation.type": "sync",
  "behavior.on.error": "fail",
  "tasks.max": "1"
}
```

<a id="cc-amazon-lambda-sink-error-handling"></a>

## Error handling

The AWS Lambda Sink connector may encounter the following types of errors:

### Transient errors

Transient errors such as network timeouts or errors because of rate limiting.
The connector handles transient errors through multiple layers:

- **AWS SDK automatic retries**: The connector relies on the AWS Lambda SDK to automatically
  handle transient errors such as network timeouts or server errors using the SDK’s built-in
  retry mechanisms.
- **Connector-level retries**: The connector additionally handles specific AWS Lambda service
  limits (`EC2ThrottledException`, `ENILimitReachedException`) by marking them as retriable,
  allowing Kafka Connect to retry the entire batch. In asynchronous mode, such retries are
  not applicable as the connector uses fire-and-forget invocation.
- **Socket timeout configuration**: Configure `aws.lambda.socket.timeout` (default: 50 seconds,
  range: 1-600 seconds) to control how long the client waits for AWS Lambda responses, preventing hangs
  on network issues. This setting is not applicable in asynchronous mode.

### Configuration errors

Configuration errors such as an incorrect AWS Lambda function names, access-related issues, or
invalid credentials are handled as follows:

- **Startup validation**: During connector startup, the connector validates function existence,
  permissions, and credentials. If validation fails, the connector fails to start.
- **Runtime configuration errors**: If configuration-related errors occur during record
  processing (for example, function suddenly becomes unavailable, permission changes), the connector
  does not retry these errors. Instead:
  - **Most configuration errors**: The connector throws a `ConnectException` and stops the task.
  - **Invalid content errors** (specifically `InvalidRequestContentException`): You can optionally
    send records to a dead letter queue (DLQ, if configured) instead of stopping the connector.
- **No automatic recovery**: Unlike transient errors, configuration errors require manual
  intervention to fix the underlying configuration issue before restarting the connector.

### AWS Lambda function execution errors

Errors encountered during execution of the AWS Lambda function are classified as handled or
unhandled, with different handling behaviors depending on the invocation mode.

- **Handled errors**: Exceptions intentionally thrown by your application or business logic
  (for example, via the `throw` in a try-catch block). Best practice for sync mode as follows:
  - Throw exceptions on failure (avoid returning an error string).
  - The connector treats thrown exceptions as failures, using `behavior.on.error` to decide
    whether to `fail`, `log`, or `ignore`.
- **Unhandled errors**: Errors from AWS Lambda itself (for example, timeouts, throttling,
  runtime errors).
  - In **sync** mode, the connector interprets similarly to handled errors, and
    processed according to `behavior.on.error`.
  - In **async** mode, AWS Lambda performs internal retries before dropping the request.

#### Execution error scenarios

In case of errors encountered during execution of the AWS Lambda function, the
behavior of the connector depends on the configuration parameters
`aws.lambda.invocation.type` and `behavior.on.error`.

| aws.lambda.invocation.type   | behavior.on.error   | Error Handling                                                                                                                                                                                                                                                                                                                                       |
|------------------------------|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| async                        |                     | The connector relies on AWS Lambda to perform retries<br/>and error handling. AWS Lambda retries the function twice (a total of three<br/>attempts), after which it discards the event. You should configure a<br/>[dead letter queue](https://docs.aws.amazon.com/lambda/latest/dg/dlq.html) if you want to<br/>track the input events that failed. |
| sync                         | fail                | `fail` is the default mode. The connector stops processing records for<br/>that TopicPartition. Records for other TopicPartitions will continue to<br/>process.                                                                                                                                                                                      |
| sync                         | log                 | The connector logs the error message and continues to process the next<br/>batch of records. For help on how to configure the Kafka Connect<br/>Reporter to report errors in a separate topic, see<br/>[Connect<br/>Reporter](/kafka-connectors/self-managed/userguide.html#userguide-connect-reporter).                                             |
| sync                         | ignore              | The connector continues to process next set of records without logging<br/>the error message in a separate topic.                                                                                                                                                                                                                                    |

### Logging errors to Kafka topic

The connector can optionally log errors to a Kafka topic using Kafka Connect
Reporter. Use the following configuration settings to enable error logging:

```properties
aws.lambda.invocation.type=sync
behavior.on.error=log

reporter.error.topic.name=<Required Configuration>
reporter.bootstrap.servers=<Required Configuration>
```

For details about using Kafka Connect Reporter, see [Connect
Reporter](/kafka-connectors/self-managed/userguide.html#userguide-connect-reporter).

<a id="cc-amazon-lambda-sink-troubleshooting"></a>

## Troubleshooting

Review the following if the connector fails validation or seems to be lagging.

### Validation failure

When you launch a connector using a configuration JSON file, the configuration
is validated for the following conditions:

* The configuration properties `aws.lambda.function.name` and
  `aws.lambda.topic2function.map` properties cannot be used in the same
  connector configuration.
* If the configuration property `aws.lambda.configuration.mode` is set to
  `single`, then only `aws.lambda.function.name` can be used.
* If the configuration property `aws.lambda.configuration.mode` is set to
  `multiple`, then only `aws.lambda.topic2function.map` can be used.
* A maximum of 10 functions can be used with a single connector.
* A maximum of three functions can be mapped to one Kafka topic.

### System lag

To reduce system lag, try the following:

* Increase the number of connector tasks. More tasks may improve performance.
* If the data is not balanced or partitioned properly, you can decrease the
  number of topics or topic-to-function mapping and create another connector.

<a id="cc-amazon-lambda-sink-config-properties"></a>

## Configuration Properties

Use the following configuration properties with the fully managed connector. For
self-managed connector property definitions and other details, see the connector
docs in [Self-managed connectors for Confluent Platform](/platform/current/connect/kafka_connectors.html).

### Which topics do you want to get data from?

`topics.regex`
: A regular expression that matches the names of the topics to consume from. This is useful when you want to consume from multiple topics that match a certain pattern without having to list them all individually.
  <br/>
  * Type: string
  * Importance: low

`topics`
: Identifies the topic name or a comma-separated list of topic names.
  <br/>
  * Type: list
  * Importance: high

`errors.deadletterqueue.topic.name`
: The name of the topic to be used as the dead letter queue (DLQ) for messages that result in an error when processed by this sink connector, or its transformations or converters. Defaults to ‘dlq-${connector}’ if not set. The DLQ topic will be created automatically if it does not exist. You can provide `${connector}` in the value to use it as a placeholder for the logical cluster ID.
  <br/>
  * Type: string
  * Default: dlq-${connector}
  * Importance: low

`reporter.result.topic.name`
: The name of the topic to produce records to after successfully processing a sink record. Defaults to ‘success-${connector}’ if not set. You can provide `${connector}` in the value to use it as a placeholder for the logical cluster ID.
  <br/>
  * Type: string
  * Default: success-${connector}
  * Importance: low

`reporter.error.topic.name`
: The name of the topic to produce records to after each unsuccessful record sink attempt. Defaults to ‘error-${connector}’ if not set. You can provide `${connector}` in the value to use it as a placeholder for the logical cluster ID.
  <br/>
  * Type: string
  * Default: error-${connector}
  * Importance: low

### Schema Config

`schema.context.name`
: Add a schema context name. A schema context represents an independent scope in Schema Registry. It is a separate sub-schema tied to topics in different Kafka clusters that share the same Schema Registry instance. If not used, the connector uses the default schema configured for Schema Registry in your Confluent Cloud environment.
  <br/>
  * Type: string
  * Default: default
  * Importance: medium

### Input messages

`input.data.format`
: Sets the input Kafka record value format. Valid entries are AVRO, JSON_SR, PROTOBUF, JSON, BYTES or STRING. Note that you need to have Confluent Cloud Schema Registry configured if using a schema-based message format like AVRO, JSON_SR, and PROTOBUF.
  <br/>
  * Type: string
  * Default: JSON
  * Importance: high

`input.key.format`
: Sets the input Kafka record key format. Valid entries are AVRO, BYTES, JSON, JSON_SR, PROTOBUF, or STRING. Note that you need to have Confluent Cloud Schema Registry configured if using a schema-based message format like AVRO, JSON_SR, and PROTOBUF
  <br/>
  * Type: string
  * Default: BYTES
  * Valid Values: AVRO, BYTES, JSON, JSON_SR, PROTOBUF, STRING
  * Importance: high

### How should we connect to your data?

`name`
: Sets a name for your connector.
  <br/>
  * Type: string
  * Valid Values: A string at most 64 characters long
  * Importance: high

### Kafka Cluster credentials

`kafka.auth.mode`
: Kafka Authentication mode. It can be one of KAFKA_API_KEY or SERVICE_ACCOUNT. It defaults to KAFKA_API_KEY mode, whenever possible.
  <br/>
  * Type: string
  * Valid Values: SERVICE_ACCOUNT, KAFKA_API_KEY
  * Importance: high

`kafka.api.key`
: Kafka API Key. Required when kafka.auth.mode==KAFKA_API_KEY.
  <br/>
  * Type: password
  * Importance: high

`kafka.service.account.id`
: The Service Account that will be used to generate the API keys to communicate with Kafka Cluster.
  <br/>
  * Type: string
  * Importance: high

`kafka.api.secret`
: Secret associated with Kafka API key. Required when kafka.auth.mode==KAFKA_API_KEY.
  <br/>
  * Type: password
  * Importance: high

### Authentication method

`authentication.method`
: Select how you want to authenticate with AWS.
  <br/>
  * Type: string
  * Default: Access Keys
  * Importance: high

`secret.manager.enabled`
: Fetch sensitive configuration values from a secret manager.
  <br/>
  * Type: boolean
  * Default: false
  * Importance: high

### Secret manager configuration

`secret.manager`
: Select the secret manager to use for retrieving sensitive data.
  <br/>
  * Type: string
  * Importance: high

`secret.manager.managed.configs`
: Select the configurations to fetch their values from the secret manager.
  <br/>
  * Type: list
  * Importance: high

`secret.manager.provider.integration.id`
: Select an existing provider integration that has access to your secret manager.
  <br/>
  * Type: string
  * Importance: high

### AWS credentials

`aws.access.key.id`
: The Amazon Access Key used to connect to AWS Lambda.
  <br/>
  * Type: password
  * Importance: high

`aws.secret.access.key`
: The Amazon Secret Key used to connect to AWS Lambda.
  <br/>
  * Type: password
  * Importance: high

`provider.integration.id`
: Select an existing integration that has access to your resource. In case you need to integrate a new IAM role, use provider integration
  <br/>
  * Type: string
  * Importance: high

### How should we connect to AWS Lambda?

`aws.lambda.configuration.mode`
: The mode in connector is configured to invoke a single AWS Lambda function or multiple Lambda functions
  <br/>
  * Type: string
  * Default: single
  * Importance: high

`aws.lambda.function.name`
: The AWS Lambda function to invoke. You can specify a function version or alias by appending it to the function name with a colon (:). For example, `function:1` for version 1, or `function:alias` for an alias. This enables dynamic routing to specific versions without updating the function name.
  <br/>
  * Type: string
  * Importance: high

`aws.lambda.topic2function.map`
: Map of Kafka topics to Lambda functions. Format: comma-separated tuples, for example, <topic-1>;<function-1>,<topic-2>;<function-2>,… Each function can optionally include a version or alias by appending it with a colon (:). For example, `topic0;function0:1` for version 1, or `topic0;function0:alias0` for an alias. This enables routing to different function versions/aliases per topic.
  <br/>
  * Type: list
  * Importance: high

`aws.lambda.region`
: The AWS region where the lambda is defined.
  <br/>
  * Type: string
  * Importance: low

### Lambda details

`aws.lambda.invocation.type`
: The mode in which the AWS Lambda function is invoked. Two modes are supported; sync: In this mode, records are processed sequentially. The result or error from AWS Lambda function can optionally be saved to Kafka topics, success-<connector-id> or error-<connector-id>. async: In this mode, records may not be processed sequentially. The connector does not save the result or error from the AWS Lambda function execution. You can configure a dead letter queue in AWS to record function errors.
  <br/>
  * Type: string
  * Default: sync
  * Importance: high

`aws.lambda.batch.size`
: The maximum number of Kafka records to combine in a single AWS Lambda function invocation. You should set this as high as possible, without exceeding AWS Lambda invocation payload limits. To disable batching of records, set this value to 1.
  <br/>
  * Type: int
  * Default: 20
  * Valid Values: [1,…]
  * Importance: low

`record.converter.class`
: Record converter class to convert Kafka records to AWS Lambda payload. Valid entries are ‘JsonKeyValueConverter’ and ‘EscapedJsonKeyValueConverter’. JsonKeyValueConverter converts ‘key’ and ‘value’ to either JSON primitives or objects according to their schema and in case no schema is defined, they are encoded as plain strings. EscapedJsonKeyValueConverter is similar to JsonKeyValueConverter, the only difference is in case no schema is defined, ‘key’ and ‘value’ are encoded as escaped json strings. For more information, please take a look at connector documentation.
  <br/>
  * Type: string
  * Default: JsonKeyValueConverter
  * Importance: low

`aws.lambda.socket.timeout`
: The socket timeout in milliseconds for the AWS Lambda client. This is the amount of time the client will wait for a response from the AWS Lambda service. The default value is 50000 milliseconds. Minimum value is 1000 milliseconds. Maximum value is 600000 milliseconds.
  <br/>
  * Type: int
  * Default: 50000
  * Valid Values: [1000,…,600000]
  * Importance: low

### How should we handle errors?

`behavior.on.error`
: The connector’s behavior if the execution of lambda function returns an error. This setting is applicable only when ‘AWS Lambda invocation type’ is set to ‘sync’ mode. Valid options are ‘log’, ‘fail’ and ‘ignore’. ‘log’ logs the error message in error-<connector-id> topic and continues processing, ‘fail’ stops the connector in case of an error and ‘ignore’ continues to process next set of records.
  <br/>
  * Type: string
  * Default: log
  * Importance: low

### Consumer configuration

`max.poll.interval.ms`
: The maximum delay between subsequent consume requests to Kafka. This configuration property may be used to improve the performance of the connector, if the connector cannot send records to the sink system. Defaults to 300000 milliseconds (5 minutes).
  <br/>
  * Type: long
  * Default: 300000 (5 minutes)
  * Valid Values: [60000,…,1800000] for non-dedicated clusters and [60000,…] for dedicated clusters
  * Importance: low

`max.poll.records`
: The maximum number of records to consume from Kafka in a single request. This configuration property may be used to improve the performance of the connector, if the connector cannot send records to the sink system. Defaults to 500 records.
  <br/>
  * Type: long
  * Default: 500
  * Valid Values: [1,…,500] for non-dedicated clusters and [1,…] for dedicated clusters
  * Importance: low

### Number of tasks for this connector

`tasks.max`
: Maximum number of tasks for the connector.
  <br/>
  * Type: int
  * Valid Values: [1,…]
  * Importance: high

### Additional Configs

`consumer.override.auto.offset.reset`
: Defines the behavior of the consumer when there is no committed position (which occurs when the group is first initialized) or when an offset is out of range. You can choose either to reset the position to the “earliest” offset (the default) or the “latest” offset. You can also select “none” if you would rather set the initial offset yourself and you are willing to handle out of range errors manually. More details: [https://docs.confluent.io/platform/current/installation/configuration/consumer-configs.html#auto-offset-reset](https://docs.confluent.io/platform/current/installation/configuration/consumer-configs.html#auto-offset-reset)
  <br/>
  * Type: string
  * Importance: low

`consumer.override.isolation.level`
: Controls how to read messages written transactionally. If set to read_committed, consumer.poll() will only return transactional messages which have been committed. If set to read_uncommitted (the default), consumer.poll() will return all messages, even transactional messages which have been aborted. Non-transactional messages will be returned unconditionally in either mode.  More details: [https://docs.confluent.io/platform/current/installation/configuration/consumer-configs.html#isolation-level](https://docs.confluent.io/platform/current/installation/configuration/consumer-configs.html#isolation-level)
  <br/>
  * Type: string
  * Importance: low

`header.converter`
: The converter class for the headers. This is used to serialize and deserialize the headers of the messages.
  <br/>
  * Type: string
  * Importance: low

`key.converter.use.schema.guid`
: The schema GUID to use for deserialization when using ConfigSchemaIdDeserializer. This allows you to specify a fixed schema GUID to be used for deserializing message keys. Only applicable when key.converter.key.schema.id.deserializer is set to ConfigSchemaIdDeserializer.
  <br/>
  * Type: string
  * Importance: low

`key.converter.use.schema.id`
: The schema ID to use for deserialization when using ConfigSchemaIdDeserializer. This allows you to specify a fixed schema ID to be used for deserializing message keys. Only applicable when key.converter.key.schema.id.deserializer is set to ConfigSchemaIdDeserializer.
  <br/>
  * Type: int
  * Importance: low

`value.converter.allow.optional.map.keys`
: Allow optional string map key when converting from Connect Schema to Avro Schema. Applicable for Avro Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.auto.register.schemas`
: Specify if the Serializer should attempt to register the Schema.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.connect.meta.data`
: Allow the Connect converter to add its metadata to the output schema. Applicable for Avro Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.enhanced.avro.schema.support`
: Enable enhanced schema support to preserve package information and Enums. Applicable for Avro Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.enhanced.protobuf.schema.support`
: Enable enhanced schema support to preserve package information. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.flatten.unions`
: Whether to flatten unions (oneofs). Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.generate.index.for.unions`
: Whether to generate an index suffix for unions. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.generate.struct.for.nulls`
: Whether to generate a struct variable for null values. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.int.for.enums`
: Whether to represent enums as integers. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.latest.compatibility.strict`
: Verify latest subject version is backward compatible when use.latest.version is true.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.object.additional.properties`
: Whether to allow additional properties for object schemas. Applicable for JSON_SR Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.optional.for.nullables`
: Whether nullable fields should be specified with an optional label. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.optional.for.proto2`
: Whether proto2 optionals are supported. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.use.latest.version`
: Use latest version of schema in subject for serialization when auto.register.schemas is false.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.use.optional.for.nonrequired`
: Whether to set non-required properties to be optional. Applicable for JSON_SR Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.use.schema.guid`
: The schema GUID to use for deserialization when using ConfigSchemaIdDeserializer. This allows you to specify a fixed schema GUID to be used for deserializing message values. Only applicable when value.converter.value.schema.id.deserializer is set to ConfigSchemaIdDeserializer.
  <br/>
  * Type: string
  * Importance: low

`value.converter.use.schema.id`
: The schema ID to use for deserialization when using ConfigSchemaIdDeserializer. This allows you to specify a fixed schema ID to be used for deserializing message values. Only applicable when value.converter.value.schema.id.deserializer is set to ConfigSchemaIdDeserializer.
  <br/>
  * Type: int
  * Importance: low

`value.converter.wrapper.for.nullables`
: Whether nullable fields should use primitive wrapper messages. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`value.converter.wrapper.for.raw.primitives`
: Whether a wrapper message should be interpreted as a raw primitive at root level. Applicable for Protobuf Converters.
  <br/>
  * Type: boolean
  * Importance: low

`errors.tolerance`
: Use this property if you would like to configure the connector’s error handling behavior. WARNING: This property should be used with CAUTION for SOURCE CONNECTORS as it may lead to dataloss. If you set this property to ‘all’, the connector will not fail on errant records, but will instead log them (and send to DLQ for Sink Connectors) and continue processing. If you set this property to ‘none’, the connector task will fail on errant records.
  <br/>
  * Type: string
  * Default: all
  * Importance: low

`key.converter.key.schema.id.deserializer`
: The class name of the schema ID deserializer for keys. This is used to deserialize schema IDs from the message headers.
  <br/>
  * Type: string
  * Default: io.confluent.kafka.serializers.schema.id.DualSchemaIdDeserializer
  * Importance: low

`key.converter.key.subject.name.strategy`
: How to construct the subject name for key schema registration.
  <br/>
  * Type: string
  * Default: TopicNameStrategy
  * Importance: low

`key.converter.replace.null.with.default`
: Whether to replace fields that have a default value and that are null to the default value. When set to true, the default value is used, otherwise null is used. Applicable for JSON Key Converter.
  <br/>
  * Type: boolean
  * Default: true
  * Importance: low

`key.converter.schemas.enable`
: Include schemas within each of the serialized keys. Input message keys must contain schema and payload fields and may not contain additional fields. For plain JSON data, set this to false. Applicable for JSON Key Converter.
  <br/>
  * Type: boolean
  * Default: false
  * Importance: low

`value.converter.decimal.format`
: Specify the JSON/JSON_SR serialization format for Connect DECIMAL logical type values with two allowed literals:
  <br/>
  BASE64 to serialize DECIMAL logical types as base64 encoded binary data and
  <br/>
  NUMERIC to serialize Connect DECIMAL logical type values in JSON/JSON_SR as a number representing the decimal value.
  <br/>
  * Type: string
  * Default: BASE64
  * Importance: low

`value.converter.flatten.singleton.unions`
: Whether to flatten singleton unions. Applicable for Avro and JSON_SR Converters.
  <br/>
  * Type: boolean
  * Default: false
  * Importance: low

`value.converter.reference.subject.name.strategy`
: Set the subject reference name strategy for value. Valid entries are DefaultReferenceSubjectNameStrategy or QualifiedReferenceSubjectNameStrategy. Note that the subject reference name strategy can be selected only for PROTOBUF format with the default strategy being DefaultReferenceSubjectNameStrategy.
  <br/>
  * Type: string
  * Default: DefaultReferenceSubjectNameStrategy
  * Importance: low

`value.converter.value.schema.id.deserializer`
: The class name of the schema ID deserializer for values. This is used to deserialize schema IDs from the message headers.
  <br/>
  * Type: string
  * Default: io.confluent.kafka.serializers.schema.id.DualSchemaIdDeserializer
  * Importance: low

`value.converter.value.subject.name.strategy`
: Determines how to construct the subject name under which the value schema is registered with Schema Registry.
  <br/>
  * Type: string
  * Default: TopicNameStrategy
  * Importance: low

### Auto-restart policy

`auto.restart.on.user.error`
: Enable connector to automatically restart on user-actionable errors.
  <br/>
  * Type: boolean
  * Default: true
  * Importance: medium

## Next Steps

* For an example that shows fully managed Confluent Cloud connectors in action with
  Confluent Cloud for Apache Flink, see the [Cloud ETL Demo](/platform/current/tutorials/examples/cloud-etl/docs/index.html).
  This example also shows how to use Confluent CLI to manage your resources in
  Confluent Cloud.
  [![image](images/topology.png)](https://docs.confluent.io/platform/current/tutorials/examples/cloud-etl/docs/index.html)
* Try [Confluent Cloud on AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-g5ujul6iovvcy?trk=14575e70-1766-4f20-8083-0c2757a1ec75&sc_channel=el)
  with $1000 of free usage for 30 days, and pay as you go. No credit card is
  required.
