[[aws2-msk-component]]
= AWS 2 Managed Streaming for Apache Kafka (MSK) Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc
:docTitle: AWS 2 Managed Streaming for Apache Kafka (MSK)
:artifactId: camel-aws2-msk
:description: Manage AWS MSK instances using AWS SDK version 2.x.
:since: 3.1
:supportLevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: AWS 2

*Since Camel {since}*

*{component-header}*

The AWS2 MSK component supports create, run, start, stop and terminate
https://aws.amazon.com/msk/[AWS MSK] instances.

Prerequisites

You must have a valid Amazon Web Services developer account, and be
signed up to use Amazon MSK. More information is available at
https://aws.amazon.com/msk/[Amazon MSK].

[NOTE]
====
The AWS2 MSK component is not supported in OSGI
====

== URI Format

[source,java]
-------------------------
aws2-msk://label[?options]
-------------------------

You can append query options to the URI in the following format,
?options=value&option2=value&...

== URI Options


// component options: START
The AWS 2 Managed Streaming for Apache Kafka (MSK) component supports 14 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *autoDiscoverClient* (common) | Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking. | true | boolean
| *configuration* (producer) | Component configuration |  | MSK2Configuration
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *mskClient* (producer) | To use a existing configured AWS MSK as client |  | KafkaClient
| *operation* (producer) | *Required* The operation to perform. The value can be one of: listClusters, createCluster, deleteCluster, describeCluster |  | MSK2Operations
| *pojoRequest* (producer) | If we want to use a POJO request as body or not | false | boolean
| *proxyHost* (producer) | To define a proxy host when instantiating the MSK client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the MSK client |  | Integer
| *proxyProtocol* (producer) | To define a proxy protocol when instantiating the MSK client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
| *region* (producer) | The region in which MSK client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
| *trustAllCertificates* (producer) | If we want to trust all certificates in case of overriding the endpoint | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *accessKey* (security) | Amazon AWS Access Key |  | String
| *secretKey* (security) | Amazon AWS Secret Key |  | String
|===
// component options: END




// endpoint options: START
The AWS 2 Managed Streaming for Apache Kafka (MSK) endpoint is configured using URI syntax:

----
aws2-msk:label
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *label* | *Required* Logical name |  | String
|===


=== Query Parameters (14 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *autoDiscoverClient* (common) | Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking. | true | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *mskClient* (producer) | To use a existing configured AWS MSK as client |  | KafkaClient
| *operation* (producer) | *Required* The operation to perform. The value can be one of: listClusters, createCluster, deleteCluster, describeCluster |  | MSK2Operations
| *pojoRequest* (producer) | If we want to use a POJO request as body or not | false | boolean
| *proxyHost* (producer) | To define a proxy host when instantiating the MSK client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the MSK client |  | Integer
| *proxyProtocol* (producer) | To define a proxy protocol when instantiating the MSK client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
| *region* (producer) | The region in which MSK client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
| *trustAllCertificates* (producer) | If we want to trust all certificates in case of overriding the endpoint | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *accessKey* (security) | Amazon AWS Access Key |  | String
| *secretKey* (security) | Amazon AWS Secret Key |  | String
|===
// endpoint options: END


Required MSK component options

You have to provide the amazonMskClient in the
Registry or your accessKey and secretKey to access
the https://aws.amazon.com/msk/[Amazon MSK] service.

== Usage

=== Message headers evaluated by the MSK producer

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelAwsMSKOperation` |`String` |The operation to perform

|`CamelAwsMSKClusterFilter` |`String` |The cluster name filter for list operation

|`CamelAwsMSKClusterName` |`String` |The cluster name for list and create operation

|`CamelAwsMSKClusterArn` |`String` |The cluster arn for delete operation

|`CamelAwsMSKClusterKafkaVersion` |`String` | The Kafka for the cluster during create operation

|`CamelAwsMSKBrokerNodesNumber` |`Integer`| The number of nodes for the cluster during create operation

|`CamelAwsMSKBrokerNodesGroupInfo` |`com.amazonaws.services.kafka.model.BrokerNodeGroupInfo`| The Broker nodes group info to provide during the create operation
|=======================================================================

=== MSK Producer operations

Camel-AWS MSK component provides the following operation on the producer side:

- listClusters
- createCluster
- deleteCluster
- describeCluster

== Producer Examples

- listClusters: this operation will list the available MSK Brokers in AWS

[source,java]
--------------------------------------------------------------------------------
from("direct:listClusters")
    .to("aws2-msk://test?mskClient=#amazonMskClient&operation=listClusters")
--------------------------------------------------------------------------------

- createCluster: this operation will create an MSK Cluster in AWS

[source,java]
--------------------------------------------------------------------------------
from("direct:createCluster")
    .process(new Processor() {
       @Override
       public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(MSK2Constants.CLUSTER_NAME, "test-kafka");
                exchange.getIn().setHeader(MSK2Constants.CLUSTER_KAFKA_VERSION, "2.1.1");
                exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_NUMBER, 2);
                BrokerNodeGroupInfo groupInfo = BrokerNodeGroupInfo.builder().build();
                exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_GROUP_INFO, groupInfo);					
       }
    })
    .to("aws2-msk://test?mskClient=#amazonMskClient&operation=createCluster")
--------------------------------------------------------------------------------

- deleteCluster: this operation will delete an MSK Cluster in AWS

[source,java]
--------------------------------------------------------------------------------
from("direct:deleteCluster")
    .setHeader(MSK2Constants.CLUSTER_ARN, constant("test-kafka"));
    .to("aws2-msk://test?mskClient=#amazonMskClient&operation=deleteCluster")
--------------------------------------------------------------------------------

[source,java]
--------------------------------------------------------------------------------
from("direct:createCluster")
    .process(new Processor() {
       @Override
       public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(MSK2Constants.CLUSTER_NAME, "test-kafka");
                exchange.getIn().setHeader(MSK2Constants.CLUSTER_KAFKA_VERSION, "2.1.1");
                exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_NUMBER, 2);
                BrokerNodeGroupInfo groupInfo = BrokerNodeGroupInfo.builder().build();
                exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_GROUP_INFO, groupInfo);					
       }
    })
    .to("aws2-msk://test?mskClient=#amazonMskClient&operation=deleteCluster")
--------------------------------------------------------------------------------

== Automatic detection of KafkaClient client in registry

The component is capable of detecting the presence of an KafkaClient bean into the registry.
If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter.
This may be really useful for smarter configuration of the endpoint.

== Using a POJO as body

Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
In AWS MSK there are multiple operations you can submit, as an example for List clusters request, you can do something like:

------------------------------------------------------------------------------------------------------
from("direct:aws2-msk")
     .setBody(ListClustersRequest.builder().maxResults(10).build())
     .to("aws2-msk://test?mskClient=#amazonMskClient&operation=listClusters&pojoRequest=true")
------------------------------------------------------------------------------------------------------

In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.

== Dependencies

Maven users will need to add the following dependency to their pom.xml.

*pom.xml*

[source,xml]
---------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-msk</artifactId>
    <version>${camel-version}</version>
</dependency>
---------------------------------------

where `$\{camel-version\}` must be replaced by the actual version of Camel.

include::camel-spring-boot::page$aws2-msk-starter.adoc[]
