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作为数据源的生产和消费的更多相关文章

  1. kafka创建topic,生产和消费指定topic消息

    启动zookeeper和Kafka之后,进入kafka目录(安装/启动kafka参考前面一章:https://www.cnblogs.com/cici20166/p/9425613.html) 1.创 ...

  2. c语言使用librdkafka库实现kafka的生产和消费实例(转)

    关于librdkafka库的介绍,可以参考kafka的c/c++高性能客户端librdkafka简介,本文使用librdkafka库来进行kafka的简单的生产.消费 一.producer librd ...

  3. Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控

    基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控   By: 授客 QQ:1033553122   1.测试环境 python 3.4 zookeeper- ...

  4. 【SparkStreaming学习之四】 SparkStreaming+kafka管理消费offset

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  5. Kafka 使用Java实现数据的生产和消费demo

    前言 在上一篇中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka .不过在使用kafka的时候,还是应该简单的了解下kafka. Kafka的介绍 Kafka是一种高吞吐量的分布式发布 ...

  6. c# .net 使用Confluent.Kafka针对kafka进行生产和消费

    首先说明一点,像Confluent.Kafka这种开源的组件,三天两头的更新.在搜索引擎搜索到的结果往往用不了,浪费时间.建议以后遇到类似的情况直接看官网给的Demo. 因为搜索引擎搜到的文章,作者基 ...

  7. 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式

    一.前述 SparkStreamin是流式问题的解决的代表,一般结合kafka使用,所以本文着重讲解sparkStreaming+kafka两种模式. 二.具体 1.Receiver模式    原理图 ...

  8. SparkStreaming+Kafka 处理实时WIFI数据

    业务背景 技术选型 Kafka Producer SparkStreaming 接收Kafka数据流 基于Receiver接收数据 直连方式读取kafka数据 Direct连接示例 使用Zookeep ...

  9. kafka集群的错误处理--kafka一个节点挂了,导致消费失败

    今天由于kafka集群搭建时的配置不当,由于一台主消费者挂掉(服务器崩了,需要维修),导致了所有新版消费者(新版的offset存储在kafka)都无法拉取消息. 由于是线上问题,所以是绝对不能影响用户 ...

随机推荐

  1. Lua(1)

    1.the use of functions in table fields is a key ingredient for some advanced uses of Lua, such as mo ...

  2. for迭代序列的三种方式

    while循环是条件性的,for循环是迭代性的. for循环会访问所有迭代对象中的所有元素,并在所有条目都结束后结束循环. for循环迭代序列有三种基本的方式,分别是通过序列项迭代.通过索引迭代.通过 ...

  3. 本地连不上远程mysql数据库(2)

    Host is not allowed to connect to this MySQL server解决方法 今天在ubuntu上面装完MySQL,却发现在本地登录可以,但是远程登录却报错Host ...

  4. AOP-面向方面编程

    面向方面编程(aspect-oriented programming,AOP)是一种编程范式,旨在提高模块化允许横向关注点的分离.该范式以一种成为方面(Aspect)的语言构造为基础,切面是一种新的模 ...

  5. 从零到一创建ionic移动app:基础开发环境搭建

    myAPP项目是在Ubuntu14.04下创建   本项目开发node 4.5/cordova 6/ionic 2   第一步 安装nodejs npm install -g n n v4.5.0 使 ...

  6. Ubuntu更新Hostname和hosts

    一.概述 Hostname 即主机名,一般存放在 /etc/hostname 中.hosts 即本地域名解析文件,存放在 /etc/hosts 中. 二.测试 2.1 hostname 2.2 hos ...

  7. hadoop nn 运维一例

    nn1 崩溃之后,nn2变为active,但是nn1日志中有异常,处于standby状态的,无法响应读的操作 最后查出原因是因为fensing的问题.

  8. addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法

    也许很多同仁一听到事件监听,第一想到的就是原生js的 addEventListener()事件,的确如此,当然如果只是适用于现代浏览器(IE9.10.11 | ff, chorme, safari, ...

  9. Authentication token is no longer valid

    Linux: Authentication token is no longer valid Problem: Authentication token is no longer valid; new ...

  10. linux中的信号简介和trap命令

    1.信号 linux通过信号来在运行在系统上的进程之间通信,也可以通过信号来控制shell脚本的运行 主要有一下信号 1 ##进程重新加载配置 2 ##删除进程在内存中的数据 3 ##删除鼠标在内存中 ...