SparkStreaming 整合kafka Demo
这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示
你得有zookeeper和kafka
我这里是3台节点主机
架构图

与高级API的区别,简单并行(不需要创造多个输入流,它会自动并行读取kafka的数据),高效(不会像receiver数据被copy两次),一次性语义(缺点:无法使用zookeeper的监控工具)
1.创建maven工程
首先添加pom依赖,其它运行依赖请参考 sparkStreaming整合WordCount
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
<version>2.0.2</version>
</dependency>
2.启动zookeeper集群
我把zookeeper集群弄成了个脚本,直接执行脚本启动所有zookeeper

启动成功
3.启动kafka集群
我这里是3台主机,三台都需要
进入目录
cd /export/servers/kafka/bin/
启动
kafka-server-start.sh -daemon /export/servers/kafka/config/server.properties

成功
4.测试kafka
创建topic
cd /export/servers/kafka_2.11-0.10.2.1
bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 1 --partitions 1 --topic kafka_spark
通过生产者发送消息
cd /export/servers/kafka_2.11-0.10.2.1
bin/kafka-console-producer.sh --broker-list node01:9092 --topic kafka_spark
想发啥,发啥。此时通过创建AP接收生产者发送的数据

编写代码
package SparkStreaming import kafka.serializer.StringDecoder
import org.apache.spark.streaming.dstream.{DStream, InputDStream}
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext} object SparkStreamingKafka {
def main(args: Array[String]): Unit = {
// 1.创建SparkConf对象
val conf: SparkConf = new SparkConf()
.setAppName("SparkStreamingKafka_Direct")
.setMaster("local[2]") // 2.创建SparkContext对象
val sc: SparkContext = new SparkContext(conf)
sc.setLogLevel("WARN") // 3.创建StreamingContext对象
/**
* 参数说明:
* 参数一:SparkContext对象
* 参数二:每个批次的间隔时间
*/
val ssc: StreamingContext = new StreamingContext(sc,Seconds(5))
//设置checkpoint目录 ssc.checkpoint("./Kafka_Direct") // 4.通过KafkaUtils.createDirectStream对接kafka(采用是kafka低级api偏移量不受zk管理)
// 4.1.配置kafka相关参数
val kafkaParams=Map("metadata.broker.list"->"192.168.52.110:9092,192.168.52.120:9092,192.168.52.130:9092","group.id"->"kafka_Direct")
// 4.2.定义topic
val topics=Set("kafka_spark") val dstream: InputDStream[(String, String)] = KafkaUtils
.createDirectStream[String,String,StringDecoder,StringDecoder](ssc,kafkaParams,topics) // 5.获取topic中的数据
val topicData: DStream[String] = dstream.map(_._2) // 6.切分每一行,每个单词计为1
val wordAndOne: DStream[(String, Int)] = topicData.flatMap(_.split(" ")).map((_,1)) // 7.相同单词出现的次数累加
val resultDS: DStream[(String, Int)] = wordAndOne.reduceByKey(_+_) // 8.通过Output Operations操作打印数据
resultDS.print() // 9.开启流式计算
ssc.start() // 阻塞一直运行
ssc.awaitTermination() }
}
生产者生产数据

API接收控制台打印计算结果

SparkStreaming 整合kafka Demo的更多相关文章
- 基于Java+SparkStreaming整合kafka编程
		一.下载依赖jar包 具体可以参考:SparkStreaming整合kafka编程 二.创建Java工程 太简单,略. 三.实际例子 spark的安装包里面有好多例子,具体路径:spark-2.1.1 ... 
- 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)
		1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ... 
- SparkStreaming整合kafka编程
		1.下载spark-streaming-kafka插件包 由于Linux集群环境我使用spark是spark-2.1.1-bin-hadoop2.7,kafka是kafka_2.11-0.8.2.1, ... 
- scala  spark-streaming整合kafka (spark 2.3 kafka 0.10)
		Maven组件如下: ) { System.err.println() } StreamingExamples.setStreamingLogLevels() )) ) { System.) } )) ... 
- 大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计
		1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [root@mini3 kafka]# bin/kafka-console-producer. -- ... 
- Spark之   Spark Streaming整合kafka(并演示reduceByKeyAndWindow、updateStateByKey算子使用)
		Kafka0.8版本基于receiver接受器去接受kafka topic中的数据(并演示reduceByKeyAndWindow的使用) 依赖 <dependency> <grou ... 
- 【Spark】SparkStreaming和Kafka的整合
		文章目录 Streaming和Kafka整合 概述 使用0.8版本下Receiver DStream接收数据进行消费 步骤 一.启动Kafka集群 二.创建maven工程,导入jar包 三.创建一个k ... 
- 图解SparkStreaming与Kafka的整合,这些细节大家要注意!
		前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ... 
- SparkStreaming和Kafka基于Direct Approach如何管理offset实现exactly once
		在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ... 
随机推荐
- 四步解决linux上sublime无法输入中文的问题
			转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ... 
- ES6-扩展运算符和rest运算符
			es6-扩展运算符和rest运算符 扩展运算符:不确定他的参数个数时使用运算扩展符 // 声明一个方法 但不确定他的参数个数时使用对象运算扩展符 function ananiha(...arg){ c ... 
- angluarjs实现过滤并替换关键字
			html样式 <body ng-app="myapp" ng-controller="myCtrl"> <input type="t ... 
- Spring Boot 2 + jpa + mysql例子
			Spring Data框架为数据访问提供了一个通用的模型,无论访问哪种数据库,都可以使用同样的方式,主要有以下几个功能:(1)提供数据与对象映射的抽象层,同一个对象,可以被映射为不同数据库的数据:(2 ... 
- 微信小程序API交互反馈,wx.showToast显示消息提示框
			导读:wx.showToast(OBJECT) 显示消息提示框. OBJECT参数说明: 参数 类型 必填 说明 最低版本 title String 是 提示的内容 icon String 否 图标, ... 
- PyCharm将选中的内容加上引号
			正常情况下,选中一段内容,再按引号,内容会被替换为引号 想要将选中的内容不被替换为引号,而在内容的两端加上引号,只需设置一下即可 File --> Settings --> Edi ... 
- docker上启动nginx,并配置修改nginx的配置文件
			1.使用docker 下载nginx 镜像 docker pull nginx 2.启动nginx docker run --name nginx -p 80:80 -d nginx 这样就简单的把 ... 
- Docker组成三要素
			目录 镜像 容器 仓库 总结 Docker的基本组成三要素 镜像 容器 仓库 镜像 Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器. ... 
- java8-14-时间API
			原来的时间类 1.默认值 我们使用起来不方便 2.在不同包 不规范 在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义 3.可变 线程 ... 
- RabbitMQ学习笔记(七、RabbitMQ实战)
			目录: 削峰 分布式事务 削峰: 利用RabbitMQ队列消费特性避免峰值下的DB访问,缓解连接压力,在DB释放连接后再去消息数据. 分布式事务: )XA协议:它是一个分布式事务协议,由事务管理器和资 ... 
