kafkaOffsetToMysql

package spark.util

import kafka.common.TopicAndPartition
import org.apache.spark.streaming.kafka.OffsetRange
import scalikejdbc.{DB, SQL}

object KafkaMysqlOffsetManager {


  // 获取offset
  def getOffset(groupId: String) = {
    val fromOffset: Map[TopicAndPartition, Long] =
      DB.readOnly {
        implicit session => {
          SQL("select * from offset where groupId = '${groupId}'")
            //查询出来后 将数据赋值给元组
            .map(m => (TopicAndPartition(m.string("topic"), m.int("partitions")), m.long("untilOffset")))
            .toList().apply()
        }.toMap //最后要toMap因为前面的返回值已经给定
      }
    fromOffset
  }

  def updateOffset(groupId: String, offsetRanges: Array[OffsetRange]) = {
    val fromOffset = getOffset(groupId)
    DB.localTx {
      implicit session => {
        for (os <- offsetRanges) {
          if(fromOffset.nonEmpty) {
            SQL("update offset set untilOffset=? where  groupId=? and topic=? and partitions=?")
              .bind(os.untilOffset,groupId, os.topic, os.partition).update().apply()
            println("更新:topic:" + os.topic + "   partition:" + os.partition + "   fromOffset:" + os.fromOffset + "   untilOffset:" + os.untilOffset)
          }else{
            SQL("replace into offset(topic,partitions,untilOffset,groupId) values(?,?,?,?)")
              .bind(os.topic, os.partition, os.untilOffset, groupId).update().apply()
            println("插入:topic:"+os.topic+"   partition:"+os.partition+"   fromOffset:"+ os.fromOffset+"   untilOffset:"+ os.untilOffset)

          }
        }
      }
    }
  }

  def insertOffset(groupId: String, offsetRanges: Array[OffsetRange]) = {
    val fromOffset = getOffset(groupId)
    DB.localTx {
      implicit session => {
        for (os <- offsetRanges) {
          if(fromOffset.nonEmpty)
           SQL("replace into offset(topic,partitions,untilOffset,groupId) values(?,?,?,?)")
            .bind(os.topic, os.partition, os.untilOffset, groupId).update().apply()
          println("插入:topic:"+os.topic+"   partition:"+os.partition+"   fromOffset:"+ os.fromOffset+"   untilOffset:"+ os.untilOffset)
        }
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值