// kafka-connector options: START
[[camel-aws2-s3-kafka-connector-source]]
= camel-aws2-s3-kafka-connector source configuration

Connector description: Store and retrieve objects from AWS S3 Storage Service using AWS SDK version 2.x.

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

To use this Source connector in Kafka connect you'll need to set the following connector.class

[source,java]
----
connector.class=org.apache.camel.kafkaconnector.aws2s3.CamelAws2s3SourceConnector
----


The camel-aws2-s3 source connector supports 87 options, which are listed below.



[width="100%",cols="2,5,^1,1,1",options="header"]
|===
| Name | Description | Default | Required | Priority
| *camel.source.path.bucketNameOrArn* | Bucket name or ARN | null | true | HIGH
| *camel.source.endpoint.amazonS3Client* | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. | null | false | MEDIUM
| *camel.source.endpoint.amazonS3Presigner* | An S3 Presigner for Request, used mainly in createDownloadLink operation | null | false | MEDIUM
| *camel.source.endpoint.autoCreateBucket* | Setting the autocreation of the S3 bucket bucketName. This will apply also in case of moveAfterRead option enabled and it will create the destinationBucket if it doesn't exist already. | false | false | MEDIUM
| *camel.source.endpoint.overrideEndpoint* | Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride option | false | false | MEDIUM
| *camel.source.endpoint.pojoRequest* | If we want to use a POJO request as body or not | false | false | MEDIUM
| *camel.source.endpoint.policy* | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. | null | false | MEDIUM
| *camel.source.endpoint.proxyHost* | To define a proxy host when instantiating the SQS client | null | false | MEDIUM
| *camel.source.endpoint.proxyPort* | Specify a proxy port to be used inside the client definition. | null | false | MEDIUM
| *camel.source.endpoint.proxyProtocol* | To define a proxy protocol when instantiating the S3 client One of: [HTTP] [HTTPS] | "HTTPS" | false | MEDIUM
| *camel.source.endpoint.region* | The region in which S3 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() | null | false | MEDIUM
| *camel.source.endpoint.trustAllCertificates* | If we want to trust all certificates in case of overriding the endpoint | false | false | MEDIUM
| *camel.source.endpoint.uriEndpointOverride* | Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option | null | false | MEDIUM
| *camel.source.endpoint.useDefaultCredentials Provider* | Set whether the S3 client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | false | MEDIUM
| *camel.source.endpoint.customerAlgorithm* | Define the customer algorithm to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.source.endpoint.customerKeyId* | Define the id of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.source.endpoint.customerKeyMD5* | Define the MD5 of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.source.endpoint.bridgeErrorHandler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | false | MEDIUM
| *camel.source.endpoint.deleteAfterRead* | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY header. | true | false | MEDIUM
| *camel.source.endpoint.delimiter* | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. | null | false | MEDIUM
| *camel.source.endpoint.destinationBucket* | Define the destination bucket where an object must be moved when moveAfterRead is set to true. | null | false | MEDIUM
| *camel.source.endpoint.destinationBucketPrefix* | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. | null | false | MEDIUM
| *camel.source.endpoint.destinationBucketSuffix* | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. | null | false | MEDIUM
| *camel.source.endpoint.doneFileName* | If provided, Camel will only consume files if a done file exists. | null | false | MEDIUM
| *camel.source.endpoint.fileName* | To get the object from the bucket with the given file name | null | false | MEDIUM
| *camel.source.endpoint.ignoreBody* | If it is true, the S3 Object Body will be ignored completely, if it is set to false the S3 Object will be put in the body. Setting this to true, will override any behavior defined by includeBody option. | false | false | MEDIUM
| *camel.source.endpoint.includeBody* | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed, while in case of includeBody false then it will be up to the caller to close the S3Object stream. However setting autocloseBody to true when includeBody is false it will schedule to close the S3Object stream automatically on exchange completion. | true | false | MEDIUM
| *camel.source.endpoint.includeFolders* | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | false | MEDIUM
| *camel.source.endpoint.maxConnections* | Set the maxConnections parameter in the S3 client configuration | 60 | false | MEDIUM
| *camel.source.endpoint.maxMessagesPerPoll* | Gets the maximum number of messages as a limit to poll at each polling. Gets the maximum number of messages as a limit to poll at each polling. The default value is 10. Use 0 or a negative number to set it as unlimited. | 10 | false | MEDIUM
| *camel.source.endpoint.moveAfterRead* | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | false | MEDIUM
| *camel.source.endpoint.prefix* | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. | null | false | MEDIUM
| *camel.source.endpoint.sendEmptyMessageWhenIdle* | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | false | MEDIUM
| *camel.source.endpoint.autocloseBody* | If this option is true and includeBody is false, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to false and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | false | MEDIUM
| *camel.source.endpoint.exceptionHandler* | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. | null | false | MEDIUM
| *camel.source.endpoint.exchangePattern* | Sets the exchange pattern when the consumer creates an exchange. One of: [InOnly] [InOut] [InOptionalOut] | null | false | MEDIUM
| *camel.source.endpoint.pollStrategy* | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. | null | false | MEDIUM
| *camel.source.endpoint.backoffErrorThreshold* | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. | null | false | MEDIUM
| *camel.source.endpoint.backoffIdleThreshold* | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. | null | false | MEDIUM
| *camel.source.endpoint.backoffMultiplier* | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. | null | false | MEDIUM
| *camel.source.endpoint.delay* | Milliseconds before the next poll. | 500L | false | MEDIUM
| *camel.source.endpoint.greedy* | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | false | MEDIUM
| *camel.source.endpoint.initialDelay* | Milliseconds before the first poll starts. | 1000L | false | MEDIUM
| *camel.source.endpoint.repeatCount* | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0L | false | MEDIUM
| *camel.source.endpoint.runLoggingLevel* | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. One of: [TRACE] [DEBUG] [INFO] [WARN] [ERROR] [OFF] | "TRACE" | false | MEDIUM
| *camel.source.endpoint.scheduledExecutorService* | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. | null | false | MEDIUM
| *camel.source.endpoint.scheduler* | To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler | "none" | false | MEDIUM
| *camel.source.endpoint.schedulerProperties* | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. | null | false | MEDIUM
| *camel.source.endpoint.startScheduler* | Whether the scheduler should be auto started. | true | false | MEDIUM
| *camel.source.endpoint.timeUnit* | Time unit for initialDelay and delay options. One of: [NANOSECONDS] [MICROSECONDS] [MILLISECONDS] [SECONDS] [MINUTES] [HOURS] [DAYS] | "MILLISECONDS" | false | MEDIUM
| *camel.source.endpoint.useFixedDelay* | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | false | MEDIUM
| *camel.source.endpoint.accessKey* | Amazon AWS Access Key | null | false | MEDIUM
| *camel.source.endpoint.secretKey* | Amazon AWS Secret Key | null | false | MEDIUM
| *camel.component.aws2-s3.amazonS3Client* | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. | null | false | MEDIUM
| *camel.component.aws2-s3.amazonS3Presigner* | An S3 Presigner for Request, used mainly in createDownloadLink operation | null | false | MEDIUM
| *camel.component.aws2-s3.autoCreateBucket* | Setting the autocreation of the S3 bucket bucketName. This will apply also in case of moveAfterRead option enabled and it will create the destinationBucket if it doesn't exist already. | false | false | MEDIUM
| *camel.component.aws2-s3.configuration* | The component configuration | null | false | MEDIUM
| *camel.component.aws2-s3.overrideEndpoint* | Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride option | false | false | MEDIUM
| *camel.component.aws2-s3.pojoRequest* | If we want to use a POJO request as body or not | false | false | MEDIUM
| *camel.component.aws2-s3.policy* | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. | null | false | MEDIUM
| *camel.component.aws2-s3.proxyHost* | To define a proxy host when instantiating the SQS client | null | false | MEDIUM
| *camel.component.aws2-s3.proxyPort* | Specify a proxy port to be used inside the client definition. | null | false | MEDIUM
| *camel.component.aws2-s3.proxyProtocol* | To define a proxy protocol when instantiating the S3 client One of: [HTTP] [HTTPS] | "HTTPS" | false | MEDIUM
| *camel.component.aws2-s3.region* | The region in which S3 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() | null | false | MEDIUM
| *camel.component.aws2-s3.trustAllCertificates* | If we want to trust all certificates in case of overriding the endpoint | false | false | MEDIUM
| *camel.component.aws2-s3.uriEndpointOverride* | Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option | null | false | MEDIUM
| *camel.component.aws2-s3.useDefaultCredentials Provider* | Set whether the S3 client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | false | MEDIUM
| *camel.component.aws2-s3.customerAlgorithm* | Define the customer algorithm to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.customerKeyId* | Define the id of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.customerKeyMD5* | Define the MD5 of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.bridgeErrorHandler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | false | MEDIUM
| *camel.component.aws2-s3.deleteAfterRead* | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY header. | true | false | MEDIUM
| *camel.component.aws2-s3.delimiter* | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. | null | false | MEDIUM
| *camel.component.aws2-s3.destinationBucket* | Define the destination bucket where an object must be moved when moveAfterRead is set to true. | null | false | MEDIUM
| *camel.component.aws2-s3.destinationBucketPrefix* | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. | null | false | MEDIUM
| *camel.component.aws2-s3.destinationBucketSuffix* | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. | null | false | MEDIUM
| *camel.component.aws2-s3.doneFileName* | If provided, Camel will only consume files if a done file exists. | null | false | MEDIUM
| *camel.component.aws2-s3.fileName* | To get the object from the bucket with the given file name | null | false | MEDIUM
| *camel.component.aws2-s3.ignoreBody* | If it is true, the S3 Object Body will be ignored completely, if it is set to false the S3 Object will be put in the body. Setting this to true, will override any behavior defined by includeBody option. | false | false | MEDIUM
| *camel.component.aws2-s3.includeBody* | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed, while in case of includeBody false then it will be up to the caller to close the S3Object stream. However setting autocloseBody to true when includeBody is false it will schedule to close the S3Object stream automatically on exchange completion. | true | false | MEDIUM
| *camel.component.aws2-s3.includeFolders* | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | false | MEDIUM
| *camel.component.aws2-s3.moveAfterRead* | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | false | MEDIUM
| *camel.component.aws2-s3.prefix* | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. | null | false | MEDIUM
| *camel.component.aws2-s3.autocloseBody* | If this option is true and includeBody is false, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to false and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | false | MEDIUM
| *camel.component.aws2-s3.autowiredEnabled* | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | false | MEDIUM
| *camel.component.aws2-s3.accessKey* | Amazon AWS Access Key | null | false | MEDIUM
| *camel.component.aws2-s3.secretKey* | Amazon AWS Secret Key | null | false | MEDIUM
|===



The camel-aws2-s3 source connector supports 1 converters out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.converters.S3ObjectConverter

----



The camel-aws2-s3 source connector supports 3 transforms out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.transformers.S3ObjectTransforms

org.apache.camel.kafkaconnector.aws2s3.transformers.JSONToRecordTransforms

org.apache.camel.kafkaconnector.aws2s3.transformers.RecordToJSONTransforms

----



The camel-aws2-s3 source connector supports 1 aggregation strategies out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.aggregation.NewlineAggregationStrategy

----
// kafka-connector options: END
