kafka spark steaming数据丢失的原因

weixin_43364836 2018-11-24 09:12:58
数据丢失的原因:使用spark streaming消费kafka数据时,程序异常中断的情况下会有丢失数据的风险 如果不做容错,将会带来数据的丢失, 因为receiver一直在接收数据,还没有处理的时候已经通知了zookeeper数据已经接收到了, executor突然挂掉 或 driver挂掉通知关闭executor 内存中的缓存数据就会出现丢失的情况。----spark1.2的 WAL出现了 开启WAL 将receiver获取数据的存储级别修改为 storagelevel.memory_and_disk_ser 但但但,开启了WAL依旧有数据丢失, 因为任务中断了也会强行终止receiver,会造成数据丢失。 可以讲streaming中添加,只有确定了所有的receiver都关闭的情况下才终止程序,可以调用streamingcontext的stop方法。 sys.addshutdownhook( ssc.stop(TRUE,TRUE) ) WAL带来的问题 WAL实现的是at least once。如果写入到外部存储的数据还没有将offset更新到zookeeper就挂掉,这些数据将会被反复消费,同时,因为需要把数据写入到可靠的外部系统,这就回牺牲吞吐量。 kafka direct API 运行方式,不在使用receiver接收数据,抛弃wal机制同时保证了 exactly once 不会再wal机制中重复消费,不过需要自己完成offset写入zookeeper的过程。 messages.foreachrdd( rdd=>{ val message=rdd.map(_._2) message.map(method) updatezkoffsets(rdd)})
...全文
66 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧