SparkStreaming-Kafka数据的消费

1、保证元数据恢复,就是Driver端挂了之后数据仍然可以恢复

// 创建StreamingContext对象
val ssc: StreamingContext =  StreamingContext.getOrCreate(checkpointPath,
      () => BatchProcessTopic.createContext(brokers, topics, batchseconds,
        checkpointPath, offset, maxRatePerPartition,jobName,localFlag,processDay,source)) 
// BatchProcessTopic对象中调用checkpoint   
ssc.checkpoint(checkpointDirectory)

2、Kafka的调优

  //sparkConf初始化
    val sparkConf = new SparkConf().setAppName(jobName)
      .set("spark.default.parallelism", REDUCE_PARALLELISM) //调整程序处理的并行度
      .set("spark.streaming.backpressure.enabled", "true") //开启后spark自动根据系统负载选择最优消费速率(反压机制),测试重跑跑数据代码 true->false
      .set("spark.streaming.kafka.maxRatePerPartition", maxRatePerPartition) //设置每秒每个分区最大获取日志数,控制处理数据量,保证数据均匀处理。
      .set("spark.streaming.kafka.maxRetries", KAFKA_RETRIES) //获取topic分区leaders(kafka中leade有时会发生变换)及其最新offsets时,调大重试次数。
      .set("spark.streaming.stopGracefullyOnShutdown", "true") //确保在kill任务时,能够处理完最后一批数据,再关闭程序,不会发生强制kill导致数据处理中断,没处理完的数据丢失
      .set("spark.streaming.backpressure.initialRate", "10")  //限制第一次批处理应该消费的数据,因为程序冷启动 队列里面有大量积压,防止第一次全部读取,造成系统阻塞

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spark StreamingKafka消费数据的步骤如下: 1. 首先需要引入相关依赖包,包括Spark Streaming Core、KafkaSpark Streaming Kafka等。 2. 创建Spark Streaming Context并设置批处理时间间隔。 3. 创建Kafka参数映射,包括Kafka集群地址、消费者组、消费的主题等。 4. 创建一个DStream,使用KafkaUtils.createDirectStream方法从Kafka消费数据。这个方法返回一个包含每个批次数据的RDD的DStream。 5. 对DStream进行数据处理,包括转换、过滤、聚合等。 6. 启动Spark Streaming应用程序并等待它完成。 下面是一个示例代码,演示了如何使用Spark StreamingKafka消费数据: ``` import org.apache.spark.streaming._ import org.apache.spark.streaming.kafka._ import org.apache.kafka.common.serialization.StringDeserializer val ssc = new StreamingContext(sparkConf, Seconds(5)) val kafkaParams = Map[String, Object]( "bootstrap.servers" -> "localhost:9092", "key.deserializer" -> classOf[StringDeserializer], "value.deserializer" -> classOf[StringDeserializer], "group.id" -> "my-group", "auto.offset.reset" -> "latest", "enable.auto.commit" -> (false: java.lang.Boolean) ) val topics = Array("my-topic") val stream = KafkaUtils.createDirectStream[String, String]( ssc, PreferConsistent, Subscribe[String, String](topics, kafkaParams) ) stream.map(record => (record.key, record.value)) .filter(_._2.contains("error")) .count() .print() ssc.start() ssc.awaitTermination() ``` 在这个示例中,我们从名为“my-topic”的Kafka主题中消费数据,并在每个批次中对包含“error”字符串的记录进行计数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值