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. Go语言版本的helloworld

    新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ...

  2. JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

  3. Python基础、判断、循环、列表、字典,day1

    一.Python 简介 1.介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标 ...

  4. Django框架之模板基础,静态文件配置

    一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件,2.把要显示的页面的内容写在这里 ...

  5. Windows换行符问题

    MAC 和 Windows的换行符不一样,导致有些情况下,MAC编辑的多行文本,在windows的TXT中只是一行. 使用nodepad++可以正确识别出换行符,而且可以将其转为Windows格式,使 ...

  6. 杭电1025Constructing Roads In JGShining's Kingdom

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1025 题目: Problem Description JGShining's kingdom consis ...

  7. Jconsle

    1. jconsole 远程连接: JConsole很好用,可以解决很多疑难杂症.但远程连接需要设置一下Java opt才可以使用.以下是步骤: 1). 在java opt下添加如下内容: 如果是无须 ...

  8. Java基础_基本语法

    Java基本语法 一:关键字 在Java中有特殊含义的单词(50). 二:标志符 类名,函数名,变量名的名字的统称. 命名规则: 可以是字母,数字,下划线,$. 不能以数字开头. 见名之意. 驼峰规则 ...

  9. Cookie应用参考

    内容来自imooc.

  10. clipbrd剪切板查看器

    本文,我们来学习一下简单的概念,即,如何查看系统剪贴版里面有什么内容?   如果要想看.或者验证系统剪贴版里面都有什么内容,最为简单的方法就是通过"粘贴"的操作来验证!   但是, ...