kafka常考面试题整理分享(含答案)

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

  • ISR : 速率和leader相差低于10秒的follower的集合

  • OSR : 速率和leader相差大于10秒的follower

  • AR : 所有分区的follower

2.Kafka中的HW、LEO等分别代表什么?
  • HW : 又名高水位,根据同一分区中,最低的LEO所决定

  • LEO : 每个分区的最高offset

3.Kafka的用途有哪些?使用场景如何?
  1. 用户追踪:根据用户在web或者app上的操作,将这些操作消息记录到各个topic中,然后消费者通过订阅这些消息做实时的分析,或者记录到HDFS,用于离线分析或数据挖掘

  2. 日志收集:通过kafka对各个服务的日志进行收集,再开放给各个consumer

  3. 消息系统:缓存消息

  4. 运营指标:记录运营监控数据,收集操作应用数据的集中反馈,如报错和报告

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

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

5.“消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?

对的,超过分区数的消费者就不会再接收数据

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.topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?

可以增加

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-config --partitions 3
10.topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?

不可以,先有的分区数据难以处理

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

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

12.如何解决消费者速率低的问题?

增加分区数和消费者数

13.Kafka的那些设计让它有如此高的性能??
  1. kafka是分布式的消息队列

  2. 对log文件进行了segment,并对segment建立了索引

  3. (对于单节点)使用了顺序读写,速度可以达到600M/s

  4. 引用了zero拷贝,在os系统就完成了读写操作

14.kafka启动不起来的原因?

在关闭kafka时,先关了zookeeper,就会导致kafka下一次启动时,会报节点已存在的错误

只要把zookeeper中的zkdata/version-2的文件夹删除即可

15.聊一聊Kafka Controller的作用?

负责kafka集群的上下线工作,所有topic的副本分区分配和选举leader工作

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

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

17.失效副本是指什么?有那些应对措施?
  • 失效副本为速率比leader相差大于10秒的follower

  • 将失效的follower先提出ISR

  • 等速率接近leader10秒内,再加进ISR

18.Kafka消息是采用Pull模式,还是Push模式?
  • 在producer阶段,是向broker用Push模式

  • 在consumer阶段,是向broker用Pull模式

在Pull模式下,consumer可以根据自身速率选择如何拉取数据,避免了低速率的consumer发生崩溃的问题

但缺点是,consumer要时不时的去询问broker是否有新数据,容易发生死循环,内存溢出。

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

首先副本数不能超过broker数

  • 第一分区是随机从Broker中选择一个,然后其他分区相对于0号分区依次向后移

  • 第一个分区是从nextReplicaShift决定的,而这个数也是随机产生的

20.Kafka中的事务是怎么实现的?

kafka事务有两种:

producer事务和consumer事务

producer事务是为了解决kafka跨分区跨会话问题,kafka不能跨分区跨会话的主要问题是每次启动的producer的PID都是系统随机给的

所以为了解决这个问题,我们就要手动给producer一个全局唯一的id,也就是transaction id 简称TID

我们将TID和PID进行绑定,在producer带着TID和PID第一次向broker注册时,broker就会记录TID,并生成一个新的组件transaction_state用来保存TID的事务状态信息。当producer重启后,就会带着TID和新的PID向broker发起请求,当发现TID一致时,producer就会获取之前的PID,将覆盖掉新的PID,并获取上一次的事务状态信息,从而继续上次工作

consumer事务相对于producer事务就弱一点,需要先确保consumer的消费和提交位置为一致且具有事务功能,才能保证数据的完整,不然会造成数据的丢失或重复

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

拦截器>序列化器>分区器

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

6836b514f805e1fcb7e86fdedfe8f82f.png

使用两个线程:

main线程和sender线程

main线程会依次经过拦截器,序列化器,分区器将数据发送到RecourdAccumlator(线程共享变量)。再由sender线程从RecourdAccumlator中拉取数据发送到kafka broker

相关参数:

  • batch.size:只有数据积累到batch.size之后,sender才会发送数据。

  • linger.ms:如果数据迟迟未达到batch.size,sender等待linger.time之后就会发送数据。

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

offset + 1

图示:

9f2a679a16e7aa2fa67fd818d83e770c.png

生产者发送数据offset是从0开始的

bc1858cb12534fb06be024e4b334d4f2.png

消费者消费的数据offset是从offset+1开始的

往期推荐

从上帝视角来看 Java 并发框架

Java项目接私活脚手架(附源码)

Java并发之设计模式,设计思想

Java 如何模拟真正的并发请求?

Redis配合Lua实现高并发防止秒杀超卖,实战源码解决方案

刷Java面试题容易忽略的API

批处理框架 Spring Batch 原理讲解

Mysql数据库查询超时,这样优化快速解决问题

7款可视化工具,提高开发效率必备

天秀!搞java的技术人写了本小说:《JavaScript百炼成仙》

55 个细节帮你全方位的完成Java 性能优化的 (珍藏)

Java 实现视频弹幕功能

Java的ClassLoader加载是怎么保证安全的?

Redis分布式锁需要考虑的这些事!

9e4671b2f2eae7aae9c2bd4dd0637620.gif

回复干货】获取精选干货视频教程

回复加群】加入疑难问题攻坚交流群

回复mat】获取内存溢出问题分析详细文档教程

回复赚钱】获取用java写一个能赚钱的微信机器人

回复副业】获取程序员副业攻略一份

14b34cf7e8ff83427f003c3cd13719d4.png

33633d7c2dc40220583cf7ba58a2a89f.gif

戳这儿

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是游戏数据策划面试答案: 1. 什么是游戏数据策划? 游戏数据策划是游戏开发中的一个职位,负责设计并管理游戏中的各种数据,包括但不限于数值、物品、角色、任务等。 2. 你认为数据策划在游戏开发中的作用是什么? 数据策划在游戏开发中的作用非重要,因为游戏中的数据直接影响到游戏的玩法、难度、平衡性、奖励等方面。一个好的数据策划可以使游戏更加有趣、流畅和有挑战性。 3. 你在之前的项目中有哪些数据策划的经验? 我曾经参与了一个角色扮演游戏的开发,负责设计角色属性、技能、装备和任务等方面的数据。通过不断的测试和调整,我最终成功地设计出了一个具有平衡性、趣味性和可玩性的游戏数据。 4. 如何确定游戏中的数值平衡性? 确定游戏中的数值平衡性需要进行大量的测试和数据分析。我们可以通过观察玩家的反馈和游戏数据的变化来确定游戏中的数值平衡性,例如游戏中的经济系统、角色属性、装备等。 5. 如何设计一个好的游戏经济系统? 一个好的游戏经济系统应该具有稳定性、趣味性和可控性。我们可以通过设定货币系统、商店系统、掉落系统等来控制游戏中的经济流通,同时也要虑玩家的需求和反馈,使经济系统更加平衡和有趣。 6. 对于玩家反馈不佳的问,你会怎么处理? 当玩家反馈不佳的问出现时,我会尽快进行数据分析和测试,找出问所在,并尝试进行改善。同时,我也会与其他开发人员进行沟通和讨论,以便更好地解决问。 7. 你认为数据策划在团队中的角色是什么? 数据策划在团队中扮演着非重要的角色。他们需要与其他开发人员进行紧密的沟通和协作,以确保游戏数据的准确性和合理性。同时,他们还需要与玩家进行交流,以了解他们的反馈和需求,从而不断完善游戏体验。 8. 最后,请谈谈你对游戏数据策划这个职业的看法? 我认为游戏数据策划是一个非有挑战性和有意义的职业。通过设计和管理游戏数据,我们可以为玩家提供更好的游戏体验,并且可以与其他开发人员一起创造出令人兴奋的游戏世界。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值