【sparkStreaming】kafka作为数据源的生产和消费
1.建立生产者发送数据
(1)配置zookeeper属性信息props
(2)通过 new KafkaProducer[KeyType,ValueType](props) 建立producer
(3)通过 new ProducerRecord[KeyType,ValueType](topic,key,value) 封装消息message
(4)通过 producer.send(message) 发送消息
package SparkDemo import java.util
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig, ProducerRecord}
object KafkaProducer {
def main(args:Array[String]): Unit ={
if(args.length<4){
//参数
//<metadataBrokerList> broker地址
//<topic> topic名称
//<messagesPerSec> 每秒产生的消息
//<wordsPerMessage> 每条消息包括的单词数
System.err.println("Usage:KafkaProducer <metadataBrokerList> <topic> <messagesPerSec> <wordsPerMessage>")
System.exit(1)
}
val Array(brokers,topic,messagesPerSec,wordsPerMessage) = args
//zookeeper连接属性
val props = new util.HashMap[String,Object]();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,brokers)
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer")
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer")
//通过zookeeper建立kafka的producer
val producer = new KafkaProducer[String,String](props)
//通过producer发送一些消息
while(true){
(1 to messagesPerSec.toInt).foreach{//遍历[1, messagesPerSec.toInt]
messageNum =>
val str = (1 to wordsPerMessage.toInt).map(
x => scala.util.Random.nextInt(10).toString
).mkString(" ")//连成字符串用空格隔开
println(str)
//注意,我们这里发送的消息都是以键值对的形式发送的
//需要把消息内容和topic封装到ProducerRecord中再发送
//我们这里的topic为外部的传参,消息的键值对为<null,str>
val message = new ProducerRecord[String,String](topic,null,str)
//发送消息
producer.send(message)
}
Thread.sleep(1000)//休眠一秒钟
}
}
}
我们把程序打包好,提交到spark集群中执行

最后四个为我们要传入的程序参数
我们定义在localhost:9092的名字为wordsender的topic会以每秒3条,每条5个单词往外发送数据
2.建立消费者消费数据
(1)建立sparkStream ssc
(2)配置zookeeper地址 zkQuorum
(3)设置topic所在组名 group
(4)将topic配置成 Map<topicName,numThreads> 的 topicMap<topic名称,所需线程数> 的形式
(5)通过 KafkaUtils.createStream(ssc,zkQuorum,group,topicMap) 建立sparkStream-kafka的流通道
(6)sparkStream处理
package SparkDemo import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext} object KafkaConsumer {
def main(args:Array[String]): Unit ={
//设置日志等级
StreamingLoggingExample.setStreamingLogLevels()
//建立spark流
val conf = new SparkConf().setAppName("KafkaConsumerDemo").setMaster("local")
val ssc = new StreamingContext(conf,Seconds(10))
//设置检查点
ssc.checkpoint("file:/// or hdfs:///")
//zookeeper
val zkQuorum = "localhost:2181" //zookeeper服务器地址
//topic所发放的组名
val group = "1" //topic 所在的组名,可以设置为任意名字
//topic配置
val topics = "wordsender" //topic 名称,可以为多个topic,多个之间用逗号隔开 “topic1,topic2”
//建立topicMap<topicName,numThreads.toInt> key为topic名称,value为所需要的线程数
val topicMap = topics.split(",").map((_,1)).toMap //numThreads.toInt为所需线程数
//建立spark流
val lineMap = KafkaUtils.createStream(ssc,zkQuorum,group,topicMap)
//处理spark流
val lines = lineMap.map(_._2)//上面传过来的数据为<null,string>,我们去后边的value
val pair = lines.flatMap(_.split(" ")).map((_,1))
val wordCount = pair.reduceByKey(_+_)
wordCount.print
//启动spark流
ssc.start()
ssc.awaitTermination()
} }
然后我们将程序打包提交到集群上运行,就可以对上面我们建立的kafka生产的消息进行消费了。
【sparkStreaming】kafka作为数据源的生产和消费的更多相关文章
- kafka创建topic,生产和消费指定topic消息
启动zookeeper和Kafka之后,进入kafka目录(安装/启动kafka参考前面一章:https://www.cnblogs.com/cici20166/p/9425613.html) 1.创 ...
- c语言使用librdkafka库实现kafka的生产和消费实例(转)
关于librdkafka库的介绍,可以参考kafka的c/c++高性能客户端librdkafka简介,本文使用librdkafka库来进行kafka的简单的生产.消费 一.producer librd ...
- Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控
基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- 【SparkStreaming学习之四】 SparkStreaming+kafka管理消费offset
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- Kafka 使用Java实现数据的生产和消费demo
前言 在上一篇中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka .不过在使用kafka的时候,还是应该简单的了解下kafka. Kafka的介绍 Kafka是一种高吞吐量的分布式发布 ...
- c# .net 使用Confluent.Kafka针对kafka进行生产和消费
首先说明一点,像Confluent.Kafka这种开源的组件,三天两头的更新.在搜索引擎搜索到的结果往往用不了,浪费时间.建议以后遇到类似的情况直接看官网给的Demo. 因为搜索引擎搜到的文章,作者基 ...
- 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式
一.前述 SparkStreamin是流式问题的解决的代表,一般结合kafka使用,所以本文着重讲解sparkStreaming+kafka两种模式. 二.具体 1.Receiver模式 原理图 ...
- SparkStreaming+Kafka 处理实时WIFI数据
业务背景 技术选型 Kafka Producer SparkStreaming 接收Kafka数据流 基于Receiver接收数据 直连方式读取kafka数据 Direct连接示例 使用Zookeep ...
- kafka集群的错误处理--kafka一个节点挂了,导致消费失败
今天由于kafka集群搭建时的配置不当,由于一台主消费者挂掉(服务器崩了,需要维修),导致了所有新版消费者(新版的offset存储在kafka)都无法拉取消息. 由于是线上问题,所以是绝对不能影响用户 ...
随机推荐
- Go语言版本的helloworld
新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...
- Python基础、判断、循环、列表、字典,day1
一.Python 简介 1.介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标 ...
- Django框架之模板基础,静态文件配置
一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件,2.把要显示的页面的内容写在这里 ...
- Windows换行符问题
MAC 和 Windows的换行符不一样,导致有些情况下,MAC编辑的多行文本,在windows的TXT中只是一行. 使用nodepad++可以正确识别出换行符,而且可以将其转为Windows格式,使 ...
- 杭电1025Constructing Roads In JGShining's Kingdom
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1025 题目: Problem Description JGShining's kingdom consis ...
- Jconsle
1. jconsole 远程连接: JConsole很好用,可以解决很多疑难杂症.但远程连接需要设置一下Java opt才可以使用.以下是步骤: 1). 在java opt下添加如下内容: 如果是无须 ...
- Java基础_基本语法
Java基本语法 一:关键字 在Java中有特殊含义的单词(50). 二:标志符 类名,函数名,变量名的名字的统称. 命名规则: 可以是字母,数字,下划线,$. 不能以数字开头. 见名之意. 驼峰规则 ...
- Cookie应用参考
内容来自imooc.
- clipbrd剪切板查看器
本文,我们来学习一下简单的概念,即,如何查看系统剪贴版里面有什么内容? 如果要想看.或者验证系统剪贴版里面都有什么内容,最为简单的方法就是通过"粘贴"的操作来验证! 但是, ...