blob: 45e2d407186770a4687f43b615341ffcbec7159f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>KinesisIO (Apache Beam 2.47.0)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="KinesisIO (Apache Beam 2.47.0)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisClientThrottledException.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html" target="_top">Frames</a></li>
<li><a href="KinesisIO.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.io.aws2.kinesis</div>
<h2 title="Class KinesisIO" class="title">Class KinesisIO</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.io.aws2.kinesis.KinesisIO</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre><a href="../../../../../../../org/apache/beam/sdk/annotations/Experimental.html" title="annotation in org.apache.beam.sdk.annotations">@Experimental</a>(<a href="../../../../../../../org/apache/beam/sdk/annotations/Experimental.html#value--">value</a>=<a href="../../../../../../../org/apache/beam/sdk/annotations/Experimental.Kind.html#SOURCE_SINK">SOURCE_SINK</a>)
public final class <span class="typeNameLabel">KinesisIO</span>
extends java.lang.Object</pre>
<div class="block">IO to read from <a href="https://aws.amazon.com/kinesis/">Kinesis</a> streams.
<h3>Reading from Kinesis</h3>
<p>Example usages:
<pre><code>
p.apply(KinesisIO.read()
.withStreamName("streamName")
.withInitialPositionInStream(InitialPositionInStream.LATEST)
.apply( ... ) // other transformations
</code></pre>
<p>At a minimum you have to provide:
<ul>
<li>the name of the stream to read
<li>the position in the stream where to start reading, e.g. <code>InitialPositionInStream.LATEST</code>, <code>InitialPositionInStream.TRIM_HORIZON</code>, or
alternatively, using an arbitrary point in time with <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html#withInitialTimestampInStream-org.joda.time.Instant-"><code>KinesisIO.Read.withInitialTimestampInStream(Instant)</code></a>.
</ul>
<h4>Watermarks</h4>
<p>Kinesis IO uses arrival time for watermarks by default. To use processing time instead, use
<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html#withProcessingTimeWatermarkPolicy--"><code>KinesisIO.Read.withProcessingTimeWatermarkPolicy()</code></a>:
<pre><code>
p.apply(KinesisIO.read()
.withStreamName("streamName")
.withInitialPositionInStream(InitialPositionInStream.LATEST)
.withProcessingTimeWatermarkPolicy())
</code></pre>
<p>It is also possible to specify a custom watermark policy to control watermark computation
using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html#withCustomWatermarkPolicy-org.apache.beam.sdk.io.aws2.kinesis.WatermarkPolicyFactory-"><code>KinesisIO.Read.withCustomWatermarkPolicy(WatermarkPolicyFactory)</code></a>. This requires implementing
<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/WatermarkPolicy.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>WatermarkPolicy</code></a> with a corresponding <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/WatermarkPolicyFactory.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>WatermarkPolicyFactory</code></a>.
<h4>Throttling</h4>
<p>By default Kinesis IO will poll the Kinesis <code>getRecords()</code> API as fast as possible as
long as records are returned. The <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/RateLimitPolicyFactory.DefaultRateLimiter.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>RateLimitPolicyFactory.DefaultRateLimiter</code></a> will start
throttling once <code>getRecords()</code> returns an empty response or if API calls get throttled by
AWS.
<p>A <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>RateLimitPolicy</code></a> is always applied to each shard individually.
<p>You may provide a custom rate limit policy using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html#withCustomRateLimitPolicy-org.apache.beam.sdk.io.aws2.kinesis.RateLimitPolicyFactory-"><code>KinesisIO.Read.withCustomRateLimitPolicy(RateLimitPolicyFactory)</code></a>. This requires implementing <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>RateLimitPolicy</code></a> with a corresponding <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/RateLimitPolicyFactory.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>RateLimitPolicyFactory</code></a>.
<h3>Writing to Kinesis</h3>
<p>Example usages:
<pre><code> PCollection&lt;KV&lt;String, byte[]&gt;&gt; data = ...;
data.apply(KinesisIO.write()
.withStreamName("streamName")
.withPartitionKey(KV::getKey)
.withSerializer(KV::getValue);
</code></pre>
<p>Note: Usage of <a href="../../../../../../../org/apache/beam/sdk/values/KV.html" title="class in org.apache.beam.sdk.values"><code>KV</code></a> is just for illustration purposes here.
<p>At a minimum you have to provide:
<ul>
<li>the name of the Kinesis stream to write to,
<li>a <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisPartitioner.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisPartitioner</code></a> to distribute records across shards of the stream
<li>and a function to serialize your data to bytes on the stream
</ul>
Though, generally, it's recommended to configure client retries using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/common/ClientConfiguration.html" title="class in org.apache.beam.sdk.io.aws2.common"><code>ClientConfiguration</code></a>, see below.
<h4>Partitioning of writes</h4>
Choosing the right partitioning strategy by means of a <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisPartitioner.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisPartitioner</code></a> is one of the
key considerations when writing to Kinesis. Typically, you should aime to evenly distribute data
across all shards of the stream.
<p>Partition keys are used as input to a hash function that maps the partition key and associated
data to a specific shard. If the cardinality of your partition keys is of the same order of
magnitude as the number of shards in the stream, the hash function will likely not distribute
your keys evenly among shards. This may result in heavily skewed shards with some shards not
utilized at all.
<p>If you require finer control over the distribution of records, override <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisPartitioner.html#getExplicitHashKey-T-"><code>KinesisPartitioner.getExplicitHashKey(Object)</code></a> according to your needs. However, this might
impact record aggregation.
<h4>Aggregation of records</h4>
To better leverage Kinesis API limits and to improve producer throughput, the writer aggregates
multiple users records into an <a
href="https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-concepts.html#kinesis-kpl-concepts-aggretation">aggregated
KPL record</a>.
<p>Records of the same effective hash key get aggregated. The effective hash key is:
<ol>
<li>the explicit hash key, if provided.
<li>the lower bound of the hash key range of the target shard according to the given partition
key, if available.
<li>or otherwise the hashed partition key
</ol>
<p>To provide shard aware aggregation in 2., hash key ranges of shards are loaded and refreshed
periodically. This allows to aggregate records into a number of aggregates that matches the
number of shards in the stream to max out Kinesis API limits the best possible way.
<p><b>Note:</b>There's an important downside to consider when using shard aware aggregation:
records get assigned to a shard (via an explicit hash key) on the client side, but respective
client side state can't be guaranteed to always be up-to-date. If a shard gets split, all
aggregates are mapped to the lower child shard until state is refreshed. Timing, however, will
diverge between the different workers.
<p>If using an <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisPartitioner.ExplicitPartitioner.html" title="interface in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisPartitioner.ExplicitPartitioner</code></a> or disabling shard refresh via <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.RecordAggregation.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisIO.RecordAggregation</code></a>, no shard details will be loaded (and used).
<p>Record aggregation can be entirely disabled using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html#withRecordAggregationDisabled--"><code>KinesisIO.Write.withRecordAggregationDisabled()</code></a>.
<h3>Configuration of AWS clients</h3>
<p>AWS clients for all AWS IOs can be configured using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/options/AwsOptions.html" title="interface in org.apache.beam.sdk.io.aws2.options"><code>AwsOptions</code></a>, e.g. <code>--awsRegion=us-west-1</code>. <a href="../../../../../../../org/apache/beam/sdk/io/aws2/options/AwsOptions.html" title="interface in org.apache.beam.sdk.io.aws2.options"><code>AwsOptions</code></a> contain reasonable defaults based on default providers
for <a href="https://static.javadoc.io/software.amazon.awssdk/regions/2.17.127/software/amazon/awssdk/regions/Region.html?is-external=true" title="class or interface in software.amazon.awssdk.regions"><code>Region</code></a> and <a href="https://static.javadoc.io/software.amazon.awssdk/auth/2.17.127/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.html?is-external=true" title="class or interface in software.amazon.awssdk.auth.credentials"><code>AwsCredentialsProvider</code></a>.
<p>If you require more advanced configuration, you may change the <a href="../../../../../../../org/apache/beam/sdk/io/aws2/common/ClientBuilderFactory.html" title="interface in org.apache.beam.sdk.io.aws2.common"><code>ClientBuilderFactory</code></a>
using <a href="../../../../../../../org/apache/beam/sdk/io/aws2/options/AwsOptions.html#setClientBuilderFactory-java.lang.Class-"><code>AwsOptions.setClientBuilderFactory(Class)</code></a>.
<p>Configuration for a specific IO can be overwritten using <code>withClientConfiguration()</code>,
which also allows to configure the retry behavior for the respective IO.
<h4>Retries</h4>
<p>Retries for failed requests can be configured using <code>ClientConfiguration.Builder#retry(Consumer)</code> and are handled by the AWS SDK unless there's a
partial success (batch requests). The SDK uses a backoff strategy with equal jitter for computing
the delay before the next retry.
<p><b>Note:</b> Once retries are exhausted the error is surfaced to the runner which <em>may</em>
then opt to retry the current partition in entirety or abort if the max number of retries of the
runner is reached.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Read</a></span></code>
<div class="block">Implementation of <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html#read--"><code>read()</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.RecordAggregation.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.RecordAggregation</a></span></code>
<div class="block">Configuration of Kinesis record aggregation.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Write</a>&lt;<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="type parameter in KinesisIO.Write">T</a>&gt;</span></code>
<div class="block">Implementation of <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html#write--"><code>write()</code></a>.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html#KinesisIO--">KinesisIO</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Read</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html#read--">read</a></span>()</code>
<div class="block">Returns a new <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisIO.Read</code></a> transform for reading from Kinesis.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Write</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html#write--">write</a></span>()</code>
<div class="block">Returns a new <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisIO.Write</code></a> transform for writing to Kinesis.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="KinesisIO--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>KinesisIO</h4>
<pre>public&nbsp;KinesisIO()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="read--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>read</h4>
<pre>public static&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Read</a>&nbsp;read()</pre>
<div class="block">Returns a new <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisIO.Read</code></a> transform for reading from Kinesis.</div>
</li>
</ul>
<a name="write--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>write</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="class in org.apache.beam.sdk.io.aws2.kinesis">KinesisIO.Write</a>&lt;T&gt;&nbsp;write()</pre>
<div class="block">Returns a new <a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Write.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><code>KinesisIO.Write</code></a> transform for writing to Kinesis.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisClientThrottledException.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.Read.html" title="class in org.apache.beam.sdk.io.aws2.kinesis"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/io/aws2/kinesis/KinesisIO.html" target="_top">Frames</a></li>
<li><a href="KinesisIO.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>