在流处理中,一致性可以分为3个级别:
1.at-most-once(最多变一次):
这其实是没有正确性保障的委婉说法——故障发生之后,计数结果可能丢失。
2.at-least-once(至少一次):
这表示计数结果可能大于正确值,但绝不会小于正确值。也就是说,计数程序在发生故障后可能多算,但是绝不会少算。
3.exactly-once(严格变一次):
这指的是系统保证在发生故障后得到的计数结果与正确值一致.既不多算也不少算。
Flink的一个重大价值在于,它既保证了exactly-once,又具有低延迟和高吞吐的处理能力。
端到端的状态一致性
整个端到端的一致性级别取决于所有组件中一致性最弱的组件。
SparkStraming做法:手动维护偏移量(数据不丢)+幂等性框架(数据不重复)
Flink做法
source端:需要外部源可重设数据的读取位置,如kafka
flink内部:依赖checkpoint机制
sink端:幂等(Idempotent)写入/事务性(Transactional)写入(两阶段提交)
一致性
网友评论