kafka整合Streaming,胖包,操作Zookeeper

测试kafka正常工作

[hadoop@hadoop000 kafka]$ bin/kafka-topics.sh \
> --create \
> --zookeeper 192.168.137.190:2181,192.168.137.190:2182,192.168.137.190:2183/kafka \
> --replication-factor 1 --partitions 1 --topic ruozeg5sparkkafka

[hadoop@hadoop000 kafka]$ bin/kafka-console-producer.sh \
> --broker-list 192.168.137.190:9092,192.168.137.190:9093,192.168.137.190:9094 \> --topic ruozeg5sparkkafka

[hadoop@hadoop000 kafka]$ bin/kafka-console-consumer.sh \
> --zookeeper 192.168.137.190:2181,192.168.137.190:2182,192.168.137.190:2183/kafka \
> --topic ruozeg5sparkkafka --from-beginning

streaming整合kafka idea

有两种方式写的方式,一种是receiver的,一种是没有receiver的

receiver要0.8之前才行
在这里插入图片描述
添加dependency

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

receiver的代码

package com.ruozedata.bigdata.streaming04

import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}

object ReceiverKafkaApp {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[2]").setAppName("ReceiverKafkaApp")
    val ssc = new StreamingContext(conf,Seconds(10))

    val topic ="ruozeg5sparkkafka"
    //注意kafka分区和partition分区无关
    val numPartitions=1

    val zkQuorum="192.168.137.190:2181,192.168.137.190:2182,192.168.137.190:2183/kafka"
    var groupId="test_g5"
    //元祖转map
    val topics =topic.split(",").map((_,numPartitions)).toMap

    //返回个receiver,带有kafka keyvalue的DStream
    val messages = KafkaUtils.createStream(ssc,zkQuorum,groupId,topics)

    //第一列是null
    messages.map(_._2)
      .flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).print()

    ssc.start()
    ssc.awaitTermination()
  }
}

receive方式注意的点

在这里插入图片描述
1.在Receiver的方式中,Spark中的partition和kafka中的partition并不是相关的,所以如果我们加大每个topic的partition数量,仅仅是增加线程来处理由单一Receiver消费的主题。但是这并没有增加Spark在处理数据上的并行度。
2.对于不同的Group和topic我们可以使用多个Receiver创建不同的Dstream来并行接收数据,之后可以利用union来统一成一个Dstream。
3.如果我们启用了Write Ahead Logs复制到文件系统如HDFS,那么storage level需要设置成 StorageLevel.MEMORY_AND_DISK_SER,也就是KafkaUtils.createStream(…, StorageLevel.MEMORY_AND_DISK_SER),因为hdfs自动会有3个副本,不需要这里再设置副本。

打包上传,胖包瘦包

胖包:打包的时候就把依赖打进去
瘦包:不把依赖打进去

正常打包不带依赖,脚本比较麻烦

[hadoop@hadoop000 data]$ cat kafka_receiver.sh 
$SPARK_HOME/bin/spark-submit \
--master local[2] \
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值