这是我的第83篇原创
所有的数据处理工具都面临数据高可靠、高可用的问题,一旦服务发生问题,如何保证数据不会丢失?
高可靠解决方案
MySQL用BinLog来解决这个问题,它把每一步事务操作都记录下来,一旦发生问题,可以追踪binlog找到每一步的操作记录。MySQL还会提供快照、备份的功能。
HDFS通过多副本和ZooKeeper的选举机制来解决这个问题,它会把收到的每一份数据存成N个副本,当发生故障的时候,通过ZooKeeper来确定最新的副本数据。另外,HDFS也提供快照SnapShot的功能。
storm里面是通过ack和Trident搞定。
Spark比较复杂,不同版本不一样,1.3之前是用Receiver保存offset,重启后先获取上一次的offset,然后到kafka重新读取数据。1.3之后,跟Flink一样用checkpoint机制存储任务所有元数据,包括offset。具体可以看我之前分析的这篇文章,点击查看:SparkStreaming实时任务处理的三种语义。
Flink的Checkpoint机制
MySQL的思想很容易理解,就像棋谱一样,把每一步都记录下来。后人读棋谱,