import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.kafka010.OffsetRange
import redis.Jpools
object DataToRedis {
//保存数据到redis
def saveDataOffset(result1: RDD[((String,String,String), Int)],ranges: Array[OffsetRange],groupid:String)={
result1.foreachPartition(filter=>{
//获取redis链接
val jedis = Jpools.getJedis
//开启一个事物
val transaction = jedis.multi()
//开始添加数据
filter.foreach(tp=>{
try{
//存储数据
transaction.hincrBy("operator",tp._1._1+":"+tp._1._2+":"+tp._1._3,tp._2)
//存储偏移量
for(o <- ranges){
transaction.hset(groupid,o.topic+":"+o.partition,o.untilOffset.toString)
}
}catch {
case _ => println("报错了,需要回滚")
//需要回滚
transaction.discard()
}
})
//事物对象去提交 不管失败与成功,都需要报告结果(提交结果)
//跳出循环,总的提交
transaction.exec()
//关闭redis链接
jedis.close()
})
}
}
MyUtil:保存数据到redis
最新推荐文章于 2024-04-03 09:46:43 发布