千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Spark Streaming Kafka Offset为什么不用Checkpoint管理

Spark Streaming Kafka Offset为什么不用Checkpoint管理

来源:千锋教育
发布人:syq
时间: 2022-08-12 11:24:27 1660274667

  Spark Streaming消费Kafka,对于offset的管理方式一般有如下方式:

  1. checkpoint 方式管理,通过checkpoint可以将消费的offset持久化存储到hdfs,失败后作业可以从checkpoint恢复。 但是这里的主要问题是,如果你的程序作了升级,比如业务逻辑变更了,你修改了代码,这时是无法从之前的checkpoint恢复的。因为checkpoint第一次持久化的时候会把整个相关的jar给序列化成一个二进制文件,每次重启都会从里面恢复,换句话说不支持应用升级。

Checkpoint管理

  2. mysql,可以将offset存储到mysql中,自己管理,作业从mysql中读取每个分区的offset,这样可以解决应用程序升级问题,同时如果你想从之前的某个时刻消费数据,也可以选择在mysql中保留条offset信息。比如我想从一个小时之前重新消费数据,因为这段时间数据出错了,我要重新计算,只需要指定读取记录的一个小时前的offset即可。 这里还有一点需要说明的是,如果你spark输出的数据存储也在mysql中,通过mysql事物,就可以做到端到端的exactly once 语义。

  3. zookeeper,可以将offset存储到zk中

  4. kafka 0.10 之后,offset存储到kafka的一个topic,`__consumer_offsets`,同时提供了commitAsync 的方式提交offset。

  5. 其他第三方存储,redis,hbase都是可以的

  # 需要说明的是,上面的这些方式,如果spark消费的数据写入到其他存储中,你只有保证offset的更新和你的数据写入在同一个事物中才能保证端到端的exactly once语义。 比如你如果Spark Streaming输出数据写入hbase中,offset存储在mysql中,你是无法维护offset的更新和数据写入hbase在一个事物的,如果先再写入hbase,再更新offset,保证的语义是at-least-once, 这种情况下数据不会丢失,但是会重复。 如果你先更新offset,再写hbase,这种情况可能造成数据丢失,语义是at-most-once.

  更多关于“大数据培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT