Spark05_Streaming的使用

该博客介绍了SparkStreaming在实时数据处理中的应用,特别是如何利用DStream处理微批量数据。文章详细展示了如何配置和使用Spark Streaming从Kafka数据源消费数据,以及如何启用背压机制来平衡数据接收和处理速率。同时,提供了一个使用Scala编写的示例代码,演示了从Kafka主题读取数据并进行简单的WordCount计算。

概述

介绍:

  • SparkStreaming是一种用于流式数据的处理,准实时(秒级, 分钟)数据处理, 微批量数据处理的一种方式
  • Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream。DStream 就是对 RDD 在实时数据处理场景的一种封装。

图解:

在这里插入图片描述


背压机制

背压机制(即 Spark Streaming Backpressure): 根据JobScheduler 反馈作业的执行信息来动态调整 Receiver 数据接收率
通过属性“spark.streaming.backpressure.enabled”来控制是否启用 backpressure 机制,默认值false,即不启用

解决 : 可以解决接收的速率和消费的速率不对等产生的问题


以kafka为数据源进行消费

依赖:

<dependency>
 <groupId>org.apache.spark</groupId>
 <artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
 <version>3.0.0</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-core</artifactId>
 <version>2.10.1</version>
<dependency>

代码:

package com.dxy.streaming

import org.apache.kafka.clients.consumer.ConsumerConfig
import org.apache.spark.{SPARK_BRANCH, SparkConf}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.streaming.kafka010.{ConsumerStrategies, KafkaUtils, LocationStrategies}
import org.apache.spark.streaming.receiver.Receiver
import org.apache.spark.streaming.{Duration, StreamingContext}

import scala.util.Random

object SparkStream03_kafka {

  // 展示: 
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("Streaming").setMaster("local[*]")
    val sm = new StreamingContext(conf, Duration(5000))

    //定义kafka配置
    val kafkaPara: Map[String, Object] = Map[String, Object](
      ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> "hadoop202:9092,hadoop203:9092,hadoop204:9092",
      ConsumerConfig.GROUP_ID_CONFIG -> "user",
      "key.deserializer" ->
        "org.apache.kafka.common.serialization.StringDeserializer",
      "value.deserializer" ->
        "org.apache.kafka.common.serialization.StringDeserializer"
    )

    // 创建以kafka为数据源  
    /**
    第一个参数   StreamingContext对象
    第二个参数:  自动寻找本地位置
    第三个参数:  kafka配置, 以及消费的主题
    */
    val kafkaData = KafkaUtils.createDirectStream(
      sm,
      LocationStrategies.PreferConsistent,
       ConsumerStrategies.Subscribe[String, String](Set("spark_kafka_test"), kafkaPara)
    )

    val valueDStream: DStream[String] = kafkaData.map(record => record.value())
    //6.计算 WordCount
    valueDStream.flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)
      .print()


     sm.start()
    sm.awaitTermination()
  }
  
}

kafka produce生产数据:


  def main(args: Array[String]): Unit = {

      val conf = new SparkConf().setAppName("模拟kafka生产数据").setMaster("local[*]")
      val sm = new StreamingContext(conf, Duration(5000))

    val prop = new Properties()
    // 添加配置
    prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop202:9092")
    prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
      "org.apache.kafka.common.serialization.StringSerializer")
    prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
      "org.apache.kafka.common.serialization.StringSerializer")
    // 根据配置创建 Kafka 生产者
    val produce = new KafkaProducer[String, String](prop)

     while (true){
        
       // 模拟创建数据
       mockData().foreach(
         data => {

           val record = new ProducerRecord[String, String]("spark_test1", data)
           produce.send(record)
           println(data)
         }
       )

       Thread.sleep(2000)

     }


    sm.start()
    sm.awaitTermination()
}
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 在信息技术领域中,开发一个模仿微信客服交流平台的界面是一项普遍的需求,尤其是在构建企业级沟通工具时。这个名为"仿微信客服交流界面(具备聊天信息本地数据库存储功能)"的项目,致力于为用户创造一个类似于微信的互动体验,并且已经完成了聊天信息在本地数据库中的保存功能,以此保障信息的安全性和可恢复性。另外,项目还包含了网络传输的代码,旨在帮助开发者更好地理解和将此功能整合进自己的应用程序中。 现在让我们深入探究聊天界面的构建过程。微信客服交流界面通常由以下几个核心组件构成:用户个人照片、昵称展示、消息展示气泡、时间标记、输入区域以及发送控制键。这些组件需要经过细致的排布,以确保界面既清晰又便于使用。在用户界面设计方面,一般会采用 Material Design 或者 iOS 的 Human Interface Guidelines 来设计符合平台标准的界面。源代码文件 ChatUIDemo 可能包含了这一界面实现的代码,开发者可以通过查看和调整这个文件来个性化自己的聊天界面。 聊天信息在本地数据库中的存储是一项核心功能。在该项目中,或许选用了SQLite作为轻量级数据库,因为它易于集成,支持事务处理,适合存储结构化的数据,例如用户标识符、接收者标识符、消息内容、发送时刻等。通过运用SQL指令,能够执行数据的增加、删除、修改和查询操作,从而确保聊天记录的完整性和一致性。开发者可能需要关注如何将新接收到的消息添加到数据库中,以及如何从数据库中获取历史记录并在界面上进行展示。 在网络传输方面,可能通过HTTP或HTTPS协议来实现,并且使用了诸如AFNetworking(iOS)或O...
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值