Kafka面试题,附带答案

1.什么是kafka??

答: kafka是分布式 · 订阅消息系统,最初由LinkedIn公司开发的,后来被Apache公司收购。kafka是一个分布式、可划分的、冗余备份机制的持久性的日志服务,主要用于流数据

2.为什么要使用kafka??

答:a.多个生产者
b.多个消费者
c.基于磁盘的数据存储
d.伸缩性
e.高性能

3.Kafka为什么要使用消息队列??

答:A.缓冲和消峰:例:上游突发流量,下游承受不住,kafka就在中间起到一个缓冲作用,把消息缓存到kafka中,下游可通过自己的节奏,进行慢慢处理
B.解耦和扩展性:例:项目开始,并不能确定具体的要求,消息队列可作为一个接口层进行解耦重要业务流程,只要遵守约定,针对数据编程即可获取扩展能力
C.冗余机制:采用一堆多的方式,一个生产者发布消息,可被多个订阅的Topic服务消费到,供多个毫无关联的业务使用
D.健壮性:消息队列可堆积请求,所以消费端业务,即使短时间死掉,它不会影响主要业务正常运行
E.异步通信:有时候用户不想立即处理消息,消息队列提供了异步处理机制,允许用户把一个消息放到消息队列,并不立即处理,它想向队列放多少消息,就放多少消息,需要用的时候,再去处理他们

4.kafka中有哪几个组件??

答:A Topic(主题):kafka的Topic是一堆或一组消息*
B producer(生产者):在kafka生产者发布通信以及向kafka主题发布消息
C consumer(消费者):kafka消费者订阅了一个主题,并且还从主题中读取和处理消息
D brokers(分区):在管理Topic中的消息存储时,我们使用kafka brokers

5.解释偏移量的作用?

答:给分区中的消息提供一个顺序ID,我们称之为偏移量,为了唯一的识别分区中的每条消息,我们使用这些偏移量

6.什么是消费者组?

答:消费者组是kafka独有的,每个kafka消息群体都由一个或多个共同消费一组订阅主题的消费者组成

7.zookeeper在kafka中的作用是什么?

答:kafka是一个使用zookeeper构建的分布式系统。虽然zookeeper在集群中的作用是不同节点之间的协调服务。如果任何节点失败 ,我们还可以使用zookeeper从先前提交的偏移量中恢复,他是做周期性提交偏移量工作

8.没有zookeeper可以启动kafka吗?

答:不启动zookeeper就启动kafka是不可能的,kafka是一个基于zookeeper构建的分布式系统,如果以某些方式让zookeeper关闭,无法为任何客户端提供服务

9.为什么kafka的技术很重要?

答:kafka有一些优点,我们使用起来很重要:
A.高吞吐量:我们在Kafka中不需要任何大型硬件,因为它能够处理高速和大容量数据。此外,它还可以支持每秒数千条消息的消息吞吐量。
B.低延迟:Kafka可以轻松处理这些消息,具有毫秒级的极低延迟,这是大多数新用例所要求的。
C.容错:Kafka能够抵抗集群中的节点/机器故障。
D.耐久性:由于Kafka支持消息复制,因此消息永远不会丢失。这是耐久性背后的原因之一。
F.可扩展性:kafka可以扩展,而不需要通过添加额外的节点而在运行中造成任何停机。

10.kafka主要的API有哪些?

答:A:producer API(生产者API)
B:consumer API(消费者API)
C:流 API
D:连接器 API

11.什么是消费者或用户?

答:kafka消费者订阅一个主题,并读取和处理来自该主题的消息,有了消费者组的名字,消费者就给自己贴上了标签。换句话说:在每个订阅使用者组中,发布到主题的每个记录都传递到一个使用者实例。确保使用者实例可能位于单独的进程或单独的计算上

12.解释什么是领导者和什么是追随者?

在kafka的每个分区中,都有一个服务器充当领导者,0到多个服务器充当追随者角色

13.是什么确保kafka的负载均衡?

答:由于领导者的主要角色是执行分区所有读写请求的任务,追随者被动的复制领导者,在领导者失败时,其中一个追随者复制了领导者的角色,基本上,整个过程可确保服务器的负载均衡

14.副本和ISR扮演什么角色?

答: 复制日志的节点列表就是副本,特别是对于特定的分区,无论扮演领导者或者追随者的角色都是如此
ISR值得是同步副本,在定义ISR是,他是一组与领导者同步的消息副本

15.为什么kafka的复制至关重要?

答:由于复制,我们可以确保发布的消息不丢失,并且可以在发生任何机器错误、程序错误或者频繁的软件升级时使用

16.如果副本不在ISR中意味着什么?

答:简单的说:这意味着追随者不能像领导者收集数据那样快速的获取数据

17.在生产者中,何时发生QueueFullException?

答:每当kafka视图以代理的身份在当时无法处理的速度发送消息时,通常会发生QueueFullException,但是,为了协调处理增加负载,用户需要添加足够的代理,因为生产者不会阻止

18.解释kafka producer API 的作用?

答:应用允许程序将记录流发布到一个或多个kafka主题的API,就是我们所说的priducer API

19.kafka和flume的区别是什么?

答:A:工具类型:
kafka是面向多个生产者和消费者的通用工具
flume被认定为是特定的应用程序的专用工具
B:复制功能:
kafka可以复制事件
flume不可复制事件

20.kafka是分布式流处理平台吗?如果是它能做什么?

答:毫无疑问,kafka是一个流式处理平台,他可以:
A.轻松推送消息、消息记录
B.可以存储大量记录,而不会出现任何存储问题
C.它还可以在记录中进入是对其进行处理

21.在kafka集群中文件的保留期是什么?

答:保留期限保留了kafka集群中所有已发记录。它还会检查他们是否消耗。此外,可以通过使用保留期的配置来丢弃记录,而且 它还可以释放一些空间

22.你能用kafka做什么?

答:它可以 以多种方式执行,例:
为了连个系统之间传输数据,我们可以用它来构建实时的数据流管道,我们可以用kafka构建一个实时流处理平台,它可以对数据快速做出反应

23.kafka接收最大消息最大为多少?

答:kafka可以接收最大消息大约为1000000字节

24.kafka的传输消息、传递方法有哪些类型?

答:基本上,传输消息、传递方法有两种 例:
排队:这是一种消费者池,可以从服务器读取消息,并且每条消息转到其中一个消息的方法
发布 · 订阅 :在发布 · 订阅中,消息被广播给所有消费者

25.ISR在kafka环境中代表着什么?

答:ISR指的是同步副本。这些通常被分类为一组消息副本,他们被同步为领导者

26.什么是kafka中的地域复制?

答:对于我们的集群,kafka MirrirMaker 提供地理复制,基本上消息是通过MirrorMaker跨多个数据中心或云区域复制的,因此,他可以在主动或被动场景中用于备份和恢复;也可以将数据放在离用户更近的位置,或者支持数据位置要求

27.解释多租户是什么?

答:我们可以轻松的将kafka部署为多租户解决方案,但是通过配置主题可以生成或者使用数据,可以启动多租户,此外,我们还为额提供支持操作

28.消费者的API作用?

答:允许应用程序订阅一个或多个主题,并处理生成给它们的记录流API,我们成为消费者API

29.解释流API 的作用?

答:一种允许应用程序充当流处理器的API,它还使用一个或多个主图的输入流,并生成一个输出流到一个或多个主题,此外,有效的将输入流转换为输出流,我们称为流API

30.连接器API的作用是什么?

答:一个允许运行和构建可重用的生产者或消费者API,将kafka主题连接到现有的应用程序或数据系统,我们称为连接器API

31.解释生产者是什么?

答:生产者的主要作用是将数据发布到他们的选择的主题上,基本上,职责是选择要分配给主题内分区的记录

32.比较RabbitMQ和kafka的区别是什么?

答:A.功能:
kafka------分布式、持久性和高可用的,这里共享和复制数据
RabbitMQ------没有此类功能
B 性能速度:
kafka------能达到每秒10万条消息
RabbitMQ------每秒2万条消息

33.比较传统队列系统与kafka?

答:A 消息保留:
传统队列系统:传统队列系统通常从队列完成后删除信息
kafka:kafka中消息即使在处理后依然存在,这意外着kafka中的消息不会在消费者收到消息而删除
B:基于逻辑的处理
传统队列系统:传统队列系统不允许基于类似消息或事件处理逻辑
kafka:kafka允许基于类似消息或事件处理逻辑

34.为什么选择使用kafka??

答:为了收集大量数据和分析收集数据,我们需要一个消息队列系统,kafka应运而生。好处:
A.只需存储和发送事件进行实时处理,就可以跟踪web活动
B.通过这一点,我们可以发出警报并报告操作指标
C.我们可以将数据转化为标准格式
D.它允许对主题的流式数据,进行连续处理
由于kafka的广泛使用,它秒杀了竞品:ActiveMQ、RabbitMQ等

35.解释术语 “log Anatomy”?

答:我们将日志视为分区,基本上数据源将消息写入日志,优点是:在任何时候,都有一个或多个消费者,从他们选择的日志中进行读取数据

36.kafka的日志是什么?

答:在kafka中,消息会保留相当长的时间。此外,消费者还可以根据自己的方便进行阅读,有一种可能的情况,如果kafka配置为消息保留24小时,并且,消费者可能停机24小时,消费者可能会丢失这些消息。但,我们仍然可以从上次已知的偏移量中读取这些消息,但,仅限于消费者的部分停机,时间仅为60分钟的情况,此外,关于kafka消费者从一个主题中读到什么,jafja不会保持这个状态

37.解释如何调整kafka以获得最佳的性能??

答:调优kafka的方法是调优它德 几个组件:
A.调整kafka生产者
B.kafka代理调优
C.调整kafka消费者

38.kafka的缺陷有哪些??

答:A. 没有完整的监控工具集
B.消息调整的问题
C.不支持通配符的主题选择
D.速度问题

39.列出所有kafka的业务有哪些?

答:A. 添加和删除kafka的主题
B.如何修改kafka的主题
C.如何关机
D.在kafka集群之间镜像数据
E.找到消费者位置
F.扩展你的kafka集群
G.自动迁移数据
H.退出服务
I. 数据中心

40.解释kafka的用例有哪些??

答:kafka有很多用例 例:
A kafka的指标:
可以使用kafka记性操作质控数据。此外,为了生成操作数据集中提要,它涉及到从分布式应用程序聚合统计信息
B kafka日志聚合:
从组织中的多个服务收集日志
C.流处理:
在流处理过程中,kafka的耐久性非常有用

41.kafka流的特点有哪些??

答:kafka流的一些最佳的功能是:
A .kafka streams具有高可用、可扩展和容错性
B kafka部署到容器,VM、裸机、云
C kafka对于小型、中型、大型用例同样可行
D 编写标准kava应用程序
E 它完全与kafka安全集成
F 完全一次处理语义
G 不需要单独处理集群

42.kafka流式处理是什么意思??

答:连接、实时、并发和以逐记录方式处理数据类型,我们称之为 kafka流式处理

43.kafka系统工具有哪些类型??

答:系统类型分为三种形式:
A.kafka迁移工具:它有助于将代理从一个版本迁移到另一个版本
B.,Mirror maker:Mirror maker工具有助于将一个kafka集群镜像提供给另一个
C.消费者检查:对于指定的主题集和消费者组,它显示主题、分区、所有者

44.什么是复制工具及其类型??

答:为了增强持久性和更高的可用性,这里提供了复制工具,类型为:
a.创建主题工具 b.列表主题工具 c.添加分区工具

45.java在kafka中的重要性是什么??

答:为了满足kafka标准的高处理速率需求,我们可以使用java语言。此外,对于kafka消费者客户,java也提供了良好的社区支持。所以我们说在java中实现kafka是一个正确的选择

46.说一下kafka的最佳特征是什么??

答:kafka的最佳特征是:“各种各样的用例”
意味着kafka能够管理各种各样的用例,这些用例对于数据池来说特别常见,例如 日志聚合、web活动跟踪等

47.kafka提供的保证是什么?

答:生产者向特定主题分区发送消息的顺序相同。消费者实例按照他们存储在日志中的顺序查看记录。即使不丢失任何提交的日志记录,我们可以忍受最多N-1个月服务器故障

48.kafka的分区策略是什么?

答:Kafka保证同一Consumer Group中只有一个Consumer会消费某条消息,实际上,Kafka保证的是稳定状态下每一个Consumer实例只会消费某一个或多个特定Partition的数据,而某个Partition的数据只会被某一个特定的Consumer实例所消费。也可以理解为 Kafka对消息的分配是以Partition为单位分配的,而非以每一条消息作为分配单元。这样设计的劣势是无法保证同一个Consumer Group里的Consumer均匀消费数据,优势是每个Consumer不用都跟大量的Broker通信,减少通信开销,同时也降低了分配难度,实现也更简单。另外,因为同一个Partition里的数据是有序的,这种设计可以保证每个Partition里的数据可以被有序消费。

49.一个Consumer Group中的多个consumer是如何消费不同的partition?

答:Kafka 有两种分配策略。
RangeAssignor,默认
Range 范围分区策略是对每个 topic 而言的。首先对同一个 topic 里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。假如现在有 10 个分区,3 个消费者,排序后的分区将会是0,1,2,3,4,5,6,7,8,9;消费者排序完之后将会是C1-0,C2-0,C3-0。通过 partitions数/consumer数来决定每个消费者应该消费几个分区。如果除不尽,那么前面几个消费者将会多消费 1 个分区。
Range 范围分区的弊端:
针对 1 个 topic 而言,C1-0消费者多消费1个分区影响不是很大。如果有 N 多个 topic,那么针对每个 topic,消费者 C1-0 都将多消费 1 个分区,topic越多,C1-0 消费的分区会比其他消费者明显多消费 N 个分区。这就是 Range 范围分区的一个很明显的弊端了
RoundRobinAssignor
RoundRobin 轮询分区策略,是把所有的 partition 和所有的 consumer 都列出来,然后按照 hashcode 进行排序,最后通过轮询算法来分配 partition 给到各个消费者。
如果想要使用RoundRobin 轮询分区策略,必须满足如下两个条件:
每个消费者订阅的主题,必须是相同的
每个主题的消费者实例都是相同的。(即:上面的第一种情况,才优先使用 RoundRobin 轮询分区策略)

50. Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?

答:分区器:可以给消息指定传入分区
序列化器:将生产者消息序列化,可以被网络传输
拦截器:可以在消息传入Kafka前和producer回调函数返回前对消息进行简单的处理

51. Kafka 生产者客户端的整体结构是什么样子的?使用了几个线程来处理?分别是什么?

答:main线程负责:拦截器—>序列化器—>分区器
sender线程负责:将分区后的数据发送给对于分区

52.有哪些情形会造成重复消费?那些情景会造成消息漏消费 ?

答:重复消费:先处理数据,再提交offset
消息漏消费:先提交offset,再处理数据
Kafka消息消费有两个consumer接口,Low-level API和High-level API:
Low-level API:消费者自己维护offset等值,可以实现对Kafka的完全控制;
High-level API:封装了对parition和offset的管理,使用简单;
如果使用高级接口High-level API,可能存在一个问题就是当消息消费者从集群中把消息取出来、并提交了新的消息offset值后,还没来得及消费就挂掉了,那么下次再消费时之前没消费成功的消息就“诡异”的消失了;
消息的重复消费,即要解决消费时的幂等性。解决思路:
生产者生产数据时,添加一个全局唯一的id,处理时如果发现一个id已经被处理,那就忽略这条消息
如果消费操作是向数据库中插入数据,可以利用数据库的唯一键

53.当你使用 kafka-topics.sh 创建(删除)了一个 topic 之后, Kafka 背后会执行什么逻辑?

答:会在 zookeeper 中的/brokers/topics 节点下创建一个新的 topic 节点,如:/brokers/topics/first
触发 Controller 的监听程序
kafka Controller 负责 topic 的创建工作,并更新 metadata cache

54.topic 的分区数可不可以增加?可不可以减少?为什么?

答:分区数可以增加,不可以减少
按照Kafka现有的代码逻辑而言,此功能完全可以实现,不过也会使得代码的复杂度急剧增大。实现此功能需要考虑的因素很多,比如删除掉的分区中的消息该作何处理?如果随着分区一起消失则消息的可靠性得不到保障;如果需要保留则又需要考虑如何保留。直接存储到现有分区的尾部,消息的时间戳就不会递增,如此对于Spark、Flink这类需要消息时间戳(事件时间)的组件将会受到影响;如果分散插入到现有的分区中,那么在消息量很大的时候,内部的数据复制会占用很大的资源,而且在复制期间,此主题的可用性又如何得到保障?与此同时,顺序性问题、事务性问题、以及分区和副本的状态机切换问题都是不得不面对的。反观这个功能的收益点却是很低,如果真的需要实现此类的功能,完全可以重新创建一个分区数较小的主题,然后将现有主题中的消息按照既定的逻辑复制过去即可。
虽然分区数不可以减少,但是分区对应的副本数是可以减少的,这个其实很好理解,你关闭一个副本时就相当于副本数减少了。不过正规的做法是使用kafka-reassign-partition.sh脚本来实现,(具体用法可以自行搜索)

55… Kafka 有内部的 topic 吗?如果有是什么?有什么所用?

答:consumer 默认将 offset 提交到Kafka 一个内置的 topic 中,该 topic 为__consumer_offsets。

56.Kafka 中有那些地方需要选举?这些地方的选举策略又有哪些?

答:Kafka中的选举大致可以分为三大类:控制器的选举、分区leader的选举以及消费者相关的选举
A.控制器的选举:
在Kafka集群中会有一个或多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态等工作。比如当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。再比如当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
B.分区leader的选举:
分区leader副本的选举由Kafka Controller 负责具体实施。当创建分区(创建主题或增加分区都有创建分区的动作)或分区上线(比如分区中原先的leader副本下线,此时分区需要选举一个新的leader上线来对外提供服务)的时候都需要执行leader的选举动作。
C.消费者相关的选举:
分区leader副本的选举由Kafka Controller 负责具体实施。当创建分区(创建主题或增加分区都有创建分区的动作)或分区上线(比如分区中原先的leader副本下线,此时分区需要选举一个新的leader上线来对外提供服务)的时候都需要执行leader的选举动作

57.Kafka 的哪些设计让它有如此高的性能?

答:a.批量处理
b.客户端优化
c.消息压缩
d.建立索引
e.分布式架构
f.顺序写盘
g.页缓存
h.零拷贝

58. 消息对列的两种模式

答: 点对点模式:
消费者主动拉取数据,消息收到后清除
发布/订阅模式:
生产者将消息发布到topic中,同时有多个消费者订阅该消息

发布了1 篇原创文章 · 获赞 2 · 访问量 45

猜你喜欢

转载自blog.csdn.net/weixin_46016315/article/details/105372179