我使用Apache风暴来接收来自kafka的消息并将数据插入数据库。消息对应于Oracle DB中发生的事务。由于我们正在使用storm,因此无法保证处理顺序,并且在第一次尝试时失败的某些消息可能在重试时成功。我们需要将重试限制为阈值10,如果发生故障,则将消息移动到错误队列。
具体来说,我们的要求是在螺栓执行(异常)上重试指定的次数。在重试之后,应将消息移动到数据库。我们正在进行fieldsGrouping并维护一个哈希映射来跟踪重试次数。这是确保重试的消息使用相同的工作程序所必需的,但这会对性能产生重大影响。我们将不得不进行shuffleGrouping以获得最大吞吐量。实现此行为的最佳方法是什么。 考虑以下选项。 1)维护数据库中的重试计数状态(可能是性能问题)。 2)维护外部缓存中的重试计数状态(如Amazon AWS中的弹性缓存),但这可能很昂贵。 3)维护消息本身的重试计数状态,并将消息重新发布到kafka队列。也忽略了螺栓中发生的异常,使其成功。
我们没有考虑螺栓本身内部的指数重试,因为它也可能导致性能问题。
请建议。