GithubHelp home page GithubHelp logo

amazon-kinesis-client's Introduction

Amazon Kinesis Client Library for Java

Build Status

The Amazon Kinesis Client Library for Java (Amazon KCL) enables Java developers to easily consume and process data from Amazon Kinesis.

Recommended Upgrade for All Users of the 1.x Amazon Kinesis Client

⚠️ We recommend customers to migrate to 1.14.1 or newer to avoid known bugs in 1.14.0 version

Recommended Upgrade for All Users of the 2.x Amazon Kinesis Client

⚠️ It's highly recommended for users of version 2.0 of the Amazon Kinesis Client to upgrade to version 2.0.3 or later. A bug has been identified in versions prior to 2.0.3 that could cause records to be delivered to the wrong record processor.

ℹ️ Amazon Kinesis Client versions 1.x are not impacted.

Please open an issue if you have any questions.

Features

  • Provides an easy-to-use programming model for processing data using Amazon Kinesis
  • Helps with scale-out and fault-tolerant processing

Getting Started

  1. Sign up for AWS — Before you begin, you need an AWS account. For more information about creating an AWS account and retrieving your AWS credentials, see AWS Account and Credentials in the AWS SDK for Java Developer Guide.
  2. Sign up for Amazon Kinesis — Go to the Amazon Kinesis console to sign up for the service and create an Amazon Kinesis stream. For more information, see Create an Amazon Kinesis Stream in the Amazon Kinesis Developer Guide.
  3. Minimum requirements — To use the Amazon Kinesis Client Library, you'll need Java 1.8+. For more information about Amazon Kinesis Client Library requirements, see Before You Begin in the Amazon Kinesis Developer Guide.
  4. Using the Amazon Kinesis Client Library — The best way to get familiar with the Amazon Kinesis Client Library is to read Developing Record Consumer Applications in the Amazon Kinesis Developer Guide.

Building from Source

After you've downloaded the code from GitHub, you can build it using Maven. To disable GPG signing in the build, use this command: mvn clean install -Dgpg.skip=true. Note: This command does not run integration tests.

To disable running unit tests in the build, add the property -Dskip.ut=true.

Running Integration Tests

Note that running integration tests creates AWS resources. Integration tests require valid AWS credentials. This will look for a default AWS profile specified in your local .aws/credentials. To run all integration tests: mvn verify -DskipITs=false. To run one integration tests, specify the integration test class: mvn -Dit.test="BasicStreamConsumerIntegrationTest" -DskipITs=false verify Optionally, you can provide the name of an IAM user/role to run tests with as a string using this command: mvn -DskipITs=false -DawsProfile="<PROFILE_NAME>" verify.

Integration with the Kinesis Producer Library

For producer-side developers using the Kinesis Producer Library (KPL), the KCL integrates without additional effort. When the KCL retrieves an aggregated Amazon Kinesis record consisting of multiple KPL user records, it will automatically invoke the KPL to extract the individual user records before returning them to the user.

Amazon KCL support for other languages

To make it easier for developers to write record processors in other languages, we have implemented a Java based daemon, called MultiLangDaemon that does all the heavy lifting. Our approach has the daemon spawn a sub-process, which in turn runs the record processor, which can be written in any language. The MultiLangDaemon process and the record processor sub-process communicate with each other over STDIN and STDOUT using a defined protocol. There will be a one to one correspondence amongst record processors, child processes, and shards. For Python developers specifically, we have abstracted these implementation details away and expose an interface that enables you to focus on writing record processing logic in Python. This approach enables KCL to be language agnostic, while providing identical features and similar parallel processing model across all languages.

Using the KCL

The recommended way to use the KCL for Java is to consume it from Maven.

Version 2.x

<dependency>
    <groupId>software.amazon.kinesis</groupId>
    <artifactId>amazon-kinesis-client</artifactId>
    <version>2.6.0</version>
</dependency>

Version 1.x

Version 1.x tracking branch

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>amazon-kinesis-client</artifactId>
    <version>1.14.1</version>
</dependency>

Release Notes

KCL Version Changelog
2.x master/CHANGELOG.md
1.x v1.x/CHANGELOG.md

amazon-kinesis-client's People

Contributors

ashwing avatar avinashchowdary avatar blacktooth avatar brendan-p-lynch avatar chenylee-aws avatar cory-bradshaw avatar dependabot[bot] avatar etspaceman avatar furq-aws avatar girida-amazon avatar jiaxul avatar joshua-kim avatar kcl-release-automation-bot avatar kevioke avatar lucienlu-aws avatar micah-jaffe avatar mmankika-aws avatar nakulj avatar noahbt avatar pelaezryan avatar pfifer avatar qaqj avatar rtyley avatar sahilpalvia avatar shanmsac avatar stair-aws avatar vincentvilo-aws avatar yatins47 avatar ychunxue avatar zengyu714 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

amazon-kinesis-client's Issues

Expose MillisBehindLatest from GetRecords() call

The Kinesis API recently started returning MillisBehindLatest in the response to GetRecords().

http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html

MillisBehindLatest
The number of milliseconds the GetRecords response is from the tip of the stream, indicating how far behind current time the consumer is. A value of zero indicates record processing is caught up, and there are no new records to process at this moment.

Type: Long

Valid range: Minimum value of 0.

The current KCL only exposes the records to the IRecordProcessor. It would be useful to expose the MillisBehindLatest to the IRecordProcessors as well, so they would know how far behind they are.

Multi-lang daemon not respecting executableName flags/args

If you set the executableName in the properties file to something with flags or args like so:

executableName = ./consumer --debug

things at first appear to be fine:

INFO: Running foo to process stream bar with executable ./consumer --debug

but later in the logs:

INFO: MultiLangDaemon is adding the following fields to the User Agent: amazon-kinesis-client-library-java-1.6.1 amazon-kinesis-multi-lang-daemon/1.0.1 Golang ./consumer

the code is dropping everything after the first space here.

I wasn't able to pin down where exactly it spawns the process, but in my testing it does seem to run without regard for any flags or args you supply.

Disable CloudWatch

Is there a way to disable CloudWatch so that no metrics are emitted ?

LeaseManager inexplicably lost its lease

We recently encountered a situation where one of our Kinesis client lost its lease.
In the logs, we can see the following line:

c.a.s.k.leases.impl.LeaseRenewer - Worker 3e5f2abe8ff209b8:445a3dac:144e5e3ae02:-8000 lost lease with key shardId-000000000000

Looking at the code, this seems to only be possible if the LeaseManager returns false on renewLease() which can only happen if dynamoDBClient.updateItem() throws a ConditionalCheckFailedException.

In LeaseManager.java

    try {
        dynamoDBClient.updateItem(request);
    } catch (ConditionalCheckFailedException e) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("Lease renewal failed for lease with key " + lease.getLeaseKey()
                    + " because the lease counter was not " + lease.getLeaseCounter());
        }

        return false;
    } catch (AmazonClientException e) {
        throw convertAndRethrowExceptions("renew", lease.getLeaseKey(), e);
    }

In CloudWatch, under the UserErrors graph, we can see that at the same time as we lease was lost, we got a User Error.

As far as I can see, the only check that is done is to ensure that the lease's counter has the expected value. Why would that value be different?

We have a single consumer running. Nobody else is using its DynamoDB table.
What could explain that the conditional check failed?

We're slowly running out of ideas 😄 Any help is appreciated.

Error building javadocs

$ mvn javadoc:javadoc
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Amazon Kinesis Client Library for Java 1.2.1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-javadoc-plugin:2.10.2:javadoc (default-cli) > generate-sources @ amazon-kinesis-client >>>
[INFO] 
[INFO] <<< maven-javadoc-plugin:2.10.2:javadoc (default-cli) < generate-sources @ amazon-kinesis-client <<<
[INFO] 
[INFO] --- maven-javadoc-plugin:2.10.2:javadoc (default-cli) @ amazon-kinesis-client ---
[WARNING] Source files encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] 
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.config...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.exceptions.internal...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.exceptions...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.interfaces...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.lib.checkpoint...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.lib.worker...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.proxies...
Loading source files for package com.amazonaws.services.kinesis.clientlibrary.types...
Loading source files for package com.amazonaws.services.kinesis.leases.exceptions...
Loading source files for package com.amazonaws.services.kinesis.leases.impl...
Loading source files for package com.amazonaws.services.kinesis.leases.interfaces...
Loading source files for package com.amazonaws.services.kinesis.leases.util...
Loading source files for package com.amazonaws.services.kinesis.metrics.impl...
Loading source files for package com.amazonaws.services.kinesis.metrics.interfaces...
Loading source files for package com.amazonaws.services.kinesis.multilang...
Loading source files for package com.amazonaws.services.kinesis.multilang.messages...
Constructing Javadoc information...
Standard Doclet version 1.8.0_31
Building tree for all the packages and classes...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/KinesisClientLibConfigurator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/BlockedOnParentShardException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/KinesisClientLibIOException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/InvalidStateException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/KinesisClientLibDependencyException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/KinesisClientLibException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/KinesisClientLibNonRetryableException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/KinesisClientLibRetryableException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/ShutdownException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/ThrottlingException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/ICheckpoint.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/IRecordProcessor.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/IRecordProcessorCheckpointer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/IRecordProcessorFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/SentinelCheckpoint.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/InitialPositionInStream.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/KinesisClientLibConfiguration.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/Worker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/IKinesisProxy.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/IKinesisProxyFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/KinesisProxy.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/KinesisProxyFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/MetricsCollectingKinesisProxyDecorator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/ShutdownReason.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/DependencyException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/InvalidStateException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/LeasingException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/ProvisionedThroughputException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/KinesisClientLease.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/KinesisClientLeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/KinesisClientLeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/Lease.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/LeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/LeaseRenewer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/LeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/LeaseTaker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/IKinesisClientLeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/ILeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/ILeaseRenewer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/ILeaseTaker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/DynamoUtils.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/AccumulateByNameMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/AccumulatingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/CWMetricKey.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/CWMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/CWMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/CWPublisherRunnable.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/DefaultCWMetricsPublisher.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/DimensionTrackingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/EndingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/ICWMetricsPublisher.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/InterceptingMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/LogMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/LogMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/MetricAccumulatingQueue.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/MetricDatumWithKey.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/MetricsHelper.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/NullMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/NullMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/IMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/IMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/MultiLangDaemon.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/MultiLangDaemonConfig.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/MultiLangRecordProcessor.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/MultiLangRecordProcessorFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/CheckpointMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/InitializeMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/JsonFriendlyRecord.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/Message.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/ProcessRecordsMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/ShutdownMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/StatusMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/overview-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/package-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/package-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/package-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/constant-values.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/serialized-form.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/class-use/KinesisClientLibConfigurator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/class-use/KinesisClientLibIOException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/class-use/BlockedOnParentShardException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/ThrottlingException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/ShutdownException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/KinesisClientLibRetryableException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/KinesisClientLibNonRetryableException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/KinesisClientLibException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/KinesisClientLibDependencyException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/class-use/InvalidStateException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/class-use/IRecordProcessorFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/class-use/IRecordProcessorCheckpointer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/class-use/IRecordProcessor.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/class-use/ICheckpoint.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/class-use/SentinelCheckpoint.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/class-use/Worker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/class-use/KinesisClientLibConfiguration.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/class-use/InitialPositionInStream.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/class-use/MetricsCollectingKinesisProxyDecorator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/class-use/KinesisProxyFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/class-use/KinesisProxy.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/class-use/IKinesisProxyFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/class-use/IKinesisProxy.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/class-use/ShutdownReason.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/class-use/ProvisionedThroughputException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/class-use/LeasingException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/class-use/InvalidStateException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/class-use/DependencyException.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/LeaseTaker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/LeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/LeaseRenewer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/LeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/LeaseCoordinator.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/Lease.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/KinesisClientLeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/KinesisClientLeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/class-use/KinesisClientLease.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/class-use/ILeaseTaker.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/class-use/ILeaseSerializer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/class-use/ILeaseRenewer.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/class-use/ILeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/class-use/IKinesisClientLeaseManager.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/class-use/DynamoUtils.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/NullMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/NullMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/MetricsHelper.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/MetricDatumWithKey.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/MetricAccumulatingQueue.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/LogMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/LogMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/InterceptingMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/ICWMetricsPublisher.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/EndingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/DimensionTrackingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/DefaultCWMetricsPublisher.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/CWPublisherRunnable.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/CWMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/CWMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/CWMetricKey.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/AccumulatingMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/class-use/AccumulateByNameMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/class-use/IMetricsScope.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/class-use/IMetricsFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/class-use/MultiLangRecordProcessorFactory.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/class-use/MultiLangRecordProcessor.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/class-use/MultiLangDaemonConfig.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/class-use/MultiLangDaemon.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/StatusMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/ShutdownMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/ProcessRecordsMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/Message.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/JsonFriendlyRecord.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/InitializeMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/class-use/CheckpointMessage.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/config/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/exceptions/internal/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/interfaces/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/checkpoint/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/lib/worker/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/proxies/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/clientlibrary/types/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/exceptions/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/impl/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/interfaces/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/leases/util/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/impl/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/metrics/interfaces/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/package-use.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/com/amazonaws/services/kinesis/multilang/messages/package-use.html...
Building index for all the packages and classes...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/overview-tree.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/index-all.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/deprecated-list.html...
Building index for all classes...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/allclasses-frame.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/allclasses-noframe.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/index.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/overview-summary.html...
Generating /Users/thavi/dev/amazon-kinesis-client/target/site/apidocs/help-doc.html...
10 errors
21 warnings
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.964 s
[INFO] Finished at: 2015-03-24T09:23:43-04:00
[INFO] Final Memory: 16M/220M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.2:javadoc (default-cli) on project amazon-kinesis-client: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/clientlibrary/interfaces/IRecordProcessor.java:39: error: bad use of '>'
[ERROR] * Upon fail over, the new instance will get records with sequence number > checkpoint position
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/clientlibrary/interfaces/IRecordProcessorCheckpointer.java:32: error: bad use of '>'
[ERROR] * will receive data records whose sequenceNumber > checkpoint position (for each partition key).
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/Lease.java:79: warning: no description for @param
[ERROR] * @param other
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/Lease.java:81: warning: no @param for <T>
[ERROR] public <T extends Lease> void update(T other) {
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/Lease.java:240: warning: no @param for <T>
[ERROR] public <T extends Lease> T copy() {
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseManager.java:34: warning: no description for @param
[ERROR] * @param readCapacity
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseManager.java:35: warning: no description for @param
[ERROR] * @param writeCapacity
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseManager.java:180: warning: no @param for lease
[ERROR] public boolean updateLease(T lease)
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:51: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:59: warning: no description for @param
[ERROR] * @param leaseKey
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:65: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:71: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:82: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:88: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:89: warning: no description for @param
[ERROR] * @param newOwner
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:95: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/interfaces/ILeaseSerializer.java:101: warning: no description for @param
[ERROR] * @param lease
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java:162: warning: no description for @throws
[ERROR] * @throws InvalidStateException
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java:163: warning: no description for @throws
[ERROR] * @throws DependencyException
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java:185: warning: no description for @throws
[ERROR] * @throws InvalidStateException
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java:186: warning: no description for @throws
[ERROR] * @throws DependencyException
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/metrics/impl/CWPublisherRunnable.java:160: warning: no @return
[ERROR] protected long getTime() {
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/metrics/impl/CWPublisherRunnable.java:27: warning: no description for @param
[ERROR] * @param <KeyType>
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/metrics/impl/MetricDatumWithKey.java:32: error: unknown tag: SampleMetricKey
[ERROR] *        MetricDatumWithKey<SampleMetricKey> sampleDatumWithKey = new MetricDatumWithKey<SampleMetricKey>(new
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/metrics/impl/MetricDatumWithKey.java:32: error: unknown tag: SampleMetricKey
[ERROR] *        MetricDatumWithKey<SampleMetricKey> sampleDatumWithKey = new MetricDatumWithKey<SampleMetricKey>(new
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/multilang/package-info.java:33: error: semicolon missing
[ERROR] *                    "sequenceNumber" : "&lt;sequence number&gt";
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/multilang/package-info.java:51: error: semicolon missing
[ERROR] *   "checkpoint" : "&lt;sequenceNumberToCheckpoint&gt";
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/multilang/package-info.java:55: error: semicolon missing
[ERROR] *   "responseFor" : "&lt;nameOfAction&gt";
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/CheckpointValueComparator.java:28: error: bad use of '>'
[ERROR] * SHARD_END -> infinity
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/CheckpointValueComparator.java:29: error: bad use of '>'
[ERROR] * TRIM_HORIZON and LATEST -> less than sequence numbers
[ERROR] ^
[ERROR] /Users/thavi/dev/amazon-kinesis-client/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/CheckpointValueComparator.java:30: error: bad use of '>'
[ERROR] * sequence numbers -> BigInteger value of string
[ERROR] ^
[ERROR] 
[ERROR] Command line was: /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/../bin/javadoc @options @packages
[ERROR] 
[ERROR] Refer to the generated Javadoc files in '/Users/thavi/dev/amazon-kinesis-client/target/site/apidocs' dir.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Getting "java.lang.NoSuchFieldError: INSTANCE" after updating to latest AWS SDK

I can't run the multilang daemon anymore, I keep getting the following error when I execute the following. This was working fine with the older version of the SDK.

python /home/kinesis/kcl/cmd_helper.py --print_command --java /usr/bin/java --properties app.properties --classpath /home/kinesis/aws-java-sdk-1.10.12/lib/aws-java-sdk-1.10.12.jar

INFO: Initializing LeaseCoordinator
Aug 25, 2015 11:16:22 AM com.amazonaws.services.kinesis.multilang.MultiLangDaemon call
SEVERE: Caught throwable while processing data.
java.lang.NoSuchFieldError: INSTANCE
    at com.amazonaws.http.conn.SdkConnectionKeepAliveStrategy.getKeepAliveDuration(SdkConnectionKeepAliveStrategy.java:48)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:533)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:728)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1776)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.createTable(AmazonDynamoDBClient.java:822)
    at com.amazonaws.services.kinesis.leases.impl.LeaseManager.createLeaseTableIfNotExists(LeaseManager.java:117)
    at com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibLeaseCoordinator.initialize(KinesisClientLibLeaseCoordinator.java:172)
    at com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.initialize(Worker.java:380)
    at com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.run(Worker.java:324)
    at com.amazonaws.services.kinesis.multilang.MultiLangDaemon.call(MultiLangDaemon.java:104)
    at com.amazonaws.services.kinesis.multilang.MultiLangDaemon.call(MultiLangDaemon.java:57)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)```

MultiLangDaemon Throws NullPointerException Going From One Shard To Two When Multiple Daemons Are Running

If there's a stream with one shard that is split into two shards and two daemons are run starting from the trim horizon of the shards, the daemon that does processing of the parent shard dies with NullPointerException when it reaches the end of the shard. The second daemon will take over the processing of child shards but one of the daemons has exited. Happens with 1.2.0 as well as 1.4.0.

Jun 29, 2015 11:41:47 AM com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor stopProcessing
SEVERE: Encountered an error while trying to shutdown child process
java.lang.NullPointerException
        at com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor.shutdown(MultiLangRecordProcessor.java:154)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.V1ToV2RecordProcessorAdapter.shutdown(V1ToV2RecordProcessorAdapter.java:48)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownTask.call(ShutdownTask.java:94)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:48)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:23)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

Jun 29, 2015 11:41:47 AM com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor stopProcessing
SEVERE: Encountered error while trying to shutdown
java.lang.NullPointerException
        at com.amazonaws.services.kinesis.multilang.MessageWriter.close(MessageWriter.java:163)
        at com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor.childProcessShutdownSequence(MultiLangRecordProcessor.java:186)
        at com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor.stopProcessing(MultiLangRecordProcessor.java:249)
        at com.amazonaws.services.kinesis.multilang.MultiLangRecordProcessor.shutdown(MultiLangRecordProcessor.java:164)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.V1ToV2RecordProcessorAdapter.shutdown(V1ToV2RecordProcessorAdapter.java:48)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownTask.call(ShutdownTask.java:94)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:48)
        at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:23)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

MultiLang Daemon StdLogger call

Add new call to Multilang KCL

  • { "action" : "stdlogger",
  • "message" : "my log message";
  • }

that will just pass the output to stdlog

Shutdown all record processors in an orderly fashion when we shutdown the JVM

We often use JVM shutdown hook to make sure the processing pipeline is flushed in an orderly server shutdown.

For a record processor, what needs to be done in such case is pretty much the same as handling the "TERMINATE" command, i.e., finish the processing and checkpoint. For the current KCL design, however, to implement the JVM shutdown hook needs to manually keep track of all record processors and issue "TERMINATE" ourselves.

Ideally the Worker class's shutdown() method should take care of this, so we only need to call worker.shutdown(), but right now, it doesn't do that, and what it does seems to be no more than excluding itself from lease coordination.

KCL does not work safely in a scaling group

The KCL does not seem designed to work safely in a scaling group. I have evidence that new workers create new readers for the same shard as existing workers before waiting for those readers to be shut down. This causes multiple simultaneous processing of the same events in separate EC2 instances. If there are shared resources between the EC2 instances, consistency checks are violated.

Scaling should be done with cooperation of all existing healthy workers such that load is balanced across all EC2 instances without duplication, not blindly.

Better proxy support out of the box

The main issue is that the library doesn't use system proxy environment variables by default. On most linux systems, the environment variables http_proxy, https_proxy, and no_proxy are assumed to describe the correct proxies to use for http and https connections. This library does not use these values even if they are present.

Passing -Dhttp.proxyHost and -Dhttp.proxyPort to java do not seem to make a difference.

consumer getting wrong records from other stream

Hi,

I have two streams, one for dev, one for test. The streams are under same account and same region. When i start a Kinesis Consumer and specify connecting to dev stream with KinesisClientLibConfiguration, my consumer strangely receives records from my test stream as well. Pseudocode below:

val config = new KinesisClientLibConfiguration(
"consumerDev", "dev-stream", credentialsProvider, workerId)
config.withRegionName("us-west-1")
config.withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON)

new KinesisConsumer(config).run()

Do i miss something? Thanks in advance.

Cheng

Missing stream leads to NullPointerException

If the KCL is configured with a stream name that does not exist in the AWS account, once the retry logic gives up, I would expect a helpful exception from the com.amazonaws.services.kinesis.clientlibrary.exceptions package to be thrown. Instead, I get:

java.lang.NullPointerException
    at com.amazonaws.services.kinesis.leases.impl.LeaseCoordinator.stop(LeaseCoordinator.java:230)
    at com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.run(Worker.java:366)

Depend on explicit AWS SDK component projects

This project should depend on the necessary AWS SDK service-specific projects only.

The full SDK adds significant unneeded bulk to a deployment archive and increases the chance of dependency conflict in an application.

ProvisionedThroughputExceededException in kinesis client library

Sometimes I see these errors in the logs.
They don't happen a lot, but they do happen.
I suppose they mean that the kinesis client reads data too fast.
I was under the impression that the client lib is supposed to take care of reading the data in the right pace, am I wrong?

Please advise....

ERROR [2014-09-12 13:52:33,150] com.amazonaws.services.kinesis.clientlibrary.lib.worker.ProcessTask: ShardId shardId-000000000002: Caught exception:
! com.amazonaws.services.kinesis.model.ProvisionedThroughputExceededException: Rate exceeded for stream gateway-filtered under account 671587110562. (Service: AmazonKinesis; Status Code: 400; Error Code: ProvisionedThroughputExceededException; Request ID: 0b75a25f-3a84-11e4-a1f8-cf42abe98da9)
! at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:820) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:439) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.AmazonKinesisClient.invoke(AmazonKinesisClient.java:2128) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.AmazonKinesisClient.getRecords(AmazonKinesisClient.java:590) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.proxies.KinesisProxy.get(KinesisProxy.java:135) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.proxies.MetricsCollectingKinesisProxyDecorator.get(MetricsCollectingKinesisProxyDecorator.java:72) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisDataFetcher.getRecords(KinesisDataFetcher.java:69) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ProcessTask.getRecords(ProcessTask.java:186) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ProcessTask.call(ProcessTask.java:96) ~[gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:48) [gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:23) [gateway-packager-8601271.jar:1.0-BETA-SNAPSHOT]
! at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_65]
! at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]
! at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]
! at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]

Best way to deal with "hot" workers?

Background: we have a KCL app running in an autoscaling group that is currently spread across 5x c3.large instances. Our Kinesis stream is 32 shards, but our actual average volume in records is around 7-10k per second. There's a reason why we have such a silly amount of over-provisioned shards. But it's not very interesting and probably not relevant to the issue at hand.

So anyway, in the same way that DynamoDB and Kinesis best practices are modelled around producers / writers avoiding "hot" partitions at all costs, we've now discovered that KCL needs something similar. The problem is KCL seems to naively assign leases to workers by simply ensuring all active workers have an "even" number of shards. The problem with this is that shards are not all equal :)

Let's work off a contrived example. Let's say we have a 10 shard Kinesis stream being processed by 2 KCL Worker instances (on separate machines). Once everything is running it'll kinda look like this:

Worker 1: { Shard 1, 2, 3, 4, 5}
Worker 2: { Shard 6, 7, 8, 9, 10}

This looks "balanced", right? Sure. But now imagine that for whatever reason, shards 1, 2, 3, 4, 5 are receiving about 1000 incoming records a second, but the other 5 shards are only getting 10 a second. This now means the actual number of incoming records flowing into the workers kinda looks like this:

Worker 1: 5000 incoming records per second
Worker 2: 50 incoming records per second

As a result, you can end up with 1 worker doing 100x more work than the other worker. Like I mentioned earlier, we have our KCL worker app in an autoscaling group that automatically scales up based on average CPU usage across all running instances. The problem is in a larger instance of the described issue, you'll end up with 1-2 instances doing 2-3x more work than the others, and as a result are pegging their CPU. But, this isn't enough to set the average CPU over the edge to bring more instances up.

It seems like KCL should be able to balance work across instances not just using a naive "number of leases" approach, but perhaps weight these leases by the actual amount of work they're receiving? Maybe if the workers were reporting the average volume of records they're receiving per minute for the last 15 minutes into the lease table, that could be used to redistribute as necessary?

Worker gives up acquiring lease after 20 attempts.

We ran into an issue today in which our Kinesis consumers failed to start after 20 attempts of acquiring a lease from DynamoDB which was related to an AWS outage. I took a look at the code and traced the issue to the following lines inside the Worker class.


LOG.error("Unable to initialize after " + MAX_INITIALIZATION_ATTEMPTS + " attempts. Shutting down.", e1);

for (int i = 0; (!isDone) && (i < MAX_INITIALIZATION_ATTEMPTS); i++) {

Is there any reason this constant is hardcoded to 20 attempts? It would be nice to configure it via constructor or setter injection. Even a global system property would be better than nothing.

NullMetricsScope warning message in the log

We are seeing this warning in our KCL application log:
No metrics scope set in thread Session worker pool-1, getMetricsScope returning NullMetricsScope.
16 Sep 2015 09:59:03.479 -0700 Session worker pool-1 amazonaws.MetricsHelper WARN No metrics scope set in thread Session worker pool-1, getMetricsScope returning NullMetricsScope.

This seems to due to the fact KCL is assuming single-threaded processing. Kinesis Record Processor sets a metrics scope in thread local storage, but because we are doing checkpointing in a different thread, the checkpointer can not find a metrics scope from its own thread local, so it complains.

Odd Shard Allocations

When running multiple workers (4) and after splitting shards (for a total of 8), I have one worker receiving no data. It simply sleeps. The shards IDs allocated to it are below the currently active ones. The other workers process as normal, with two of them having 3 allocations and the other having 2.

Is there a way to rebalance the workers so that each gets the greatest possible number of active shards? I would expect each worker to get 2 active shards allocated to them if 4 are present.

Error: refusing to update lease with key shardId-xxxxx because concurrency tokens don't match

I started seeing this "INFO" error in my logs.

INFO  [2014-10-26 00:00:35,221] com.totango.gateway.filter.FilterKinesisRecordProcessor: Checkpointing shard shardId-000000000019
INFO  [2014-10-26 00:00:35,222] com.amazonaws.services.kinesis.leases.impl.LeaseRenewer: Worker gateway-filter-prod01.totango.com:9f8c24b6-bdc9-4df6-a17a-e6779f4964d2 refusing to update lease with key shardId-000000000019 because concurrency tokens don't match
INFO  [2014-10-26 00:00:35,222] com.totango.gateway.filter.FilterKinesisRecordProcessor: Caught shutdown exception, skipping checkpoint.
! com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException: Can't update checkpoint - instance doesn't hold the lease for this shard
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibLeaseCoordinator.setCheckpoint(KinesisClientLibLeaseCoordinator.java:119) ~[gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.advancePosition(RecordProcessorCheckpointer.java:161) ~[gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.checkpoint(RecordProcessorCheckpointer.java:76) ~[gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.totango.gateway.AbstrcactKinesisSdrProcessor.checkpoint(AbstrcactKinesisSdrProcessor.java:174) [gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.totango.gateway.AbstrcactKinesisSdrProcessor.processRecords(AbstrcactKinesisSdrProcessor.java:84) [gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ProcessTask.call(ProcessTask.java:125) [gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:48) [gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:23) [gateway-filter-aa11e02.jar:1.0-BETA-SNAPSHOT]
! at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_65]
! at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]
! at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]
! at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]

A few questions regarding that...

  1. What might be the cause of this and what does that mean?
  2. It seems that restarting the process stopped those errors from coming, but it also causes it to re-process all the messages again (or maybe just some of the messages, hard to tell). I realize kinesis promises "at least once" semantics, but hey, reprocessing all messages from the past 24h isn't cool... (if that's indeed what's going on, sorry...)
  3. Is this really an INFO? Looks like an actual error...

Docs for MultiLang don’t describe error handling

It’s not clear to me how my child process should handle errors. If an error is encountered while processing a batch of records, what should the child process do? Exit with an error exit code? Or… what? And how will the MultiLangDaemon (MLD) handle such a case?

I’m hoping that there’s some way to gracefully handle errors and prompt the MLD to retry a batch, but it’s not clear. I’ve been reading the source but my Java is rusty and I’d appreciate some help.

Thanks!

Support for Android

Is it possible to run this Java client on Android 23? I cannot use the AWS Android SDK due to too many dependencies. I only need the kinesis stream, without any cognito identity, I'm doing anonymous login.

Custom checkpointing logic

We have a data processing engine that reads data from Kinesis, it has two separate jobs: continuous aggregation based on pre-defined rules and sending raw data to our database engine in micro-batches.

Currently, we use KCL to read data from Kinesis but the checkpointing is tricky since we have two jobs that are independent from each other. Continuous aggregation should be done in real-time while we can tolerate some delay for queries that we execute on our database engine.

Also, if we checkpoint after this two jobs are done, it's possible that a node may fail when it's done only one of the jobs which may cause some inconsistency of the data.

We may have independent consumers for each job but it would come with an overhead. Since KCL uses dynamodb for checkpointing, I wonder if it's possible to use a custom checkpointing logic for this use case.

After shard splitting, our log is flooded with warning messages "Cannot find the shard given shardId"

ShardSyncTask is to run either on worker initialization or when the worker detects one of its assigned shards completes. In the event of shard split, if however the child shard falls on a worker that's not previously processing the parent shard, this worker will not run the ShardSyncTask because none of its previously assigned shards have completed.

Meanwhile, the lease coordinator has timer tasks to sync up with the Dynamo table to assign itself shards to process.

So we end up with the worker start processing the child shard while at the same time, keeps logging a warning message from line 208 of KinesisProxy:

LOG.warn("Cannot find the shard given the shardId " + shardId);

As far as I understand, the shard info is needed only for de-aggregation to discard user records that are supposed to be re-routed to other shards during resharding. So we are not experiencing dropped records or sth severe, it's just the flooding of our log, and maybe some duplicates as we are using KPL aggregation on the producer side.

Initial checkpoint TRIM_HORIZON forces exception "Could not checkpoint at extended sequence number"

Immediately after the KCL creates a new Lease Coordination table I have the following state:

leaseKey checkpoint checkpointSubSequenceNumber
shardId-000000000000 TRIM_HORIZON 0

InitializeTask has the following code:

recordProcessorCheckpointer.setLargestPermittedCheckpointValue(initialCheckpoint);
recordProcessorCheckpointer.setInitialCheckpointValue(initialCheckpoint);

Which guarantees that an exception will be thrown in RecordProcessorCheckpointer at the following if-statement when processing the first incoming record:

if ((lastCheckpointValue.compareTo(newCheckpoint) <= 0) &&
newCheckpoint.compareTo(largestPermittedCheckpointValue) <= 0) { 
    ...
} else {
throw new IllegalArgumentException(String.format(
    "Could not checkpoint at extended sequence number %s as it did not fall into acceptable range "
    + "between the last checkpoint %s and the greatest extended sequence number passed to this "
    + "record processor %s",
    newCheckpoint, this.lastCheckpointValue, this.largestPermittedCheckpointValue));
}

Here's the full stack-trace:

! java.lang.IllegalArgumentException: Could not checkpoint at extended sequence number {SequenceNumber: 49553736826478174424587116688541051968144701038643904514,SubsequenceNumber: 0} as it did not fall into acceptable range between the last checkpoint {SequenceNumber: TRIM_HORIZON,SubsequenceNumber: 0} and the greatest extended sequence number passed to this record processor {SequenceNumber: TRIM_HORIZON,SubsequenceNumber: 0}
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.checkpoint(RecordProcessorCheckpointer.java:139) ~[amazon-kinesis-client-1.6.0.jar:na]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.checkpoint(RecordProcessorCheckpointer.java:103) ~[amazon-kinesis-client-1.6.0.jar:na]
! at com.amazonaws.services.kinesis.connectors.KinesisConnectorRecordProcessor.emit(KinesisConnectorRecordProcessor.java:178) ~[amazon-kinesis-connectors-1.2.0.jar:na]
! at com.amazonaws.services.kinesis.connectors.KinesisConnectorRecordProcessor.processRecords(KinesisConnectorRecordProcessor.java:136) ~[amazon-kinesis-connectors-1.2.0.jar:na]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.V1ToV2RecordProcessorAdapter.processRecords(V1ToV2RecordProcessorAdapter.java:42) ~[amazon-kinesis-client-1.6.0.jar:na]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.ProcessTask.call(ProcessTask.java:168) ~[amazon-kinesis-client-1.6.0.jar:na]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:49) [amazon-kinesis-client-1.6.0.jar:na]
! at com.amazonaws.services.kinesis.clientlibrary.lib.worker.MetricsCollectingTaskDecorator.call(MetricsCollectingTaskDecorator.java:24) [amazon-kinesis-client-1.6.0.jar:na]
! at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_71]
! at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_71]
! at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_71]
! at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]

Possible New Updates

  1. It would be nice to have a setting to force child shard(s) to be processed by the same app instance that was processing the parent shard(s) after a split/merge.
  2. Would it be possible to have the kinesis client library balance OPEN shards explicitly across app instances (instead of treating closed and open shards the same). Issue is that it is possible for an app instance to get and have to process all the OPEN shards and the other to sit there idle with leases just on closed shards.

Thoughts?

IRecordProcessor.initialize() needs checkpoint sequence number

If restarting from beyond the 24 hour window of the Kinesis stream, the record processor may need to read from some other backing store (S3/DynamoDB/etc) to catch up to the Kinesis stream. To do so, it needs to know when the last checkpoint was. This is clearly available a couple of lines above in InitializeTask.java. Please pass through to record processor so that it can prepare itself to go when processRecords() is first called.

It should be possible for IRecordProcessors to mark themselves for shutdown.

For various reasons, an IRecordProcessor should be able to decide it should be shut down. This could be due to an unrecoverable error, or it could be part of coordinated load balancing.

It should either a) be able to return a code from processRecords() to indicate it should be marked for shutdown, or b) have an object on which it can request a shutdown. Currently, the only object it has a pointer to is the IRecordProcessorCheckpointer. It seems a little strange to put a shutdown() method on that interface.

Subsequent calls to processRecords with 0 records has incorrect largestPermittedCheckpointValue

In the case where some records are processed in one call, but NOT checkpointed, subsequent calls to the processRecords method with 0 records has the largest permitted value of the checkpointer set to the last checkpoint value and NOT the current largest value (which should be the largest permitted value from the last time processRecords was called with at least one record).

It looks like this is done in ProcessTask line 154 where if there are no records, the largest permitted value is set to the last checkpoint value instead of keeping its value from the last run.

If this is the expected/desired behaviour, how does a KCL application issue a checkpoint in subsequent calls to processRecords where there are 0 records (i.e. I get a few records, then after a minute or two decide it is time to do a checkpoint)?

If I store the last read record and use it for the checkpoint call, the RecordProcessorCheckpointer will throw during a checkpoint when 0 records were received because the record is not within the bounds of the last checkpoint and the largest permitted (which is the last checkpoint).

Thanks

Shutdown Not Called on Record Processors when MultiLangDaemon is Terminated

When running the daemon (from command-line for example), upon terminating the process (Ctrl+C or SIGTERM) it exits and doesn't call shutdown() on child processes. It doesn't allow child processes to terminate cleanly by checkpointing their state. Is this intentional or something that's just not been implemented (yet)?

Too much INFO logs where DEBUG should suffice. Fix logging verbosity please!

When running applications, it is very annoying to see unnecessary and necessary logs clumped together.

The following logs are really verbose and could be DEBUG level by default, and not INFO level:

  • DefaultCWMetricsPublisher - every few seconds we get a log Successfully published n datums - These should be debug logs and not info in any way.
  • LogMetricsScope
  • CWPublisherRunnable
  • Worker (do we really need info logs for sleep interruptions?)
  • MultiLangProtocol

Similarly, Error messages could actually be printed as log.error, and not simple info. For example:

  • MessageWriter
  • LeaseRenewer
  • DrainChildSTDOUTTask

LeaseManager requires dynamoDb:CreateTable IAM permissions even if the table already exists.

The lease manager determines if the DynamoDb table already exists by attempting to create it, and ignoring a ResourceInUseException . This is non-optimal in an environment where the creation of resources is restricted, and the table has already been initialized.

It would be more intuitive to use a DescribeTableRequest to determine if the table exists, since it's considered a read-only operation.

CWMetricsFactory.java has a Hard-Coded 200 Max Metrics before Flush

Hi,

After seeing our Cloudwatch bill surge to $100+/day, we found the issue seems to be in the KCL. More specifically, in CWMetricsFactory.java at line 33:

/*
* If the CWPublisherRunnable accumulates more than FLUSH_SIZE distinct metrics, it will call CloudWatch
* immediately instead of waiting for the next scheduled call.
*/
private static final int FLUSH_SIZE = 200;

Some KCL metrics are being put in cloudwatch 50,000 times per minute. Can you please make this configurable so that we can set it much higher?

Thank you

Use HashKeyRange To Distribute Shards Among Consumer Applications

Hello,

The shard distribution to each worker nodes should be calculated in terms of HashKeyRanges.

Explanation below;

At the moment, KCL redistributes shards amongst consumer applications equally. That is,

  • If you have 10 shards, and 1 consumer application with 2 instances, each instance will have 5 shards leased.

This is good, when the shards listen to same hash ranges. Good scenario is shown below;

Name    HashSt  HashEnd Instance
Shard00 00001   03402   worker1
Shard01 03403   06804   worker2
Shard02 06805   10206   worker1
Shard03 10207   13608   worker2
Shard04 13609   17010   worker1
Shard05 17011   20412   worker2
Shard06 20413   23814   worker2
Shard07 23815   27216   worker1
Shard08 27217   30618   worker1
Shard09 30619   34020   worker2

Both workers listen to 5 shards, and equal hash ranges.

But, if we split Shard00 into two (10 and 11), then Shard11 into two again, the distribution may change into something like this;

Name    HashSt  HashEnd Instance
Shard10 00001   01701   worker1
Shard12 01702   02552   worker2
Shard13 02553   03402   worker1
Shard01 03403   06804   worker1
Shard02 06805   10206   worker2
Shard03 10207   13608   worker1
Shard04 13609   17010   worker2
Shard05 17011   20412   worker2
Shard06 20413   23814   worker1
Shard07 23815   27216   worker1
Shard08 27217   30618   worker2
Shard09 30619   34020   worker2

Here, both workers listen to 6 shards each, but their weights are different (in terms of hash ranges). So when producers feed this stream in a randomly balanced partiton keys, the number of data processed in each worker node will be different. That may cause unbalance.

Regards,
Cagri.

I think it's throttling but how do i tell

I am using the SDK with nodejs tp process records out of the kenisis streams. After about 4 or so hours i notice that the consumers are falling behind. I subsequently restart the process and it catches up. Then again, after sometime is slows down.

How can i tell from the logs, whether it is due to throttling or some other issue, maybe within my nodejs process.

Here are some of the more relevant settings

# Max records to fetch from Kinesis in a single GetRecords call.
maxRecords = 10000

# Idle time between record reads in milliseconds.
idleTimeBetweenReadsInMillis = 2000

I has a t look at the cloudwatch metrics, but i can't find a way to check that the consumers are being throttled.

The stream is configured with 3 shards

cheers

Cannot Override DynamoDB Endpoint

We are using the excellent kinesalite (a light local mock of Kinesis for tests) to run automated integration tests. All we have to do is set the endpoint withKinesisEndpoint("localhost:4567")

When performing KCL operations against kinesalite, KCL is writing lease tables to our cloud DynamoDB. We want our integration tests to run without touching our AWS account.

So, I'd love to configure KCL to use a local mock of DynamoDB like dynalite. This would require that KCL allow us to specify an endpoint for DynamoDB.

Possibly this would be analogous to withKinesisEndpoint: withDynamoDbEndpoint("localhost:2345")

non-JVM implementation

Is there a non-JVM alternative to the project? An official one? or a community project?

KCL Library doesn't work with the newest Kinesis SDK

When using the Kinesis SDK version 1.10.1 the KCL library throws the following error:

    java.lang.NoSuchMethodError: com.amazonaws.AmazonWebServiceRequest.copyPrivateRequestParameters()Ljava/util/Map;
       at com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.invoke(AmazonCloudWatchClient.java:969)
       at com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.putMetricData(AmazonCloudWatchClient.java:370)
       at com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher.publishMetrics(DefaultCWMetricsPublisher.java:63)
       at com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable.runOnce(CWPublisherRunnable.java:144)
       at com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable.run(CWPublisherRunnable.java:90)
       at java.lang.Thread.run(Thread.java:745)

No Tags?

Since the repo has no tags, how am I supposed to know which revision represents a given release version, e.g. the current release is 1.21 but which revision is that? Is master always the current prod release or is master unstable? Help?

1.3.0 release on maven

Helllo, just a question, would the artifacts be uploaded to Maven Central? Thank you.

issues building project

here's the command for building the cloned project, and the output

mvn clean install -Dpgpg.skip=true
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.