storm(record ack容错)
虽然流处理多年来一直广泛应用于金融等行业,但它最近正成为更广泛的用例的数据基础设施的一部分。开源框架的可用性推动了这种采用。也许开源世界中第一个广泛使用的大规模流处理框架是Apache Storm。Storm使用一种上游备份和记录确认机制来保证消息在失败后被重新处理。需要注意的是,Storm并不保证状态的一致性,任何可变状态的处理都是委托给用户的(Storm的Trident API保证了状态的一致性,将在下一节中进行描述)。
确认的工作原理如下:从操作符处理的每条记录都向前一个操作符发送一个确认,确认它已经被处理。拓扑源保留了它生成的所有元组的备份。一旦一个源记录收到了所有生成记录的确认,直到sink,它就可以从上游备份中安全地丢弃。失败时,如果没有收到所有确认,则会重播源记录。这保证了没有数据丢失,但是会导致重复的记录通过系统(因此术语“至少一次”)。Storm用一个聪明的机制实现了这个方案,每个源记录只需要几个字节来跟踪确认。Twitter Heron维护了与Storm相同的确认机制,但是提高了记录重放的效率(以及恢复时间和总体吞吐量)。
纯记录确认体系结构,无论其性能如何,都无法提供准确的一次保证,这给应用程序开发人员增加了重复数据删除的负担。这对于某些应用程序可能是可以接受的,但对于其他许多应用程序则不行。Storm机制的其他问题是低吞吐量和流量控制问