kafka手动维护偏移量

1、kafka手动维护偏移量

  在项目中,kafka和sparkStream采用的是直连方式,使用的是kafka基础的api,因此需要手动维护偏移量。将偏移量保存在mysql中。

  程序运行时,先去mysql中查询偏移量,判断是否是程序第一次启动,若是第一次启动,就是不指定偏移量,重头读取kafka数据。若是非第一次启动,即从mysql中有偏移量。此时还要对比数据库中的偏移量和kafka现在每个分区的最早偏移量getEarliestLeaderOffsets,因为kafka数据默认是保存七天,也就是偏移量有效期就是七天。若数据库中的偏移量没过期,那就从数据库保存的偏移量开始读。若过期了,那就从现在最新的开始读。

       这里出现一个问题,kafka的分区数不一定不变,有时候就是为了提升spark Streaming的并行处理的能力,这时要必须增加kafka的分区数以对应spark Streaming的executor数,--num- executor这个主要设置即可,因为分区数要等于executor的数量,大了小了都不好。而新增分区的偏移量若没有及时保存在数据库上的话,就会出现数据丢失,消费不到新增分区的数据。

     这里的解决方式,就是每次启动流程序前,对比一下当前我们自己保存的kafka的分区的个数和从zookeeper里面的存的topic的分区个数是否一致,如果不一致,就把新增的分区给添加到我们自己保存的信息中,并发偏移量初始化成0,这样以来在程序启动后,就会自动识别新增分区的数据。 

 

参考博客:Kafka偏移量维护中的坑  https://www.jianshu.com/p/316e50a570dd

猜你喜欢

转载自www.cnblogs.com/guoyu1/p/12089696.html