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

When using camel-mina-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-mina-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----


The camel-mina sink connector supports 30 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
| *camel.sink.path.protocol* | Protocol to use | null | ConfigDef.Importance.HIGH
| *camel.sink.path.host* | Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For producer use the hostname or ip address of the remote server. | null | ConfigDef.Importance.HIGH
| *camel.sink.path.port* | Port number | null | ConfigDef.Importance.HIGH
| *camel.sink.endpoint.disconnect* | Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.minaLogger* | You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.sync* | Setting to set endpoint as one-way or request-response. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.timeout* | You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds. | 30000L | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.writeTimeout* | Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds. | 10000L | ConfigDef.Importance.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 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.cachedAddress* | Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.lazySessionCreation* | Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started. | true | ConfigDef.Importance.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 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.maximumPoolSize* | Number of worker threads in the worker pool for TCP and UDP | 16 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.orderedThreadPoolExecutor* | Whether to use ordered thread pool, to ensure events are processed orderly on the same channel. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.transferExchange* | Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.allowDefaultCodec* | The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.codec* | To use a custom minda codec implementation. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.decoderMaxLineLength* | To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024. | 1024 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.encoderMaxLineLength* | To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE. | -1 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.encoding* | You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.filters* | You can set a list of Mina IoFilters to use. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.textline* | Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.textlineDelimiter* | Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text. One of: [DEFAULT] [AUTO] [UNIX] [WINDOWS] [MAC] | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.autoStartTls* | Whether to auto start SSL handshake. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.sslContextParameters* | To configure SSL security. | null | ConfigDef.Importance.MEDIUM
| *camel.component.mina.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 | ConfigDef.Importance.MEDIUM
| *camel.component.mina.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.component.mina.configuration* | To use the shared mina configuration. | null | ConfigDef.Importance.MEDIUM
| *camel.component.mina.useGlobalSslContextParameters* | Enable usage of global SSL context parameters. | false | ConfigDef.Importance.MEDIUM
|===
// kafka-connector options: END
