1、请阐明什么是Apache Kafka?

Apache Kafka是由Apache开发的一种公布订阅音讯零碎,它是一个分布式的、分区的和可复制的提交日志服务。

2、说说Kafka的应用场景?

①异步解决 
②利用解耦 
③流量削峰 
④日志解决 
⑤音讯通信等。

3、应用Kafka有什么长处和毛病?

长处

①反对跨数据中心的音讯复制;
②单机吞吐量:十万级,最大的长处,就是吞吐量高; 
③topic数量都吞吐量的影响:topic从几十个到几百个的时候,吞吐量会大幅度降落。所以在等同机器下,kafka尽量保障topic数量不要过多。如果要撑持大规模topic,须要减少更多的机器资源; 
④时效性:ms级; 
⑤可用性:十分高,kafka是分布式的,一个数据多个正本,多数机器宕机,不会失落数据,不会导致不可用; 
⑥音讯可靠性:通过参数优化配置,音讯能够做到0失落; 
⑦性能反对:性能较为简单,次要反对简略的MQ性能,在大数据畛域的实时计算以及日志采集被大规模应用。

毛病: 

①因为是批量发送,数据并非真正的实时; 仅反对对立分区内音讯有序,无奈实现全局音讯有序; 
②有可能音讯反复生产; 
③依赖zookeeper进行元数据管理,等等。

4、为什么说Kafka性能很好,体现在哪里?

①程序读写 
②零拷贝 
③分区 
④批量发送 
⑤数据压缩 

5、请阐明什么是传统的消息传递办法?

传统的消息传递办法包含两种: 

排队:在队列中,一组用户能够从服务器中读取音讯,每条音讯都发送给其中一个人。 

公布-订阅:在这个模型中,音讯被播送给所有的用户。

6、请阐明Kafka绝对传统技术有什么劣势?

①疾速:繁多的Kafka代理能够解决成千上万的客户端,每秒解决数兆字节的读写操作。 
②可伸缩:在一组机器上对数据进行分区和简化,以反对更大的数据
③长久:音讯是持久性的,并在集群中进行复制,以避免数据失落。 
④设计:它提供了容错保障和持久性

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

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

不,不可能越过Zookeeper,间接分割Kafka broker。一旦Zookeeper进行工作,它就不能服务客户端申请。 

Zookeeper次要用于在集群中不同节点之间进行通信 

在Kafka中,它被用于提交偏移量,因而如果节点在任何状况下都失败了,它都能够从之前提交的偏移量中获取 

除此之外,它还执行其余流动,如: leader检测、分布式同步、配置管理、辨认新节点何时来到或连贯、集群、节点实时状态等等。

8、解释Kafka的用户如何生产信息?

在Kafka中传递音讯是通过应用sendfile API实现的。它反对将字节从套接口转移到磁盘,通过内核空间保留正本,并在内核用户之间调用内核。

9、解释如何进步近程用户的吞吐量?

如果用户位于与broker不同的数据中心,则可能须要调优套接口缓冲区大小,以对长网络提早进行摊销。

10、解释一下,在数据制作过程中,你如何能从Kafka失去精确的信息?

在数据中,为了准确地取得Kafka的音讯,你必须遵循两件事: 在数据耗费期间防止反复,在数据生产过程中防止反复。 

这里有两种办法,能够在数据生成时精确地取得一个语义: 

每个分区应用一个独自的写入器,每当你发现一个网络谬误,查看该分区中的最初一条音讯,以查看您的最初一次写入是否胜利 

在音讯中蕴含一个主键(UUID或其余),并在用户中进行重复制

11、解释如何缩小ISR中的扰动?broker什么时候来到ISR?

ISR是一组与leaders齐全同步的音讯正本,也就是说ISR中蕴含了所有提交的音讯。ISR应该总是蕴含所有的正本,直到呈现真正的故障。如果一个正本从leader中脱离进去,将会从ISR中删除。

12、Kafka为什么须要复制?

Kafka的信息复制确保了任何已公布的音讯不会失落,并且能够在机器谬误、程序谬误或更常见些的软件降级中应用。

13、如果正本在ISR中停留了很长时间表明什么?

如果一个正本在ISR中保留了很长一段时间,那么它就表明,跟踪器无奈像在leader收集数据那样疾速地获取数据。

14、请阐明如果首选的正本不在ISR中会产生什么?

如果首选的正本不在ISR中,控制器将无奈将leadership转移到首选的正本。

15、有可能在生产后产生音讯偏移吗?

在大多数队列零碎中,作为生产者的类无奈做到这一点,它的作用是触发并遗记音讯。broker将实现剩下的工作,比方应用id进行适当的元数据处理、偏移量等。 

作为音讯的用户,你能够从Kafka broker中取得弥补。如果你凝视SimpleConsumer类,你会留神到它会获取包含偏移量作为列表的MultiFetchResponse对象。此外,当你对Kafka音讯进行迭代时,你会领有包含偏移量和音讯发送的MessageAndOffset对象。

16、Kafka的设计时什么样的呢?

Kafka将音讯以topic为单位进行演绎

将向Kafka topic公布音讯的程序成为producers.

将预订topics并生产音讯的程序成为consumer.

Kafka以集群的形式运行,能够由一个或多个服务组成,每个服务叫做一个broker.

producers通过网络将音讯发送到Kafka集群,集群向消费者提供音讯

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

(1)最多一次:音讯不会被反复发送,最多被传输一次,但也有可能一次不传输

(2)起码一次: 音讯不会被漏发送,起码被传输一次,但也有可能被反复传输.

(3)准确的一次(Exactly once): 不会漏传输也不会反复传输,每个音讯都传输被一次而且仅仅被传输一次,这是大家所冀望的

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

(1)节点必须能够保护和ZooKeeper的连贯,Zookeeper通过心跳机制查看每个节点的连贯

(2)如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久

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

producer间接将数据发送到broker的leader(主节点),不须要在多个节点进行散发,为了帮忙producer做到这点,所有的Kafka节点都能够及时的告知:

哪些节点是流动的,
指标topic指标分区的leader在哪。

这样producer就能够间接将音讯发送到目的地了。

20、Kafa consumer是否能够生产指定分区音讯?

Kafa consumer生产音讯时,向broker收回"fetch"申请去生产特定分区的音讯,consumer指定音讯在日志中的偏移量(offset),就能够生产从这个地位开始的音讯,customer领有了offset的控制权,能够向后回滚去从新生产之前的音讯,这是很有意义的

21、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阻塞晓得新音讯达到(当然也能够阻塞晓得音讯的数量达到某个特定的量这样就能够批量发

22、Kafka存储在硬盘上的音讯格局是什么?

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

① 音讯长度: 4 bytes (value: 1+4+n)
② 版本号: 1 byte
③ CRC校验码: 4 bytes
④ 具体的音讯: 4 bytes

23、Kafka高效文件存储设计特点:

(1). Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期革除或删除曾经生产完文件,缩小磁盘占用。

(2). 通过索引信息能够疾速定位message和确定response的最大大小。

(3). 通过index元数据全副映射到memory,能够防止segment file的IO磁盘操作。

(4). 通过索引文件稠密存储,能够大幅升高index文件元数据占用空间大小。

24、Kafka 与传统音讯零碎之间有三个要害区别

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

(2). Kafka 是一个分布式系统:它以集群的形式运行,能够灵便伸缩,在外部通过复制数据晋升容错能力和高可用性

(3). Kafka 反对实时的流式解决

25、Kafka创立Topic时如何将分区搁置到不同的Broker中

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

第一个分区(编号为0)的第一个正本搁置地位是随机从 brokerList 抉择的;

其余分区的第一个正本搁置地位绝对于第0个分区顺次往后移。也就是如果咱们有5个 Broker,5个分区,假如第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,顺次类推;

残余的副本相对于第一个正本搁置地位其实是由 nextReplicaShift 决定的,而这个数也是随机产生的

26、Kafka新建的分区会在哪个目录下创立

在启动 Kafka 集群之前,咱们须要配置好 log.dirs 参数,其值是 Kafka 数据的寄存目录,这个参数能够配置多个目录,目录之间应用逗号分隔,通常这些目录是散布在不同的磁盘上用于进步读写性能。

当然咱们也能够配置 log.dir 参数,含意一样。只须要设置其中一个即可。

如果 log.dirs 参数只配置了一个目录,那么调配到各个 Broker 上的分区必定只能在这个目录下创立文件夹用于存放数据。

然而如果 log.dirs 参数配置了多个目录,那么 Kafka 会在哪个文件夹中创立分区目录呢?

答案是:Kafka 会在含有分区目录起码的文件夹中创立新的分区目录,分区目录名为 Topic名+分区ID。留神,是分区文件夹总数起码的目录,而不是磁盘使用量起码的目录!

也就是说,如果你给 log.dirs 参数新增了一个新的磁盘,新的分区目录必定是先在这个新的磁盘上创立直到这个新的磁盘目录领有的分区目录不是起码为止。

27、partition的数据如何保留到硬盘

topic中的多个partition以文件夹的模式保留到broker,每个分区序号从0递增, 且音讯有序 Partition文件下有多个segment(xxx.index,xxx.log)

segment 文件里的大小和配置文件大小统一能够依据要求批改,默认为1g。如果大小大于1g时,会滚动一个新的segment并且以上一个segment最初一条音讯的偏移量命名

28、kafka的ack机制

request.required.acks有三个值:

 0  1 -1

0:生产者不会期待broker的ack,这个提早最低然而存储的保障最弱当server挂掉的时候就会丢数据

1:服务端会期待ack值 leader正本确认接管到音讯后发送ack然而如果leader挂掉后他不确保是否复制实现新leader也会导致数据失落

-1:同样在1的根底上 服务端会等所有的follower的正本受到数据后才会受到leader收回的ack,这样数据不会失落

29、Kafka的消费者如何生产

数据消费者每次生产数据的时候,消费者都会记录生产的物理偏移量(offset)的地位

等到下次生产时,他会接着上次地位持续生产。同时也能够依照指定的offset进行从新生产。

30、消费者负载平衡策略

联合consumer的退出和退出进行再均衡策略。

31、kafka音讯数据是否有序?

消费者组里某具体分区是有序的,所以要保障有序只能建一个分区,然而理论这样会存在性能问题,具体业务具体分析后确认。

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

每一条音讯都是以(key,value)格局 Key是由生产者发送数据传入 所以生产者(key)决定了数据产生到集群的哪个partition

33、kafka consumer 什么状况会触发再均衡reblance?

①一旦消费者退出或退出生产组,导致生产组成员列表发生变化,生产组中的所有消费者都要执行再均衡。

②订阅主题分区发生变化,所有消费者也都要再均衡。

34、形容下kafka consumer 再均衡步骤?

①敞开数据拉取线程,情空队列和音讯流,提交偏移量;

②开释分区所有权,删除zk中分区和消费者的所有者关系;

③将所有分区重新分配给每个消费者,每个消费者都会分到不同分区;

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

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