首页 文章详情

2021秋招面试——kafka面试题及答案整理,快收藏

愿天堂没有BUG | 493 2021-09-13 03:08 0 0 0
UniSMS (合一短信)

1.Kafka 中的ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?

答:kafka中与leader副本保持一定同步程度的副本(包括leader)组成ISR。与leader滞后太多的副本组成OSR。分区中所有的副本通称为AR。

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

答:HW:高水位,指消费者只能拉取到这个offset之前的数据


LEO:标识当前日志文件中下一条待写入的消息的offset,大小等于当前日志文件最后一条消息的offset+1.

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

生产者:向leader副本负责消息的顺序写入

消费者:同一个分区只能被同一个消费者组中的一个消费者消费。

kafka只保证同一个分区的顺序性,所以如果是想保证全局顺序,可以自定义分区策略,将关联的消息发到同一个分区。如同一个订单的各个状态。

4. Kafka生产者客户端的结构

答:整个生产者客户端主要有两个线程,主线程以及Sender线程。Producer在主线程中产生消息,然后通过拦截器,序列化器,分区器之后缓存到消息累加器RecordAccumulator中。Sender线程从RecordAccumulator中获取消息并发送到kafka中。RecordAccumulator主要用来缓存消息,这样发送的时候进行批量发送以便减少相应的网络传输。RecordAccumulator缓存的大小可以通过配置参数buffer.memory配置,默认是32M。如果创建消息的速度过快,超过sender发送给kafka服务器的速度,会导致缓存空间不足,这个时候sender线程可能会阻塞或者抛出异常,max.block.ms配置决定阻塞的最大时间。

RecordAccumulator中为每个分区维护了一个双端队列,队列中的内容是ProducerBatch,即Deque,创建消息写入到尾部,发送消息从头部读取。ProducerBatch是消息发送的一个批次,里面包含了一个或多个ProducerRecord。

5.分区策略有哪些?

答:有两种,一种是 RangeAssignor 分配策略(范围分区),另一种是RoundRobinAssignor分配策略(轮询分区)。默认采用 Range 范围分区。

Range策略
如有10个分区,3个消费者,那么通过10/3=3算出一个消费者消费3个分区。多出的分区由排在前面的消费者消费。那么消费者1消费0,1,2,3分区。消费者2消费4,5,6分区。消费者3消费7,8,9分区。

缺点就是前面的消费者就会多消费到一个分区,如果是多个topic,那么这个消费者就会多消费到多个分区。

RandRobin策略:同样的例子,分区0被消费者1消费,分区1被消费者2消费,分区2被消费者3消费

注意:这种策略需要一个组内的消费者订阅的主题相同。这样轮询的时候才是均匀的。

当出现以下几种情况时,Kafka 会进行一次分区分配操作,即 Kafka 消费者端的 Rebalance 操作

  • 同一个 consumer 消费者组 group.id 中,新增了消费者进来,会执行 Rebalance 操作

  • 消费者离开当期所属的 consumer group组。比如宕机

  • 分区数量发生变化时(即 topic 的分区数量发生变化时)

  • 消费者主动取消订阅

6.kafka中哪些地方会选举?

答:BrokerController
在broker启动的时候,都会创建BrokerController,第一个在zookeeper中创建指定临时节点成功的那个节点就是BrokerController。他负责管理集群 broker的上下线,所有topic的分区副本分配和 leader 选举等工作。

Partition Leader

  • 从Zookeeper中读取当前分区的所有ISR(in-sync replicas)集合

  • 调用配置的分区选择算法选择分区的leader

7.分区数能新增或减少吗?

答:能新增,不能减少。因为减少的话,分区内已有的数据不好处理。


作者:女友在高考
链接:https://www.cnblogs.com/javammc/p/15232174.html

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter