当Spark Streaming的代码修改后启动时(directStream的高级api,信息保存在ck中),反序列化Checkpoint目录中的数据失败,所以Kafka offset会丢失,此时不知道从哪里消费Kafka的数据,所以我们要将Kafka offset保存到ZooKeeper中一份,当Spark Streaming优雅停止后,删除Checkpoint目录然后从ZooKeeper中读取Kafka offset再启动SparkSteaming。
在低级api获取ssc对象的代码中,先进行判断文件夹存在不存在,如果存在,从zk里面读取offset就行了,关闭后ck文件夹就会存在,序列化的有数据。第二次启动,文件夹就存在,就走高级api来读取就行了(zk里面存有值)