Java 无法使用所有新的运动信息

Java 无法使用所有新的运动信息,java,amazon-kinesis,Java,Amazon Kinesis,我正在将一个Java应用程序从Kafka转换为Kinesis。此应用程序将永远运行。它休眠30秒,然后醒来,运行一些HBase查询,使用和处理任何新的Kafka消息,然后再次休眠 这在卡夫卡中效果很好——这正是默认消费者所做的。然而,在动情方面并非如此。从KCL消费需要KCL消费者始终运行,这不符合我的需要。我需要能够根据需要使用单个方法调用来使用所有新消息 Kinesis Java API的官方文档说明: 您可以基于每个碎片从流中检索记录。对于每个分片,以及从该分片检索的每批记录,您需要获得一

我正在将一个Java应用程序从Kafka转换为Kinesis。此应用程序将永远运行。它休眠30秒,然后醒来,运行一些HBase查询,使用和处理任何新的Kafka消息,然后再次休眠

这在卡夫卡中效果很好——这正是默认消费者所做的。然而,在动情方面并非如此。从KCL消费需要KCL消费者始终运行,这不符合我的需要。我需要能够根据需要使用单个方法调用来使用所有新消息

Kinesis Java API的官方文档说明:

您可以基于每个碎片从流中检索记录。对于每个分片,以及从该分片检索的每批记录,您需要获得一个分片迭代器

如果没有返回任何记录,这意味着在碎片迭代器引用的序列号处,当前没有来自该碎片的数据记录。出现这种情况时,应用程序应该等待一段时间

但我不在乎碎片!我只想在一个方法调用中获取自上次使用以来的所有消息。如果我的应用程序死了,需要重新启动怎么办;它如何知道在哪里恢复

当前代码:

GetRecordsRequest getRecordsRequest = new GetRecordsRequest();
getRecordsRequest.setShardIterator(TRIM_HORIZON);
getRecordsRequest.setLimit(25); 

GetRecordsResult result = client.getRecords(getRecordsRequest);

// Put the result into record list. The result can be empty.
records = result.getRecords();
编辑

更清楚地说,有了卡夫卡,我可以:

ConsumerRecords<String, String> records = this.consumer.poll(0);
ConsumerRecords records=this.consumer.poll(0);
获取所有未使用的消息。如果我的应用程序死掉并重新启动,就没有问题了,偏移量会得到处理,我会继续我停止的地方


如何在Kinesis中执行此操作?

要回答您的问题,您可以使用
StockTradeRecordProcessor
,它可以选择重置统计信息,从而仅使用新消息。请参阅查找
StockTradeRecordProcessor
的实现


但有一点很难理解,
此方法使用60秒的时间间隔来报告和检查点速率
,而不是应用程序要求的30秒。

谢谢,但这使用了KCL,因此我无法在任何时候阅读消息时调用
processRecords(…)
。我宁愿不必重新构建我的应用程序来存在于这个方法中,因为运动只是其中的一小部分。