Kafka面试题!掌握它才说明你真正懂Kafka(附答案)

一、请说明什么是Apache Kafka?面试

Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和可复制的提交日志服务。数组

二、说说Kafka的使用场景?缓存

①异步处理服务器

②应用解耦网络

③流量削峰负载均衡

④日志处理异步

⑤消息通信等。分布式

三、使用Kafka有什么优势和缺点?性能

优势:fetch

①支持跨数据中心的消息复制;

②单机吞吐量:十万级,最大的优势,就是吞吐量高;

③topic数量都吞吐量的影响:topic从几十个到几百个的时候,吞吐量会大幅度降低。因此在同等机器下,kafka尽可能保证topic数量不要过多。若是要支撑大规模topic,须要增长更多的机器资源;

④时效性:ms级;

⑤可用性:很是高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会致使不可用;

⑥消息可靠性:通过参数优化配置,消息能够作到0丢失;

⑦功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用。

缺点:

①因为是批量发送,数据并不是真正的实时; 仅支持统一分区内消息有序,没法实现全局消息有序;

②有可能消息重复消费;

③依赖zookeeper进行元数据管理,等等。

四、为何说Kafka性能很好,体如今哪里?

①顺序读写

②零拷贝

③分区

④批量发送

⑤数据压缩

五、请说明什么是传统的消息传递方法?

传统的消息传递方法包括两种:

排队:在队列中,一组用户能够从服务器中读取消息,每条消息都发送给其中一我的。

发布-订阅:在这个模型中,消息被广播给全部的用户。

六、请说明Kafka相对传统技术有什么优点?

①快速:单一的Kafka代理能够处理成千上万的客户端,每秒处理数兆字节的读写操做。

②可伸缩:在一组机器上对数据进行分区

③和简化,以支持更大的数据

④持久:消息是持久性的,并在集群中进

⑤行复制,以防止数据丢失。

⑥设计:它提供了容错保证和持久性

七、解释Kafka的Zookeeper是什么?咱们能够在没有Zookeeper的状况下使用Kafka吗?

Zookeeper是一个开放源码的、高性能的协调服务,它用于Kafka的分布式应用。

不,不可能越过Zookeeper,直接联系Kafka broker。一旦Zookeeper中止工做,它就不能服务客户端请求。

Zookeeper主要用于在集群中不一样节点之间进行通讯

在Kafka中,它被用于提交偏移量,所以若是节点在任何状况下都失败了,它均可以从以前提交的偏移量中获取

除此以外,它还执行其余活动,如: leader检测、分布式同步、配置管理、识别新节点什么时候离开或链接、集群、节点实时状态等等。

八、解释Kafka的用户如何消费信息?

在Kafka中传递消息是经过使用sendfile API完成的。它支持将字节从套接口转移到磁盘,经过内核空间保存副本,并在内核用户之间调用内核。

九、解释如何提升远程用户的吞吐量?

若是用户位于与broker不一样的数据中心,则可能须要调优套接口缓冲区大小,以对长网络延迟进行摊销。

十、解释一下,在数据制做过程当中,你如何能从Kafka获得准确的信息?

在数据中,为了精确地得到Kafka的消息,你必须遵循两件事: 在数据消耗期间避免重复,在数据生产过程当中避免重复。

这里有两种方法,能够在数据生成时准确地得到一个语义:

每一个分区使用一个单独的写入器,每当你发现一个网络错误,检查该分区中的最后一条消息,以查看您的最后一次写入是否成功

在消息中包含一个主键(UUID或其余),并在用户中进行反复制

十一、解释如何减小ISR中的扰动?broker何时离开ISR?

ISR是一组与leaders彻底同步的消息副本,也就是说ISR中包含了全部提交的消息。ISR应该老是包含全部的副本,直到出现真正的故障。若是一个副本从leader中脱离出来,将会从ISR中删除。

十二、Kafka为何须要复制?

Kafka的信息复制确保了任何已发布的消息不会丢失,而且能够在机器错误、程序错误或更常见些的软件升级中使用。

1三、若是副本在ISR中停留了很长时间代表什么?

若是一个副本在ISR中保留了很长一段时间,那么它就代表,跟踪器没法像在leader收集数据那样快速地获取数据。

1四、请说明若是首选的副本不在ISR中会发生什么?

若是首选的副本不在ISR中,控制器将没法将leadership转移到首选的副本。

1五、有可能在生产后发生消息偏移吗?

在大多数队列系统中,做为生产者的类没法作到这一点,它的做用是触发并忘记消息。broker将完成剩下的工做,好比使用id进行适当的元数据处理、偏移量等。

做为消息的用户,你能够从Kafka broker中得到补偿。若是你注视SimpleConsumer类,你会注意到它会获取包括偏移量做为列表的MultiFetchResponse对象。此外,当你对Kafka消息进行迭代时,你会拥有包括偏移量和消息发送的MessageAndOffset对象。

1六、Kafka的设计时什么样的呢?

Kafka将消息以topic为单位进行概括 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,能够由一个或多个服务组成,每一个服务叫作一个broker. producers经过网络将消息发送到Kafka集群,集群向消费者提供消息

1七、数据传输的事物定义有哪三种?

(1)最多一次:

消息不会被重复发送,最多被传输一次,但也有可能一次不传输

(2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.

(3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每一个消息都传输被一次并且仅仅被传输一次,这是你们所指望的

1八、Kafka判断一个节点是否还活着有那两个条件?

(1)节点必须能够维护和ZooKeeper的链接,Zookeeper经过心跳机制检查每一个节点的链接

(2)若是节点是个follower,他必须能及时的同步leader的写操做,延时不能过久

1九、producer是否直接将数据发送到broker的leader(主节点)?

producer直接将数据发送到broker的leader(主节点),不须要在多个节点进行分发,为了帮助producer作到这点,全部的Kafka节点均可以及时的告知:哪些节点是活动的,目标topic目标分区的leader在哪。这样producer就能够直接将消息发送到目的地了。

20、Kafa consumer是否能够消费指定分区消息?

Kafa consumer消费消息时,向broker发出"fetch"请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就能够消费从这个位置开始的消息,customer拥有了offset的控制权,能够向后回滚去从新消费以前的消息,这是颇有意义的

2一、Kafka消息是采用Pull模式,仍是Push模式?

Kafka最初考虑的问题是,customer应该从brokes拉取消息仍是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息一些消息系统好比Scribe和Apache Flume采用了push模式,将消息推送到下游的consumer。这样作有好处也有坏处:由broker决定消息推送的速率,对于不一样消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka仍是选取了传统的pull模式

Pull模式的另一个好处是consumer能够自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的状况下决定是当即推送每条消息仍是缓存以后批量推送。若是为了不consumer崩溃而采用较低的推送速率,将可能致使一次只推送较少的消息而形成浪费。Pull模式下,consumer就能够根据本身的消费能力去决定这些策略

Pull有个缺点是,若是broker没有可供消费的消息,将致使consumer不断在循环中轮询,直到新消息到t达。为了不这点,Kafka有个参数可让consumer阻塞知道新消息到达(固然也能够阻塞知道消息的数量达到某个特定的量这样就能够批量发

2二、Kafka存储在硬盘上的消息格式是什么?

消息由一个固定长度的头部和可变长度的字节数组组成。头部包含了一个版本号和CRC32校验码。

消息长度: 4 bytes (value: 1+4+n)

版本号: 1 byte

CRC校验码: 4 bytes

具体的消息: n bytes

2三、Kafka高效文件存储设计特色:

(1).Kafka把topic中一个parition大文件分红多个小文件段,经过多个小文件段,就容易按期清除或删除已经消费完文件,减小磁盘占用。

(2).经过索引信息能够快速定位message和肯定response的最大大小。

(3).经过index元数据所有映射到memory,能够避免segment file的IO磁盘操做。

(4).经过索引文件稀疏存储,能够大幅下降index文件元数据占用空间大小。

2四、Kafka 与传统消息系统之间有三个关键区别

(1).Kafka 持久化日志,这些日志能够被重复读取和无限期保留

(2).Kafka 是一个分布式系统:它以集群的方式运行,能够灵活伸缩,在内部经过复制数据提高容错能力和高可用性

(3).Kafka 支持实时的流式处理

2五、Kafka建立Topic时如何将分区放置到不一样的Broker中

副本因子不能大于 Broker 的个数;

第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;

其余分区的第一个副本放置位置相对于第0个分区依次日后移。也就是若是咱们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;

剩余的副本相对于第一个副本放置位置实际上是由 nextReplicaShift 决定的,而这个数也是随机产生的

2六、Kafka新建的分区会在哪一个目录下建立

在启动 Kafka 集群以前,咱们须要配置好 log.dirs 参数,其值是 Kafka 数据的存放目录,这个参数能够配置多个目录,目录之间使用逗号分隔,一般这些目录是分布在不一样的磁盘上用于提升读写性能。 固然咱们也能够配置 log.dir 参数,含义同样。只须要设置其中一个便可。 若是 log.dirs 参数只配置了一个目录,那么分配到各个 Broker 上的分区确定只能在这个目录下建立文件夹用于存放数据。 可是若是 log.dirs 参数配置了多个目录,那么 Kafka 会在哪一个文件夹中建立分区目录呢?答案是:Kafka 会在含有分区目录最少的文件夹中建立新的分区目录,分区目录名为 Topic名+分区ID。注意,是分区文件夹总数最少的目录,而不是磁盘使用量最少的目录!也就是说,若是你给 log.dirs 参数新增了一个新的磁盘,新的分区目录确定是先在这个新的磁盘上建立直到这个新的磁盘目录拥有的分区目录不是最少为止。

2七、partition的数据如何保存到硬盘

topic中的多个partition以文件夹的形式保存到broker,每一个分区序号从0递增, 且消息有序 Partition文件下有多个segment(xxx.index,xxx.log) segment 文件里的 大小和配置文件大小一致能够根据要求修改 默认为1g 若是大小大于1g时,会滚动一个新的segment而且以上一个segment最后一条消息的偏移量命名

2八、kafka的ack机制

request.required.acks有三个值 0 1 -1

0:生产者不会等待broker的ack,这个延迟最低可是存储的保证最弱当server挂掉的时候就会丢数据

1:服务端会等待ack值 leader副本确认接收到消息后发送ack可是若是leader挂掉后他不确保是否复制完成新leader也会致使数据丢失

-1:一样在1的基础上 服务端会等全部的follower的副本受到数据后才会受到leader发出的ack,这样数据不会丢失

2九、Kafka的消费者如何消费数据

消费者每次消费数据的时候,消费者都会记录消费的物理偏移量(offset)的位置 等到下次消费时,他会接着上次位置继续消费。同时也能够按照指定的offset进行从新消费。

30、消费者负载均衡策略

结合consumer的加入和退出进行再平衡策略。

3一、kafka消息数据是否有序?

消费者组里某具体分区是有序的,因此要保证有序只能建一个分区,可是实际这样会存在性能问题,具体业务具体分析后确认。

3二、kafaka生产数据时数据的分组策略,生产者决定数据产生到集群的哪一个partition中

每一条消息都是以(key,value)格式 Key是由生产者发送数据传入 因此生产者(key)决定了数据产生到集群的哪一个partition

3三、kafka consumer 什么状况会触发再平衡reblance?

①一旦消费者加入或退出消费组,致使消费组成员列表发生变化,消费组中的全部消费者都要执行再平衡。

②订阅主题分区发生变化,全部消费者也都要再平衡。

3四、描述下kafka consumer 再平衡步骤?

①关闭数据拉取线程,情空队列和消息流,提交偏移量;

②释放分区全部权,删除zk中分区和消费者的全部者关系;

③将全部分区从新分配给每一个消费者,每一个消费者都会分到不一样分区;

④将分区对应的消费者全部关系写入ZK,记录分区的全部权信息;

⑤重启消费者拉取线程管理器,管理每一个分区的拉取线程。

以上Kafka面试题部分来自网络,答案仅供参考,若是有不一样的见解能够留言讨论。死记硬背的方式不建议。若是您最近有面试到关于Kafka的面试题,欢迎留言分享哦~

下面这份是我找到的另外一篇Kafka面试资料,有须要的话点赞+关注,私信我就能获取啦!

相关文章
相关标签/搜索