[Spark、hadoop]Spark Streaming整合kafka实战

17 篇文章 0 订阅
17 篇文章 0 订阅

目录

一.KafkaUtils.createDstream方式

二.KafkaUtils.createDirectStream方式


9633f3bb7c3643d0a6989e51c0470ac6.gif#pic_center

 温习

Kafka是由Apache软件基金会开发的一个开源流处理平台,它使用Scala和Java语言编写,是一个基于Zookeeper系统的分布式发布订阅消息系统,该项目的设计初衷是为实时数据提供一个统一、高通量、低等待的消息传递平台。

①、Kafka的众多优点:其优点具体:

(1)解耦。Kafka 具备消息系统的优点,只要生产者和消费者数据两端遵循接口约束,就可以自行扩展或修改数据处理的业务过程。

(2)高吞吐量、低延迟。即使在非常廉价的机器上,Kafka也能做到每秒处理几十万条消息,而它的延迟最低只有几毫秒。

(3)持久性。Kafka 可以将消息直接持久化在普通磁盘上,且磁盘读写性能优异。

(4)扩展性。Kafka 集群支持热扩展,Kafka集群启动运行后,用户可以直接向集群添加新的Kafka服务。

(5)容错性。Kafka 会将数据备份到多台服务器节点中,即使Kafka集群中的某台节点宕机,也不会影响整个系统的功能。

(6)支持多种客户端语言。Kafka 支持Java.. NET .PHP、Python等多种语言。

Kafka使用消费组(Consumer Group)的概念统了点对点消息传递模式和发布订阅消息传递模式,当Kafka使用点对点模式时,它可以将待处理的工作任务平均分配给消费组。
 

一.KafkaUtils.createDstream方式

1.编写SparkStreaming_Kafka_createDstream.scala

2.切到master节点上创建topic,指定消息的类别

Cd /opt/module/kafka
bin/kafka-topics.sh --create --topic kafka_spark --partitions 3 --replication-factor 1 --zookeeper master:2181,slave1:2181,slave2:2181

3.先运行程序,启动kafka的消息生产者

[hadoop@master kafka]$ bin/kafka-console-producer.sh --broker-list master:9092 --topic kafka_spark

4.在master节点发送消息,可以看到控制台输出内容

kafka itcast itcast spark_kafka spark_kafka

二.KafkaUtils.createDirectStream方式

1.编写SparkStreaming_Kafka_createDirectStream.scala并运行程序

2.创建topic,发送消息

[hadoop@master kafka]$ bin/kafka-topics.sh --create --topic kafka_direct0 --partitions 3 --replication-factor 1 --zookeeper master:2181,slave1:2181,slave2:2181

3.启动kafka的消费生产者

[hadoop@master kafka]$ bin/kafka-console-producer.sh --broker-list master:9092 --topic kafka_direct0

4.在master节点发送消息,可以看到控制台输出内容

  • 63
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 86
    评论
Spark Streaming可以很方便地读取Kafka中的数据,并将其写入到HBase中。这里是一些基本的步骤: 1. 首先,你需要在你的Spark Streaming项目中添加Kafka和HBase的依赖。 2. 创建一个Spark StreamingStreamingContext对象,并设置批处理间隔。 3. 创建一个Kafka输入流,指定Kafka的相关参数,如Kafka集群地址、消费者组、Topic等。 4. 从输入流中获取数据,进行必要的转换和处理,然后将结果写入到HBase中。写入HBase可以使用HBase的Java API或者使用Spark对HBase的支持。 下面是一个简单的示例代码,假设你已经完成了步骤1和步骤2: ``` import org.apache.spark.streaming._ import org.apache.spark.streaming.kafka._ import org.apache.hadoop.hbase.client.{HBaseAdmin,HTable,Put} import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName} import org.apache.hadoop.hbase.util.Bytes val ssc = new StreamingContext(sparkConf, Seconds(5)) val kafkaParams = Map[String, String]("metadata.broker.list" -> "localhost:9092", "group.id" -> "test-consumer-group") val topicsSet = Set("test") val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet) messages.foreachRDD { rdd => rdd.foreach { msg => val hconf = HBaseConfiguration.create() val hTable = new HTable(hconf, "table_name") val put = new Put(Bytes.toBytes(msg._1)) put.add(Bytes.toBytes("cf"), Bytes.toBytes("col"), Bytes.toBytes(msg._2)) hTable.put(put) } } ssc.start() ssc.awaitTermination() ``` 这个示例中,我们使用了KafkaUtils.createDirectStream方法创建了一个Kafka输入流,然后使用foreachRDD方法对每个RDD进行处理。在处理过程中,我们创建了一个HBase表实例,并将数据写入到表中。这里只是一个简单的示例,实际上你需要根据你的数据格式和业务逻辑进行相应的处理和转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发量不足

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

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

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

打赏作者

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

抵扣说明:

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

余额充值