// kafka-connector options: START
[[camel-ahc-kafka-connector-sink]]
= camel-ahc-kafka-connector sink configuration

When using camel-ahc-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-ahc-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----


The camel-ahc sink connector supports 25 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
| *camel.sink.path.httpUri* | The URI to use such as \http://hostname:port/path | null | HIGH
| *camel.sink.endpoint.bridgeEndpoint* | If the option is true, then the Exchange.HTTP_URI header is ignored, and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back. | false | MEDIUM
| *camel.sink.endpoint.bufferSize* | The initial in-memory buffer size used when transferring data between Camel and AHC Client. | 4096 | MEDIUM
| *camel.sink.endpoint.connectionClose* | Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default | false | MEDIUM
| *camel.sink.endpoint.cookieHandler* | Configure a cookie handler to maintain a HTTP session | null | MEDIUM
| *camel.sink.endpoint.headerFilterStrategy* | To use a custom HeaderFilterStrategy to filter header to and from Camel message. | null | MEDIUM
| *camel.sink.endpoint.lazyStartProducer* | 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 | MEDIUM
| *camel.sink.endpoint.throwExceptionOnFailure* | Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code. | true | MEDIUM
| *camel.sink.endpoint.transferException* | If enabled and an Exchange failed processing on the consumer side, and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is, instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk. | false | MEDIUM
| *camel.sink.endpoint.basicPropertyBinding* | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | MEDIUM
| *camel.sink.endpoint.binding* | To use a custom AhcBinding which allows to control how to bind between AHC and Camel. | null | MEDIUM
| *camel.sink.endpoint.clientConfig* | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance. | null | MEDIUM
| *camel.sink.endpoint.clientConfigOptions* | To configure the AsyncHttpClientConfig using the key/values from the Map. | null | MEDIUM
| *camel.sink.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | MEDIUM
| *camel.sink.endpoint.clientConfigRealmOptions* | To configure the AsyncHttpClientConfig Realm using the key/values from the Map. | null | MEDIUM
| *camel.sink.endpoint.sslContextParameters* | Reference to a org.apache.camel.support.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level. | null | MEDIUM
| *camel.component.ahc.lazyStartProducer* | 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 | MEDIUM
| *camel.component.ahc.allowJavaSerializedObject* | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk. | false | MEDIUM
| *camel.component.ahc.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | MEDIUM
| *camel.component.ahc.binding* | To use a custom AhcBinding which allows to control how to bind between AHC and Camel. | null | MEDIUM
| *camel.component.ahc.client* | To use a custom AsyncHttpClient | null | MEDIUM
| *camel.component.ahc.clientConfig* | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance. | null | MEDIUM
| *camel.component.ahc.headerFilterStrategy* | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. | null | MEDIUM
| *camel.component.ahc.sslContextParameters* | Reference to a org.apache.camel.support.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level. | null | MEDIUM
| *camel.component.ahc.useGlobalSslContextParameters* | Enable usage of global SSL context parameters. | false | MEDIUM
|===
// kafka-connector options: END
