问题需求:在实际工程中,比如淘宝等,重复消费可能导致重复支付问题,导致用户的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 SparkConf().setMaster("local[2]").setAppName("kafkaSparkStreaming")
val context = new Spar

本文介绍如何解决程序中断后重启kafka导致的Spark Streaming数据重复消费问题。通过利用redis存储消费标记,确保数据仅消费一次。在消费前检查redis中的标志位,避免重复处理数据。
最低0.47元/天 解锁文章
3687

被折叠的 条评论
为什么被折叠?



