Chapter 27. AWS Kinesis Component Available as of Camel version 2.17 The Kinesis component supports receiving messages from and sending messages to Amazon Kinesis service. Prerequisites You must have a valid Amazon Web Services developer account, and be signed up to use Amazon Kinesis. More information are available at AWS Kinesis 27.1. URI Format aws-kinesis://stream-name[?options] The stream needs to be created prior to it being used. You can append query options to the URI in the following format, ?options=value&option2=value&... 27.2. URI Options The AWS Kinesis component supports 5 options, which are listed below. Name Description Default Type configuration (advanced) The AWS S3 default configuration KinesisConfiguration accessKey (common) Amazon AWS Access Key String secretKey (common) Amazon AWS Secret Key String region (common) Amazon AWS Region String resolveProperty Placeholders (advanced) Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. true boolean The AWS Kinesis endpoint is configured using URI syntax: with the following path and query parameters: 27.2.1. Path Parameters (1 parameters): Name Description Default Type streamName Required Name of the stream String 27.2.2. Query Parameters (30 parameters): Name Description Default Type amazonKinesisClient (common) Amazon Kinesis client to use for all requests for this endpoint AmazonKinesis proxyHost (common) To define a proxy host when instantiating the DDBStreams client String proxyPort (common) To define a proxy port when instantiating the DDBStreams client Integer region (common) The region in which Kinesis client needs to work String bridgeErrorHandler (consumer) 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 boolean iteratorType (consumer) Defines where in the Kinesis stream to start getting records TRIM_HORIZON ShardIteratorType maxResultsPerRequest (consumer) Maximum number of records that will be fetched in each poll 1 int sendEmptyMessageWhenIdle (consumer) If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. false boolean sequenceNumber (consumer) The sequence number to start polling from. Required if iteratorType is set to AFTER_SEQUENCE_NUMBER or AT_SEQUENCE_NUMBER String shardClosed (consumer) Define what will be the behavior in case of shard closed. Possible value are ignore, silent and fail.In case of ignore a message will be logged and the consumer will restart from the beginning,in case of silent there will be no logging and the consumer will start from the beginning,in case of fail a ReachedClosedStateException will be raised ignore KinesisShardClosed StrategyEnum shardId (consumer) Defines which shardId in the Kinesis stream to get records from String exceptionHandler (consumer) 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. ExceptionHandler exchangePattern (consumer) Sets the exchange pattern when the consumer creates an exchange. ExchangePattern pollStrategy (consumer) 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. PollingConsumerPoll Strategy synchronous (advanced) Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). false boolean backoffErrorThreshold (scheduler) The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. int backoffIdleThreshold (scheduler) The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. int backoffMultiplier (scheduler) 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 actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. int delay (scheduler) Milliseconds before the poll. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). 500 long greedy (scheduler) If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the run polled 1 or more messages. false boolean initialDelay (scheduler) Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). 1000 long runLoggingLevel (scheduler) The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. TRACE LoggingLevel scheduledExecutorService (scheduler) Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. ScheduledExecutor Service scheduler (scheduler) To use a cron scheduler from either camel-spring or camel-quartz2 component none ScheduledPollConsumer Scheduler schedulerProperties (scheduler) To configure additional properties when using a custom scheduler or any of the Quartz2, Spring based scheduler. Map startScheduler (scheduler) Whether the scheduler should be auto started. true boolean timeUnit (scheduler) Time unit for initialDelay and delay options. MILLISECONDS TimeUnit useFixedDelay (scheduler) Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. true boolean accessKey (security) Amazon AWS Access Key String secretKey (security) Amazon AWS Secret Key String 27.3. Spring Boot Auto-Configuration The component supports 17 options, which are listed below. Name Description Default Type camel.component.aws-kinesis.access-key Amazon AWS Access Key String camel.component.aws-kinesis.configuration.access-key Amazon AWS Access Key String camel.component.aws-kinesis.configuration.amazon-kinesis-client Amazon Kinesis client to use for all requests for this endpoint AmazonKinesis camel.component.aws-kinesis.configuration.iterator-type Defines where in the Kinesis stream to start getting records ShardIteratorType camel.component.aws-kinesis.configuration.max-results-per-request Maximum number of records that will be fetched in each poll 1 Integer camel.component.aws-kinesis.configuration.proxy-host To define a proxy host when instantiating the DDBStreams client String camel.component.aws-kinesis.configuration.proxy-port To define a proxy port when instantiating the DDBStreams client Integer camel.component.aws-kinesis.configuration.region The region in which Kinesis client needs to work String camel.component.aws-kinesis.configuration.secret-key Amazon AWS Secret Key String camel.component.aws-kinesis.configuration.sequence-number The sequence number to start polling from. Required if iteratorType is set to AFTER_SEQUENCE_NUMBER or AT_SEQUENCE_NUMBER String camel.component.aws-kinesis.configuration.shard-closed Define what will be the behavior in case of shard closed. Possible value are ignore, silent and fail.In case of ignore a message will be logged and the consumer will restart from the beginning,in case of silent there will be no logging and the consumer will start from the beginning,in case of fail a ReachedClosedStateException will be raised KinesisShardClosed StrategyEnum camel.component.aws-kinesis.configuration.shard-id Defines which shardId in the Kinesis stream to get records from String camel.component.aws-kinesis.configuration.stream-name Name of the stream String camel.component.aws-kinesis.enabled Enable aws-kinesis component true Boolean camel.component.aws-kinesis.region Amazon AWS Region String camel.component.aws-kinesis.resolve-property-placeholders Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. true Boolean camel.component.aws-kinesis.secret-key Amazon AWS Secret Key String Required Kinesis component options You have to provide the amazonKinesisClient in the Registry with proxies and relevant credentials configured. 27.4. Batch Consumer This component implements the Batch Consumer. This allows you for instance to know how many messages exists in this batch and for instance let the Aggregator aggregate this number of messages. 27.5. Usage 27.5.1. Message headers set by the Kinesis consumer Header Type Description CamelAwsKinesisSequenceNumber String The sequence number of the record. This is represented as a String as it size is not defined by the API. If it is to be used as a numerical type then use CamelAwsKinesisApproximateArrivalTimestamp String The time AWS assigned as the arrival time of the record. CamelAwsKinesisPartitionKey String Identifies which shard in the stream the data record is assigned to. 27.5.2. AmazonKinesis configuration You will need to create an instance of AmazonKinesisClient and bind it to the registry ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setProxyHost("http://myProxyHost"); clientConfiguration.setProxyPort(8080); Region region = Region.getRegion(Regions.fromName(region)); region.createClient(AmazonKinesisClient.class, null, clientConfiguration); // the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain registry.bind("kinesisClient", client); You then have to reference the AmazonKinesisClient in the amazonKinesisClient URI option. from("aws-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient") .to("log:out?showAll=true"); 27.5.3. Providing AWS Credentials It is recommended that the credentials are obtained by using the DefaultAWSCredentialsProviderChain that is the default when creating a new ClientConfiguration instance, however, a different AWSCredentialsProvider can be specified when calling createClient(... ). 27.5.4. Message headers used by the Kinesis producer to write to Kinesis. The producer expects that the message body is a byte[] . Header Type Description CamelAwsKinesisPartitionKey String The PartitionKey to pass to Kinesis to store this record. CamelAwsKinesisSequenceNumber String Optional paramter to indicate the sequence number of this record. 27.5.5. Message headers set by the Kinesis producer on successful storage of a Record Header Type Description CamelAwsKinesisSequenceNumber String The sequence number of the record, as defined in Response Syntax CamelAwsKinesisShardId String The shard ID of where the Record was stored 27.6. Dependencies Maven users will need to add the following dependency to their pom.xml. pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws</artifactId> <version>USD{camel-version}</version> </dependency> where USD{camel-version } must be replaced by the actual version of Camel (2.17 or higher). 27.7. See Also Configuring Camel Component Endpoint Getting Started AWS Component

Commands:
aws-kinesis://stream-name[?options]
aws-kinesis:streamName
ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setProxyHost("http://myProxyHost"); clientConfiguration.setProxyPort(8080); Region region = Region.getRegion(Regions.fromName(region)); region.createClient(AmazonKinesisClient.class, null, clientConfiguration); // the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain registry.bind("kinesisClient", client);
from("aws-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient") .to("log:out?showAll=true");
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws</artifactId> <version>USD{camel-version}</version> </dependency>