// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/azure-eventhubs-sink.svg[] Azure Eventhubs Sink

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Send Events to Azure Eventhubs.

The Kamelet is able to understand the following headers to be set:

- `partition` / `ce-partition`: as the time to live of the message in the queue.

If the header won't be set then the partition will be assigned by Eventhubs

== Configuration Options

The following table summarizes the configuration options available for the `azure-eventhubs-sink` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *eventhubName {empty}* *| Eventhubs Name| The eventhub name| string| | 
| *namespaceName {empty}* *| Eventhubs Namespace| The eventhubs namespace| string| | 
| *sharedAccessKey {empty}* *| Share Access Key| The key for EventHubs SAS key name| string| | 
| *sharedAccessName {empty}* *| Share Access Name| EventHubs SAS key name| string| | 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `azure-eventhubs-sink` can be used in various contexts.

=== Knative Sink

The `azure-eventhubs-sink` Kamelet can be used as Knative sink by binding it to a Knative object.

.azure-eventhubs-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: azure-eventhubs-sink-binding
spec:
  source:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: azure-eventhubs-sink
    properties:
      eventhubName: "The Eventhubs Name"
      namespaceName: "The Eventhubs Namespace"
      sharedAccessKey: "The Share Access Key"
      sharedAccessName: "The Share Access Name"
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `azure-eventhubs-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f azure-eventhubs-sink-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- mvn:com.fasterxml.jackson.core:jackson-core:2.11.3

- mvn:com.fasterxml.jackson.core:jackson-annotations:2.11.3

- mvn:com.fasterxml.jackson.core:jackson-databind:2.11.3

- mvn:com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.3

- camel:azure-eventhubs

- camel:kamelet
 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind channel/mychannel azure-eventhubs-sink -p "sink.eventhubName=The Eventhubs Name" -p "sink.namespaceName=The Eventhubs Namespace" -p "sink.sharedAccessKey=The Share Access Key" -p "sink.sharedAccessName=The Share Access Name"
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Sink

The `azure-eventhubs-sink` Kamelet can be used as Kafka sink by binding it to a Kafka topic.

.azure-eventhubs-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: azure-eventhubs-sink-binding
spec:
  source:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: azure-eventhubs-sink
    properties:
      eventhubName: "The Eventhubs Name"
      namespaceName: "The Eventhubs Namespace"
      sharedAccessKey: "The Share Access Key"
      sharedAccessName: "The Share Access Name"
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `azure-eventhubs-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f azure-eventhubs-sink-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind kafka.strimzi.io/v1beta1:KafkaTopic:my-topic azure-eventhubs-sink -p "sink.eventhubName=The Eventhubs Name" -p "sink.namespaceName=The Eventhubs Namespace" -p "sink.sharedAccessKey=The Share Access Key" -p "sink.sharedAccessName=The Share Access Name"
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
