大数据实时面试题--未完整版

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的是如何任务调度的?

猜你喜欢

转载自blog.csdn.net/weixin_42333583/article/details/84110125