我有一个能够处理重复的 Kinesis 流记录的应用程序。我们正在考虑在处理故障方面可以采取的方法。并提出了以下方法:
如果在 期间捕获到异常processRecords
,则应用程序不会检查点。通过这样做,记录将与下一批一起再次发送,间接执行重试。
所以我的问题是 - 当涉及到 Kinesis 流的检查点时,应用程序是否应该总是定期检查点?操纵检查点机制是否被视为反模式?
谢谢
我有一个能够处理重复的 Kinesis 流记录的应用程序。我们正在考虑在处理故障方面可以采取的方法。并提出了以下方法:
如果在 期间捕获到异常processRecords
,则应用程序不会检查点。通过这样做,记录将与下一批一起再次发送,间接执行重试。
所以我的问题是 - 当涉及到 Kinesis 流的检查点时,应用程序是否应该总是定期检查点?操纵检查点机制是否被视为反模式?
谢谢
我想首先澄清一些可能会改变你观点的检查点。除非我严重误解了您的问题,否则它更少“操纵”检查点机制,而更多“将其用于预期目的”。
一般来说,目标是使用 Kinesis 来驱动有用的处理——通常重新处理重复记录是没有用的(而且只会花钱,支付给 AWS)。检查点通常意味着更少的时间和金钱浪费在重新处理重复记录上。
您可以基于时间(每 X 秒)、基于记录(每 Y 条记录)、每批、从不或任何您想要的检查点 - 这一切都取决于在发生故障时您可以容忍多少浪费。
注意:请记住,检查点机制是由 DynamoDB 表支持的,因此过于频繁地执行此操作会产生一些小成本(确保您有足够的表吞吐量)。