Spark Streaming消费Kafka的数据进行统计

本文详细介绍SparkStreaming如何与Kafka消息队列进行整合,通过使用Receiver-based方式,实现从Kafka中读取数据并进行实时处理。文章提供了一个具体的代码示例,展示了如何配置SparkStreaming应用程序以连接到ZooKeeper集群,指定消费者组,以及如何定义主题及其线程数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流处理平台:
在这里插入图片描述
这里是第四步的实现:
Spark Streaming整合Kafka采用的是Receiver-based,另一种方式Direct Approach,稍作修改就行。

package spark

import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
  * Spark Streaming对接Kafka
  */
object KafkaStreamingApp {

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

    if(args.length != 4) {
      System.err.println("Usage: KafkaStreamingApp <zkQuorum> <group> <topics> <numThreads>")
    }

    val Array(zkQuorum, group, topics, numThreads) = args

    val sparkConf = new SparkConf().setAppName("KafkaReceiverWordCount")
      .setMaster("local[2]")

    val ssc = new StreamingContext(sparkConf, Seconds(5))

    val topicMap = topics.split(",").map((_, numThreads.toInt)).toMap

    // Spark Streaming如何对接Kafka
    val messages = KafkaUtils.createStream(ssc, zkQuorum, group,topicMap)

    messages.map(_._2).count().print()

    ssc.start()
    ssc.awaitTermination()
  }
}

好的,以下是一个简单的示例代码,假设我们要消费名为“test”的Kafka主题,并对其中的单词进行词频统计: ```scala import org.apache.spark.streaming.{Seconds, StreamingContext} import org.apache.spark.streaming.kafka._ import org.apache.kafka.common.serialization.StringDeserializer import org.apache.spark.SparkConf object WordCount { def main(args: Array[String]): Unit = { // 创建 SparkConf 对象 val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]") // 创建 StreamingContext 对象 val ssc = new StreamingContext(conf, Seconds(5)) // 设置 Kafka 相关参数 val kafkaParams = Map[String, Object]( "bootstrap.servers" -> "localhost:9092", "key.deserializer" -> classOf[StringDeserializer], "value.deserializer" -> classOf[StringDeserializer], "group.id" -> "test-group", "auto.offset.reset" -> "latest", "enable.auto.commit" -> (false: java.lang.Boolean) ) // 创建一个 Kafka DStream val kafkaStream = KafkaUtils.createDirectStream[String, String]( ssc, LocationStrategies.PreferConsistent, ConsumerStrategies.Subscribe[String, String](Array("test"), kafkaParams) ) // 从 Kafka DStream 中提取单词 val words = kafkaStream.flatMap(record => record.value().split(" ")) // 对单词进行计数 val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _) // 输出计数结果 wordCounts.print() // 启动 Spark Streaming ssc.start() ssc.awaitTermination() } } ``` 上述代码中,我们首先创建了一个 `SparkConf` 对象,并设置了应用程序名为“WordCount”,使用本地模式运行。然后创建了一个 `StreamingContext` 对象,每隔 5 秒钟将接收到的数据进行批处理。 接下来,我们设置了 Kafka 相关参数,包括 Broker 地址、键值对反序列化器、消费者组 ID 等。然后使用 `KafkaUtils.createDirectStream` 方法创建了一个 Kafka DStream。在这个 DStream 上,我们使用 `flatMap` 方法将每个消息的值按空格拆分成单词,并使用 `map` 和 `reduceByKey` 方法对单词进行计数。最后,我们调用 `print` 方法输出计数结果。 最后,我们启动 Spark Streaming 并等待计算完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值