import kafka.serializer.StringDecoder
import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Duration, Seconds, StreamingContext}
object Offset02App {
def main(args: Array[String]): Unit ={
val conf = new SparkConf().setAppName("Offset02App").setMaster("local[2]")
val kafkaParams = Map[String, String](
"metadata.broker.list"->"xxx:9092",
"auto.offset.reset" -> "smallest"
)
val topics = "exactlyonce_topic".split(",").toSet
val checkpointDirectory = "hdfs://xxx:8020/offset"
def functionToCreateContext(): StreamingContext = {
val ssc = new StreamingContext(conf, Seconds(10))
val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)
ssc.checkpoint(checkpointDirectory)
stream.checkpoint(Duration(10*1000))
stream.foreachRDD(rdd => {
if (!rdd.isEmpty()) {
println(s"留歌${rdd.count()}条数据" )
}
})
ssc
}
val ssc = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext _)
ssc.start()
ssc.awaitTermination()
}
}