У меня есть потребительское приложение kinesis, разработанное с использованием spring-integration-aws
версии 1.1.0.RELEASE
.
В своих тестах я запускаю два экземпляра этого приложения в одной группе потребителей и использую поток с двумя осколками. В своих тестах я понял, что KinesisMessageDrivenChannelAdapter
будет распространять сообщения тремя способами:
- Все сообщения доставляются одному потребителю
- сообщения, рассылаемые обоим потребителям (неравномерно)
- Оба потребителя получили одинаковые сообщения
Со стороны производителя сообщения равномерно распределяются между двумя шардами. Я хотел бы знать, как адаптер kinesis распределяет сообщения среди потребителей и, если поддерживается, как я могу добиться равномерного распределения среди потребителей.
Спасибо
ОБНОВЛЕНИЕ (конфигурация адаптера)
@Bean
public KinesisMessageDrivenChannelAdapter kinesisInboundChannelAdapter(
AmazonKinesis amazonKinesis) {
String[] streamNames = this.consumerClientProperties.getKinesis().getStreamNames();
KinesisMessageDrivenChannelAdapter adapter =
new KinesisMessageDrivenChannelAdapter(amazonKinesis, streamNames);
adapter.setConverter(null);
adapter.setOutputChannel(new QueueChannel());
adapter.setCheckpointStore(dynamoDbMetaDataStore());
adapter.setCheckpointMode(CheckpointMode.record);
adapter.setStartTimeout(10000);
adapter.setConsumerGroup(consumerClientProperties.getName());
adapter.setListenerMode(ListenerMode.record);
adapter.setDescribeStreamRetries(1);
return adapter;
}
@Bean
public DynamoDbMetadataStore dynamoDbMetaDataStore() {
DynamoDbMetadataStore dynamoDbMetaDataStore = new DynamoDbMetadataStore(amazonDynamoDB(),
consumerClientProperties.getName());
return dynamoDbMetaDataStore;
}