Spark综合学习笔记(十三)SparkStreaming整合Kafka-连接方式和API版本

52 篇文章 2 订阅
9 篇文章 1 订阅

学习致谢;

https://www.bilibili.com/video/BV1Xz4y1m7cv?p=48

介绍

在实际项目中,无论使用Storm还是SparkStreaming与Flink,主要从Kafka实时消费数据进行处理分析,流式数据实时处理技术架构大致如下:
在这里插入图片描述

SparkStreaming+Kafka流程

流式数据----->(Flume)----->Kafka------>SparkStreaming/StructStreaming/Flink------>Redis/Hbase/HDFS/Mysql

Kafka快速回顾

Kafka架构图
在这里插入图片描述
Kafka中一些重要的概念:

1 ) Producer:消息生产者,向Kafka Broker 发消息的客户端;
2) Consumer:消息消费者,从 Kafka
Broker 取消息的客户端;
3)Consumer Group:消费者组(CG),消费者组内每个消费者负责消费不同分区的数据,提高消费能力。一个分区只能由组内一个消费者消费,消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者;
4) Broker:一台Kafka机器就是一个Broker。一个集群由多个Broker组成。一个Broker可以容纳多个Topic;
5)Topic:可以理解为一个队列,Topic将消息分类,生产者和消费者面向的是同一个Topic;
6) Partition:为了实现扩展性,提高并发能力,一个非常大的Topic 可以分布到多个Broker(即服务器)上,一个Topic可以分为多个Partition,每个Partition是一个有序的队列;
7) Replica:副本,为实现备份的功能,保证集群中的某个节点发生故障时,该节点上的Partition数据不丢失,且Kafka仍然能够继续工作,Kafka提供了副本机制,一个Topic的每个分区都有若干个副本,一个Leader和若干个Follower;

Kafka命令

#启动kafka
/export/server/kafka/bin/kafka-server-start.sh -daemon 
/export/server/kafka/config/server.properties
#停止kafka
/export/server/kafka/bin/kafka-server-stop.sh#查看topic信息
/export/server/kafka/bin/kafka-topics.sh --list --zookeeper node1:2181
#创建topic
/export/server/kafka/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1--partitions 3 --topic test#查看某个topic信息
/export/server/kafka/bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic test
#删除topic
/export/server/kafka/bin/kafka-topics.sh --zookeeper node1:2181 --delete --topic test
#启动生产者--控制台的生产者-一般用于测试
/export/server/kafka/bin/kafka-console-producer.sh --broker-list node1:9092 --topic spark_kafka#启动消费者--控制台的消费者
/export/server/kafka/bin/kafka-console-consumersh --bootstrap-server node1:9092 --topic spark_kafka --from-beginning

整合说明

两种方式
(1)· Receiver-based Approach:

1.KafkaUtils.createDstream基于接收器方式,消费Kafka数据,已淘汰,企业中不再使用;
2.Receiver作为常驻的Task运行在Executor等待数据,但是一个Receiver效率低,需要开启多个,再手动合并数据(union),再进行处理,很麻烦;
3.Receiver那台机器挂了,可能会丢失数据,所以需要开启WAL(预写日志)保证数据安全,那么效率又会降低;
4.Receiver方式是通过zookeeper来连接kafka队列,调用Kafka高阶APl,offset存储在zookeeper,由Receiver维护;
5.Spark在消费的时候为了保证数据不丢也会在Checkpoint中存一份offset,可能会出现数据不一致;

(2)· Direct Approach (No Receivers):

1.KafkaUtils.createDirectStream直连方式,Streaming中每批次的每个job直接调用Simple Consumer API获取对应Topic数据,此种方式使用最多,面试时被问的最多;
2.Direct方式是直接连接kafka分区来获取数据,从每个分区直接读取数据大大提高并行能力
3.Direct方式调用Kafka低阶API(底层API),offset自己存储和维护,默认由Spark维护在checkpoint中,消除了与zk不一致的情况
4.当然也可以自己手动维护,把offset存在MySQL/Redis中;

在这里插入图片描述
两种API
Spark Streaming与Kafka集成,有两套API,原因在于Kafka Consumer API有两套,文档:http:/lspark.apache.org/docs/2.4.5/streaming-kafka-integration.html
http://spark.apache.org/docs/latest/streaming-kafka-integration.html
- Kafka 0.8.x版本-早已淘汰
底层使用老的KafkaAPI:Old Kafka Consumer AP
l支持Receiver(已淘汰)和Direct模式:
·Kafka 0.10.x版本-开发中使用
底层使用新的KafkaAPI: New Kafka Consumer APl
只支持Direct模式
在这里插入图片描述

总结

开发中都是直接使用spark-Streaming-kafka-0.10版本APlI中的Direct模式来连接Kafka!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值