Storm会为每个元组分配一个唯一的ID,并跟踪其在整个处理过程中的状态。这使得Storm可以知道每个元组是否已经被成功处理。
当Bolt处理一个元组时,它可以选择“锚定”这个元组。这意味着Bolt告诉Storm,它正在处理这个元组,并且如果处理失败,Storm应该重新发送这个元组。
当Bolt成功处理一个元组时,它会发送一个确认消息(ack)给Storm。当Storm收到这个确认消息时,它会知道这个元组已经被成功处理。
如果Storm没有在一定时间内收到一个元组的确认消息,它会认为这个元组的处理失败,并重新发送这个元组。这就是所谓的重播机制。
Storm还提供了事务性Spout,它可以保证每个批次的数据只被处理一次。这是通过在每个批次的开始和结束发送特殊的元组来实现的。