手动维护kafka偏移量精准一次语义(随内容维护到hbase里)

	object Kafka_consumers {
	  def main(args: Array[String]): Unit = {
	  
	//spark充当kafka消费者 直接订阅主题消费,将数据更新到hbase里
	   val ssc=new StreamingContext(new SparkContext(new SparkConf().setMaster("local[*]").setAppName("demo")),Seconds(5))


	    //kafka配置参数 这是另一个类里的方法 我搬过来了
	def kafka_util:collection.Map[String, Object]  ={

    val kafkaParams = Map[String, Object](
      "bootstrap.servers" -> "192.168.1.201:6667,192.168.1.202:6667",
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      "group.id" -> "qqaeqay",
      "auto.offset.reset" -> "earliest",
      "enable.auto.commit" -> (false: java.lang.Boolean)
    )
    kafkaParams
  }
	

	//需要一个hash类型的,谨记这里 创建一个map来放上一次消费的偏移量
	    var map=scala.collection.mutable.Map[TopicPartition, Long]() //盛放分区offset
	
	    val bo=HBasePool("192.168.1.201","2181")//线程池 
	    val bbo= bo.borrowObject()//借
	    val tb=bbo.getTable("aoc")//表名
	    val get=new Get("user_behavior_topic_a".getBytes())//rowkey
	    val tabl=tb.get(get)
	    while(tabl.advance()){
	    //user_behavior_topic_a  column=cf1:0, timestamp=1558913449163, value=1588
	      val cell=tabl.current()
	      val qualifier=Bytes.toInt(CellUtil.cloneQualifier(cell))
	      val cellvalue=Bytes.toLong(CellUtil.cloneValue(cell))
	      map.put(new TopicPartition("hyy",qualifier),cellvalue)//这里放入的就是 rowkey,分区,偏移量
	   }
	    tb.close()
	    bo.returnObject(bbo)//还
	
	    //匹配模式 如果map内有数据则消费map中的数据 如果没有数据而从头消费
	    val stream = map.size match {
	
	      case 0 => KafkaUtils.createDirectStream(ssc,LocationStrategies.PreferConsistent,
	        ConsumerStrategies.Subscribe[String,String](List("hyy"),Spark_Utils.kafka_util))
	
	
	      case _ =>KafkaUtils.createDirectStream(ssc,LocationStrategies.PreferBrokers,
	        ConsumerStrategies.Subscribe(List("hyy"),Spark_Utils.kafka_util,map)
	      )
	    }

逻辑开始的地方
stream.map(f=>{#$%^&})
 ssc.start()
 ssc.awaitTermination()
 //  ssc.stop(false,true)//优雅
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值