问题需求:在实际工程中,比如淘宝等,重复消费可能导致重复支付问题,导致用户的RMB损失。
解决办法:利用redis,将消费过的数据存起来,并设置失效时间,以及消费的标志位,消费过的数据标志位为1,未消费的数据标志位为0。重启程序后,消费数据前利用redis判断数据是否被消费过,将消费过的数据过滤掉。
选择redis的原因:redis基于内存,对程序的开销影响不大。
代码1:在kafka获取数据并判断
package sparkStreamingRedis
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.InputDStream
import org.apache.spark.streaming.kafka010._
import Utils.RedisUtils
import redis.clients.jedis.Jedis
object sparkStreamingKafka {
def main(args: Array[String]): Unit = {
val conf = new S