/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.flink.streaming.connectors.kinesis.proxy; import com.amazonaws.services.kinesis.model.GetRecordsResult; import org.apache.flink.streaming.connectors.kinesis.model.KinesisStreamShard; import java.util.Map; /** * Interface for a Kinesis proxy that operates on multiple Kinesis streams within the same AWS service region. */ public interface KinesisProxyInterface { /** * Get a shard iterator from the specified position in a shard. * The retrieved shard iterator can be used in {@link KinesisProxyInterface#getRecords(String, int)}} * to read data from the Kinesis shard. * * @param shard the shard to get the iterator * @param shardIteratorType the iterator type, defining how the shard is to be iterated * (one of: TRIM_HORIZON, LATEST, AT_TIMESTAMP, AT_SEQUENCE_NUMBER, AFTER_SEQUENCE_NUMBER) * @param startingMarker should be {@code null} if shardIteratorType is TRIM_HORIZON or LATEST, * should be a {@code Date} value if shardIteratorType is AT_TIMESTAMP, * should be a {@code String} representing the sequence number if shardIteratorType is AT_SEQUENCE_NUMBER, AFTER_SEQUENCE_NUMBER * @return shard iterator which can be used to read data from Kinesis * @throws InterruptedException this method will retry with backoff if AWS Kinesis complains that the * operation has exceeded the rate limit; this exception will be thrown * if the backoff is interrupted. */ String getShardIterator(KinesisStreamShard shard, String shardIteratorType, Object startingMarker) throws InterruptedException; /** * Get the next batch of data records using a specific shard iterator * * @param shardIterator a shard iterator that encodes info about which shard to read and where to start reading * @param maxRecordsToGet the maximum amount of records to retrieve for this batch * @return the batch of retrieved records, also with a shard iterator that can be used to get the next batch * @throws InterruptedException this method will retry with backoff if AWS Kinesis complains that the * operation has exceeded the rate limit; this exception will be thrown * if the backoff is interrupted. */ GetRecordsResult getRecords(String shardIterator, int maxRecordsToGet) throws InterruptedException; /** * Get shard list of multiple Kinesis streams, ignoring the * shards of each stream before a specified last seen shard id. * * @param streamNamesWithLastSeenShardIds a map with stream as key, and last seen shard id as value * @return result of the shard list query * @throws InterruptedException this method will retry with backoff if AWS Kinesis complains that the * operation has exceeded the rate limit; this exception will be thrown * if the backoff is interrupted. */ GetShardListResult getShardList(Map<String,String> streamNamesWithLastSeenShardIds) throws InterruptedException; }