【发布时间】:2021-07-26 17:38:44
【问题描述】:
我正在运行一个测试系统,该系统生成一个 Kinesis 生产者,该生产者开始写入消息,例如:1 到 100 到具有两个分片的流。
在该循环期间,消费者开始从流中读取消息。我注意到消费者只读取运行后进入流的LATEST 消息。例如,它从第 43 条消息开始读取。我尝试修改 Worker.class 以使用 TRIM_HORIZON 策略,但这似乎不起作用。
KinesisClientLibConfiguration c = new KinesisClientLibConfiguration("MediaPlan", "randeepstream",
DefaultAWSCredentialsProviderChain.getInstance(),
"consumer1")
.withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON);
final Worker w = new Worker.Builder()
.recordProcessorFactory(rpf)
.config(kinesisConfig)
.build();
new Thread(() -> w.run()).start();
我的消费者的处理器设置为:
public class ConsumerRecordProcessorImpl implements IRecordProcessor {
public void initialize(InitializationInput initializationInput) {
log.info("Setting up consumer with shard {} starting at {}", initializationInput.getShardId(),
initializationInput.getExtendedSequenceNumber());
}
public void processRecords(ProcessRecordsInput processRecordsInput) {
...
}
}
我希望看到如下消息:
Setting up consumer with shard shardId-000000000000 starting at TRIM_HORIZON 0
但相反,我得到:
Setting up consumer with shard shardId-000000000000 starting at LATEST 0
如何让我的消费者停止阅读最新消息并阅读所有未处理的消息?
【问题讨论】:
标签: java amazon-kinesis amazon-kinesis-client