知识卡片
两类Spout定重放边界
内容
微批量的重放保证取决于数据源类型:事务性Spout保证每次重放同一批次的内容完全相同,实现简单但分区故障时批次会卡住无法继续;不透明Spout允许批次内容因分区可用性变化,但保证每个元组只被计入一个批次,可用性更高但状态逻辑更复杂。
参考来源
- 位置:《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》第16章《微批量流处理》"16.2 微批量流处理的核心概念"一节(源文件:_epub-src/OEBPS/Text/115.xhtml)
- 结论依据:原文明确"事务性的Spout……每次回放时必须产生完全相同的批次",其问题是"如果一个批次失败且该批次的一个分区变得不可用,那么由于该批次不能完全回放,处理将无法继续";而"不透明的Spout……必须确保每个元组只在一个批次中被成功处理",并允许批次内容因分区可用性变化,但需要更复杂的状态逻辑。
- 原始内容:事务性的Spout……每次回放时必须产生完全相同的批次。事务性Spout的问题是,如果一个批次失败且该批次的一个分区变得不可用,那么由于该批次不能完全回放,处理将无法继续。一种限制较少的Spout,被称为不透明的Spout,必须确保每个元组只在一个批次中被成功处理……为了使用不透明的Spout实现有且仅有一次语义,在完成状态更新时需要更加复杂的逻辑。