Spark Streaming使用Kafka数据流示例

        Spark作为目前最流行的分布式计算框架,可用于处理实时数据流,本文主要介绍Spark Streaming如何使用Kafka数据流做分析,具体使用的版本信息见pom配置。

一、pom配置

        在IDE中创建好maven项目,在pom.xml添加如下配置:

<!-- spark streaming依赖 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.12</artifactId>
    <version>2.4.4</version>
</dependency>
<!-- kafka依赖 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
    <version>2.4.4</version>
</dependency>

二、代码示例

        具体步骤详见代码示例:

import java.util.*;
import org.apache.spark.SparkConf;
import org.apache.spark.TaskContext;
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.streaming.api.java.*;
import org.apache.spark.streaming.kafka010.*;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.serialization.StringDeserializer;
import scala.Tuple2;

public class SparkStreamTest{
    
    public static void main(String[] args){
        // kafka配置信息
        Map<String, Object> kafkaConfig = new HashMap<>();
        kafkaConfig.put("bootstrap.servers", "localhost:9092,anotherhost:9092");
        kafkaConfig.put("key.deserializer", StringDeserializer.class);
        kafkaConfig.put("value.deserializer", StringDeserializer.class);
        kafkaConfig.put("group.id", "spark-test");
        kafkaConfig.put("auto.offset.reset", "latest");
        kafkaConfig.put("enable.auto.commit", true);
        // 需要消费的topic
        List<String> topics = Arrays.asList("test-topic");
        // 方便调试与查看输出,本例使用的是local模式,生产环境请不要使用。
        SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("stream-test")
        // 这个地方说明下Durations.seconds(5)表示隔5秒钟处理一次
        JavaStreamingContext sparkContext = new JavaStreamingContext(conf,Durations.seconds(5));
        JavaInputDStream<ConsumerRecord<String, String>> dStream =
          KafkaUtils.createDirectStream(
            streamingContext,
            LocationStrategies.PreferConsistent(),
            ConsumerStrategies.<String, String>Subscribe(topics, kafkaConfig)
          );
        // 转换成java键值对
        JavaPairDStream<String,String> pairStream = dStream.mapToPair(record -> new Tuple2<>(record.key(), record.value()));
        // 统计并打印(本地调试用)
        pairStream.count().print();
        //启用
        sparkContext.start();
        //本地调试,为避免主线程死亡加一个while循环
        while(true){
            try{
                TimeUnit.SECONS.sleep(1);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

本地运行后,使用浏览器进入地址:localhost:4040,可查看运行状态,见下图。

 

《完》

你学会了吗?赶紧动手试试吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追风落叶乔木生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值