Skip to content

Commit 0c5042d

Browse files
authored
Release v2.13.0 (#736)
1 parent 8767725 commit 0c5042d

File tree

115 files changed

+9294
-1591
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+9294
-1591
lines changed

CHANGELOG.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,56 @@
11
# Changelog
22

3+
### Latest Release (2.3.0 - August 17, 2020)
4+
5+
* [Milestone#52](https://github.com/awslabs/amazon-kinesis-client/milestones/52)
6+
7+
* Behavior of shard synchronization is moving from each worker independently learning about all existing shards to workers only discovering the children of shards that each worker owns. This optimizes memory usage, lease table IOPS usage, and number of calls made to kinesis for streams with high shard counts and/or frequent resharding.
8+
* When bootstrapping an empty lease table, KCL utilizes the `ListShard` API's filtering option (the ShardFilter optional request parameter) to retrieve and create leases only for a snapshot of shards open at the time specified by the `ShardFilter` parameter. The `ShardFilter` parameter enables you to filter out the response of the `ListShards` API, using the `Type` parameter. KCL uses the `Type` filter parameter and the following of its valid values to identify and return a snapshot of open shards that might require new leases.
9+
* Currently, the following shard filters are supported:
10+
* `AT_TRIM_HORIZON` - the response includes all the shards that were open at `TRIM_HORIZON`.
11+
* `AT_LATEST` - the response includes only the currently open shards of the data stream.
12+
* `AT_TIMESTAMP` - the response includes all shards whose start timestamp is less than or equal to the given timestamp and end timestamp is greater than or equal to the given timestamp or still open.
13+
* `ShardFilter` is used when creating leases for an empty lease table to initialize leases for a snapshot of shards specified at `RetrievalConfig#initialPositionInStreamExtended`.
14+
* For more information about ShardFilter, see the [official AWS documentation on ShardFilter](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ShardFilter.html).
15+
16+
* Introducing support for the `ChildShards` response of the `GetRecords` and the `SubscribeToShard` APIs to perform lease/shard synchronization that happens at `SHARD_END` for closed shards, allowing a KCL worker to only create leases for the child shards of the shard it finished processing.
17+
* For shared throughout consumer applications, this uses the `ChildShards` response of the `GetRecords` API. For dedicated throughput (enhanced fan-out) consumer applications, this uses the `ChildShards` response of the `SubscribeToShard` API.
18+
* For more information, see the official AWS Documentation on [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html), [SubscribeToShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SubscribeToShard.html), and [ChildShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ChildShard.html).
19+
20+
* KCL now also performs additional periodic shard/lease scans in order to identify any potential holes in the lease table to ensure the complete hash range of the stream is being processed and create leases for them if required. `PeriodicShardSyncManager` is the new component that is responsible for running periodic lease/shard scans.
21+
* New configuration options are available to configure `PeriodicShardSyncManager` in `LeaseManagementConfig`
22+
23+
| Name | Default | Description |
24+
| ----------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25+
| leasesRecoveryAuditorExecutionFrequencyMillis | 120000 (2 minutes) | Frequency (in millis) of the auditor job to scan for partial leases in the lease table. If the auditor detects any hole in the leases for a stream, then it would trigger shard sync based on leasesRecoveryAuditorInconsistencyConfidenceThreshold. |
26+
| leasesRecoveryAuditorInconsistencyConfidenceThreshold | 3 | Confidence threshold for the periodic auditor job to determine if leases for a stream in the lease table is inconsistent. If the auditor finds same set of inconsistencies consecutively for a stream for this many times, then it would trigger a shard sync |
27+
28+
* New CloudWatch metrics are also now emitted to monitor the health of `PeriodicShardSyncManager`:
29+
30+
| Name | Description |
31+
| --------------------------- | ------------------------------------------------------ |
32+
| NumStreamsWithPartialLeases | Number of streams that had holes in their hash ranges. |
33+
| NumStreamsToSync | Number of streams which underwent a full shard sync. |
34+
35+
* Introducing deferred lease cleanup. Leases will be deleted asynchronously by `LeaseCleanupManager` upon reaching `SHARD_END`, when a shard has either expired past the stream’s retention period or been closed as the result of a resharding operation.
36+
* New configuration options are available to configure `LeaseCleanupManager`.
37+
38+
| Name | Default | Description |
39+
| ----------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- |
40+
| leaseCleanupIntervalMillis | 1 minute | Interval at which to run lease cleanup thread. |
41+
| completedLeaseCleanupIntervalMillis | 5 minutes | Interval at which to check if a lease is completed or not. |
42+
| garbageLeaseCleanupIntervalMillis | 30 minutes | Interval at which to check if a lease is garbage (i.e trimmed past the stream's retention period) or not. |
43+
44+
* Introducing _experimental_ support for multistreaming, allowing a single KCL application to multiplex processing multiple streams.
45+
* New configuration options are available to enable multistreaming in `RetrievalConfig#appStreamTracker`.
46+
47+
* Fixing a bug in `PrefetchRecordsPublisher` restarting while it was already running.
48+
* Including an optimization to `HierarchicalShardSyncer` to only create leases for one layer of shards.
49+
* Adding support to prepare and commit lease checkpoints with arbitrary bytes.
50+
* This allows checkpointing of an arbitrary byte buffer up to the maximum permitted DynamoDB item size ([currently 400 KB as of release](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html)), and can be used for recovery by passing a serialized byte buffer to `RecordProcessorCheckpointer#prepareCheckpoint` and `RecordProcessorCheckpointer#checkpoint`.
51+
* Upgrading version of AWS SDK to 2.14.0.
52+
* [#725](https://github.com/awslabs/amazon-kinesis-client/pull/725) Allowing KCL to consider lease tables in `UPDATING` healthy.
53+
354
### Release 2.2.11 (May 28, 2020)
455
[Milestone#51](https://github.com/awslabs/amazon-kinesis-client/milestone/51)
556
* Adjusting HTTP2 initial window size to 512 KB

README.md

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ The recommended way to use the KCL for Java is to consume it from Maven.
4747
<dependency>
4848
<groupId>software.amazon.kinesis</groupId>
4949
<artifactId>amazon-kinesis-client</artifactId>
50-
<version>2.2.11</version>
50+
<version>2.3.0</version>
5151
</dependency>
5252
```
5353

@@ -63,14 +63,56 @@ The recommended way to use the KCL for Java is to consume it from Maven.
6363

6464
## Release Notes
6565

66-
### Release 2.2.11 (May 28, 2020)
67-
[Milestone#51](https://github.com/awslabs/amazon-kinesis-client/milestone/51)
68-
* Adjusting HTTP2 initial window size to 512 KB
69-
* [PR#706](https://github.com/awslabs/amazon-kinesis-client/pull/706)
70-
* Updating protobuf-java to version 3.11.4
71-
* [PR#718](https://github.com/awslabs/amazon-kinesis-client/pull/718)
72-
* Updating the AWS Java SDK to version 2.13.25
73-
* [PR#722](https://github.com/awslabs/amazon-kinesis-client/pull/722)
66+
### Latest Release (2.3.0 - August 17, 2020)
67+
68+
* [Milestone#52](https://github.com/awslabs/amazon-kinesis-client/milestones/52)
69+
70+
* Behavior of shard synchronization is moving from each worker independently learning about all existing shards to workers only discovering the children of shards that each worker owns. This optimizes memory usage, lease table IOPS usage, and number of calls made to kinesis for streams with high shard counts and/or frequent resharding.
71+
* When bootstrapping an empty lease table, KCL utilizes the `ListShard` API's filtering option (the ShardFilter optional request parameter) to retrieve and create leases only for a snapshot of shards open at the time specified by the `ShardFilter` parameter. The `ShardFilter` parameter enables you to filter out the response of the `ListShards` API, using the `Type` parameter. KCL uses the `Type` filter parameter and the following of its valid values to identify and return a snapshot of open shards that might require new leases.
72+
* Currently, the following shard filters are supported:
73+
* `AT_TRIM_HORIZON` - the response includes all the shards that were open at `TRIM_HORIZON`.
74+
* `AT_LATEST` - the response includes only the currently open shards of the data stream.
75+
* `AT_TIMESTAMP` - the response includes all shards whose start timestamp is less than or equal to the given timestamp and end timestamp is greater than or equal to the given timestamp or still open.
76+
* `ShardFilter` is used when creating leases for an empty lease table to initialize leases for a snapshot of shards specified at `RetrievalConfig#initialPositionInStreamExtended`.
77+
* For more information about ShardFilter, see the [official AWS documentation on ShardFilter](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ShardFilter.html).
78+
79+
* Introducing support for the `ChildShards` response of the `GetRecords` and the `SubscribeToShard` APIs to perform lease/shard synchronization that happens at `SHARD_END` for closed shards, allowing a KCL worker to only create leases for the child shards of the shard it finished processing.
80+
* For shared throughout consumer applications, this uses the `ChildShards` response of the `GetRecords` API. For dedicated throughput (enhanced fan-out) consumer applications, this uses the `ChildShards` response of the `SubscribeToShard` API.
81+
* For more information, see the official AWS Documentation on [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html), [SubscribeToShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SubscribeToShard.html), and [ChildShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ChildShard.html).
82+
83+
* KCL now also performs additional periodic shard/lease scans in order to identify any potential holes in the lease table to ensure the complete hash range of the stream is being processed and create leases for them if required. `PeriodicShardSyncManager` is the new component that is responsible for running periodic lease/shard scans.
84+
* New configuration options are available to configure `PeriodicShardSyncManager` in `LeaseManagementConfig`
85+
86+
| Name | Default | Description |
87+
| ----------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
88+
| leasesRecoveryAuditorExecutionFrequencyMillis | 120000 (2 minutes) | Frequency (in millis) of the auditor job to scan for partial leases in the lease table. If the auditor detects any hole in the leases for a stream, then it would trigger shard sync based on leasesRecoveryAuditorInconsistencyConfidenceThreshold. |
89+
| leasesRecoveryAuditorInconsistencyConfidenceThreshold | 3 | Confidence threshold for the periodic auditor job to determine if leases for a stream in the lease table is inconsistent. If the auditor finds same set of inconsistencies consecutively for a stream for this many times, then it would trigger a shard sync |
90+
91+
* New CloudWatch metrics are also now emitted to monitor the health of `PeriodicShardSyncManager`:
92+
93+
| Name | Description |
94+
| --------------------------- | ------------------------------------------------------ |
95+
| NumStreamsWithPartialLeases | Number of streams that had holes in their hash ranges. |
96+
| NumStreamsToSync | Number of streams which underwent a full shard sync. |
97+
98+
* Introducing deferred lease cleanup. Leases will be deleted asynchronously by `LeaseCleanupManager` upon reaching `SHARD_END`, when a shard has either expired past the stream’s retention period or been closed as the result of a resharding operation.
99+
* New configuration options are available to configure `LeaseCleanupManager`.
100+
101+
| Name | Default | Description |
102+
| ----------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- |
103+
| leaseCleanupIntervalMillis | 1 minute | Interval at which to run lease cleanup thread. |
104+
| completedLeaseCleanupIntervalMillis | 5 minutes | Interval at which to check if a lease is completed or not. |
105+
| garbageLeaseCleanupIntervalMillis | 30 minutes | Interval at which to check if a lease is garbage (i.e trimmed past the stream's retention period) or not. |
106+
107+
* Introducing _experimental_ support for multistreaming, allowing a single KCL application to multiplex processing multiple streams.
108+
* New configuration options are available to enable multistreaming in `RetrievalConfig#appStreamTracker`.
109+
110+
* Fixing a bug in `PrefetchRecordsPublisher` restarting while it was already running.
111+
* Including an optimization to `HierarchicalShardSyncer` to only create leases for one layer of shards.
112+
* Adding support to prepare and commit lease checkpoints with arbitrary bytes.
113+
* This allows checkpointing of an arbitrary byte buffer up to the maximum permitted DynamoDB item size ([currently 400 KB as of release](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html)), and can be used for recovery by passing a serialized byte buffer to `RecordProcessorCheckpointer#prepareCheckpoint` and `RecordProcessorCheckpointer#checkpoint`.
114+
* Upgrading version of AWS SDK to 2.14.0.
115+
* [#725](https://github.com/awslabs/amazon-kinesis-client/pull/725) Allowing KCL to consider lease tables in `UPDATING` healthy.
74116

75117
### For remaining release notes check **[CHANGELOG.md][changelog-md]**.
76118

amazon-kinesis-client-multilang/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<parent>
2222
<artifactId>amazon-kinesis-client-pom</artifactId>
2323
<groupId>software.amazon.kinesis</groupId>
24-
<version>2.2.12-SNAPSHOT</version>
24+
<version>2.3.0</version>
2525
</parent>
2626
<modelVersion>4.0.0</modelVersion>
2727

amazon-kinesis-client-multilang/src/test/java/software/amazon/kinesis/multilang/StreamingShardRecordProcessorTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,27 +112,47 @@ public PreparedCheckpointer prepareCheckpoint()
112112
throw new UnsupportedOperationException();
113113
}
114114

115+
@Override
116+
public PreparedCheckpointer prepareCheckpoint(byte[] applicationState) throws KinesisClientLibDependencyException, InvalidStateException, ThrottlingException, ShutdownException {
117+
throw new UnsupportedOperationException();
118+
}
119+
115120
@Override
116121
public PreparedCheckpointer prepareCheckpoint(Record record)
117122
throws KinesisClientLibDependencyException,
118123
InvalidStateException, ThrottlingException, ShutdownException {
119124
throw new UnsupportedOperationException();
120125
}
121126

127+
@Override
128+
public PreparedCheckpointer prepareCheckpoint(Record record, byte[] applicationState) throws KinesisClientLibDependencyException, InvalidStateException, ThrottlingException, ShutdownException {
129+
throw new UnsupportedOperationException();
130+
}
131+
122132
@Override
123133
public PreparedCheckpointer prepareCheckpoint(String sequenceNumber)
124134
throws KinesisClientLibDependencyException,
125135
InvalidStateException, ThrottlingException, ShutdownException, IllegalArgumentException {
126136
throw new UnsupportedOperationException();
127137
}
128138

139+
@Override
140+
public PreparedCheckpointer prepareCheckpoint(String sequenceNumber, byte[] applicationState) throws KinesisClientLibDependencyException, InvalidStateException, ThrottlingException, ShutdownException, IllegalArgumentException {
141+
return null;
142+
}
143+
129144
@Override
130145
public PreparedCheckpointer prepareCheckpoint(String sequenceNumber, long subSequenceNumber)
131146
throws KinesisClientLibDependencyException,
132147
InvalidStateException, ThrottlingException, ShutdownException, IllegalArgumentException {
133148
throw new UnsupportedOperationException();
134149
}
135150

151+
@Override
152+
public PreparedCheckpointer prepareCheckpoint(String sequenceNumber, long subSequenceNumber, byte[] applicationState) throws KinesisClientLibDependencyException, InvalidStateException, ThrottlingException, ShutdownException, IllegalArgumentException {
153+
throw new UnsupportedOperationException();
154+
}
155+
136156
@Override
137157
public Checkpointer checkpointer() {
138158
throw new UnsupportedOperationException();

amazon-kinesis-client-multilang/src/test/java/software/amazon/kinesis/multilang/config/MultiLangDaemonConfigurationTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,14 @@ public void testInvalidRetrievalMode() throws Exception {
171171
utilsBean.setProperty(configuration, "retrievalMode", "invalid");
172172
}
173173

174+
// @Test
175+
// TODO : Enable this test once https://github.com/awslabs/amazon-kinesis-client/issues/692 is resolved
176+
public void testmetricsEnabledDimensions() {
177+
MultiLangDaemonConfiguration configuration = baseConfiguration();
178+
configuration.setMetricsEnabledDimensions(new String[]{"Operation"});
179+
configuration.resolvedConfiguration(shardRecordProcessorFactory);
180+
}
181+
174182
@Test
175183
public void testFanoutConfigSetConsumerName() {
176184
String consumerArn = "test-consumer";

amazon-kinesis-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<parent>
2323
<groupId>software.amazon.kinesis</groupId>
2424
<artifactId>amazon-kinesis-client-pom</artifactId>
25-
<version>2.2.12-SNAPSHOT</version>
25+
<version>2.3.0</version>
2626
</parent>
2727

2828
<artifactId>amazon-kinesis-client</artifactId>

0 commit comments

Comments
 (0)