继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Spark Streaming管理Kafka偏移量

慕村9548890
关注TA
已关注
手记 1102
粉丝 227
获赞 987

前言

为了让Spark Streaming消费kafka的数据不丢数据,可以创建Kafka Direct DStream,由Spark Streaming自己管理offset,并不是存到zookeeper。启用Spark Streaming的 checkpoints是存储偏移量的最简单方法,因为它可以在Spark的框架内轻松获得。 checkpoints将应用程序的状态保存到HDFS,以便在故障时可以恢复。如果发生故障,Spark Streaming应用程序可以从checkpoints偏移范围读取消息。

但是,Spark Streaming checkpoints在应用程序修改后由于从checkpoint反序列化失败而无法恢复,因此不是非常可靠,特别是如果您将此机制用于关键生产应用程序,另外,基于zookeeper的offset可视化工具将无法使用。我们不建议通过Spark checkpoints来管理偏移量。因此本文将手动存储offset到zookeeper,完全自我掌控offset。

从ZK获取offset

创建ZKClient,API有好几个,最后用带序列化参数的,不然保存offset的时候容易出现乱码。

webp

查看该groupId在该topic下是否有消费记录,如果有,肯定在对应目录下会有分区数,children大于0则有记录。

webp

在有记录的情况下,去拿具体的offset

webp

注意红色线框部分,在zookeeper里存储的offset有可能在kafka里过期了,所以要拿kafka最小的offset和zookeeper里的offset比较一下。

接下来就可以创建Kafka Direct DStream了,前者是从zookeeper拿的offset,后者是直接从最新的开始(第一次消费)。

webp

最后就是处理RDD,保存Offset。

webp

webp



作者:BIGUFO
链接:https://www.jianshu.com/p/a4065a14ff73


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP