转载请标明出处:https://blog.csdn.net/donkor_/article/details/140374705


1.Kafka中的ISR、OSR、AR代表什么?

ISR (InSyncRepli) : 速率和leader相差低于10秒的follower的集合
OSR(OutSyncRepli) : 速率和leader相差大于10秒的follower
AR(AllRepli) : 所有分区的follower

2.Kafka中的HW、LEO等分别代表什么?

HW(High Water) : 又名高水位,根据同一分区中,最低的LEO所决定
LEO(Log End Offset) : 每个分区的最高offset

3.zookeeper对于kafka的作用是什么?

Kafka中的Topic 被分成了若干分区,每个分区在同一时间只被一个 consumer 消费。然后再通过offset进行消息位置标记,通过位置偏移来跟踪消费状态。相比其他一些消息队列使用“一个消息被分发到consumer 后 broker 就马上进行标记或者等待 customer 的通知后进行标记”的优点是,避免了通信消息发送后,可能出现的程序奔溃而出现消息丢失或者重复消费的情况。同时也无需维护消息的状态,不用加锁,提高了吞吐量

4.Kafka的用途有哪些?使用场景如何?

  • 用户追踪:根据用户在web或者app上的操作,将这些操作消息记录到各个topic中,然后消费者通过订阅这些消息做实时的分析,或者记录到HDFS,用于离线分析或数据挖掘
  • 日志收集:通过kafka对各个服务的日志进行收集,再开放给各个consumer
  • 消息系统:缓存消息
  • 运营指标:记录运营监控数据,收集操作应用数据的集中反馈,如报错和报告

5.Kafka中是怎么体现消息顺序性的?

每个分区内,每条消息都有offset,所以只能在同一分区内有序,但不同的分区无法做到消息顺序性

6.有哪些情形会造成重复消费?或丢失信息?

  • 先处理后提交offset,会造成重读消费
  • 先提交offset后处理,会造成数据丢失

7.Kafka 分区的目的?

对于kafka集群来说,分区可以做到负载均衡,对于消费者来说,可以提高并发度,提高读取效率

8.Kafka 的高可靠性是怎么实现的?

为了实现高可靠性,kafka使用了订阅的模式,并使用isr和ack应答机制
能进入isr中的follower和leader之间的速率不会相差10秒
当ack=0时,producer不等待broker的ack,不管数据有没有写入成功,都不再重复发该数据
当ack=1时,broker会等到leader写完数据后,就会向producer发送ack,但不会等follower同步数据,如果这时leader挂掉,producer会对新的leader发送新的数据,在old的leader中不同步的数据就会丢失
当ack=-1或者all时,broker会等到leader和isr中的所有follower都同步完数据,再向producer发送ack,有可能造成数据重复

9.简述Kafka的日志目录结构?

每一个分区对应一个文件夹,命名为topic-0,topic-1,每个文件夹内有.index和.log文件

10.Kafka的那些设计让它有如此高的性能?

  • kafka是分布式的消息队列
  • 对log文件进行了segment,并对segment建立了索引
  • (对于单节点)使用了顺序读写,速度可以达到600M/s
  • 引用了zero拷贝,在os系统就完成了读写操作

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

在ISR中需要选择,选择策略为先到先得

12.失效副本是指什么?有那些应对措施?

失效副本为速率比leader相差大于10秒的follower
将失效的follower先提出ISR
等速率接近leader10秒内,再加进ISR

13.Kafka消息是采用Pull模式,还是Push模式?

在producer阶段,是向broker用Push模式
在consumer阶段,是向broker用Pull模式
在Pull模式下,consumer可以根据自身速率选择如何拉取数据,避免了低速率的consumer发生崩溃的问题
但缺点是,consumer要时不时的去询问broker是否有新数据,容易发生死循环,内存溢出

14.Kafka创建Topic时如何将分区放置到不同的Broker中?

首先副本数不能超过broker数
第一分区是随机从Broker中选择一个,然后其他分区相对于0号分区依次向后移
第一个分区是从nextReplicaShift决定的,而这个数也是随机产生的

15.消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?

生产者发送数据的offset是从0开始的,消费者消费的数据的offset是从1开始,故最新消息是offset+1

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐