flume-->kafka-->spark-->hdfs-->sqoop
1、flume与kafka如何整合?
agent: source:exec , spooldir, avro
channel :memory
sink:org.apache.flume.sink.kafka.KafkaSink
2 、kafka与spark如何整合?
kafkaStreaming与kafka的整合,Spark提供了一个工具类KafkaUtils,工具包里面提供了2中整合方案
(1):KafkaUtils.createDstream:这种方案使用了receiver接收器来接收数据,所有receiver接收到的数据默认保存在spark 的executor中,然后使用sparkStreaming处理这些数据,默认会丢失数据,可以开启wal日志,将接收到的数据保存
在分布式文件系统中,但是这种方案因为涉及zk管理偏移量,如果数据写入spark但是zk来不及修改偏移量的话就会 造成重复消费的问题。
(2): KafkaUtils.createDirectStream:它定期从kafka的topic下对应的partition中查询最新偏移量,在根据偏移量在batch里 面处理数据,没有总zk管理偏移量。
3、 flume与spark如何整合?
spark提供了一个jar包,spark-streaming-flume.jar
(1)poll方式(推荐使用):flume将收集到的数据发送到整合包的sparksink中,并指定下沉的服务器ip和端口号,由spark 用这个服务器ip和端口号进行接收处理
(2)push方式:由flume将消息直接推动到spark服务所在的机器上,spark接收本机器上的消息并消费。
--kafka篇
1、kafka是什么?
消息队列,主要作用是解耦,异步,并行,传统消息队列(MQ)是基于发布和订阅模式,而kafka是基于推送和拉去
2、Kafka有什么组件,作用分别是什么?
--product:生产者,往topic中生产数据
--consumer:消费者,从topic中消费数据
--broker:kafka的服务器
--zookeeper:kafka依赖zk保存一些topic以及partition信息
--topic:一类消息的抽象集合,一个topic下面由多个partition组成
--segement:包含两个文件,.log文件 .index文件
--.log文件:记录数据
--.index文件:记录log文件索引
--offset:消息偏移量
3、如何创建一个topic
bin/kafka-topic.sh --create --topic XX --分区(数量) --备份(几个) --zookeeper集群地址
理解一下分区:就是将topic中的数据劈成几份,加入topic中有2条数据,分区之后每个分区只有一条数据
理解一下备份:一个分区的数据万一丢失,数据就无效了,所以将数据备份在不同的服务器上,实现高可用。
4、kafka中读出来的数据为什么是无序的?
1个topic有p1和p2两个分区,消费的时候,消费者会轮询读取p1一些,再读取p2一些,这样就造成读出来的两个文件是交错的。
5、kafka如何做到数据读写顺序一致性的?
如果是多个分区的话,分区内部是有序的,整体是无序的,如果是一个分区的话整体就是有序的。
6、kafka为什么快? Kafka为什么能做大吞吐量?
(1)kafka数据是顺序读写
(2)kafka是页缓存,先将数据写入内存,再开8个线程将数据写入硬盘。
7、 kafuka的分区策略有几种分别是什么?
四种(1)给定分区号,按分区号来,(2)没有分区号,给定key值,按照key计算hash值确定其中一个机器进行分区,(3)既没有分区号,也没有key值,轮询分区 (4)自定义分区,继承partitioner
8、kafka消费者负载均衡策略?
--如果线程比分区数量多,有空闲线程
--如果线程与分区数相等,刚好一个线程消费一个分区
--如果线程数比分区数少,有一些线程将要在多个分区消费数据
9、 kafka文件存储的基本结构?
同一个topic下有多个不同的partition(分区),每个partition为一个目录,partition的命名规则为topic名称+有序序号,第一个partition序号从0开始,序号最大值为partition数量-1。一个partition由多个Segment file组成:每个segment由.log 和.index文件 组成。kafka解决查询效率的手段是文件分段,比如有100条Message,它们的offset是从0到99。假设将数据文件分成5段,第一段为0-19,第二段为20-39,以此类推。所以segment就是每个partition分段的结果。
10、kafka中的消费者如何消费数据?
同一时刻,一个partition中的消息只能会被group中的一个consumer的一个线程消费,消费后会修改offeset偏移量。
11、kafka如何做到数据的不丢失和不重复?
(1)product层ACK机制,只有跟broken中的leader和follow都确认后,才认为生产者上传成功
(2)broker层副本机制
(3) consumer层:offset偏移量,确保不重复读取
12、kafka宕机之后如何保证数据的一致性?
kafka集群受zookeeper管理,所有的kafka broker都去zk注册节点,但是只有1个会注册成功,所以这个成功注册的kafka broker就是kafka集群中的controller(老大),其他broker就是follow这个注册的过程叫broker在zk上注册watch。如果此时kafka集群的controller宕机了,这时在zk上的注册点就消失了,此时集群中其他broker又会去zk上注册,zk会选举一个做为新的controller管理
集群,此时新的controller就会在zk上读取宕机的哪台机器上所有partition(分区)信息。
--spark篇
1、spark为什么比mapreduce快?
(1)spark 将job阶段的输出结果直接放内存中了,减少了大量IO操作,利于迭代计算
(2)mapreduce中每一个task是以进程的方式运行,而在spark中将task以线程的方式运行
2、spark有哪些组件,作用?
--Driver :它运行main方法,生成sparkContext对象,是运行spark的入口
--Application:计算任务的应用程序,里面包括运行的代码和运行所需要的资源(cpu,内存等)
--Cluster Manager:获取外部资源的服务
--standAlone:spark自带的集群模式,由master分配资源
--yarn:resouceManager负责分配任务
--mesos:Apache提供的
--master:spark集群中的老大,负责资源分配
--worker:主要负责运行spark任务的
--executor:一个进行,里面可以运行多个task
--Task:线程,每一个Task默认对应hdfs上一个block块128M
3、说一下spark的底层原理?
RDD是spark的数据抽象,RDD叫弹性分布式数据集,他具有几个特征
--一个RDD里面是一个分区列表
--一个RDD函数作用于分区列表的所有数据
--RDD与RDD之间存在依赖关系
4、什么是DAG?
有向无环图,RDD经过一些列转换就形成DAG,,根据RDD之间的依赖关系,根据宽依赖,将RDD分配到不同的Stage里面,宽依赖只有父RDD处理完才能处理子依赖,所以宽依赖是划分stage的依据
5、spark的是如何任务调度的?