首页 > 编程知识 正文

kafka原理和面试笔试题目,rocketmq和kafka区别面试题

时间:2023-05-03 15:27:25 阅读:31341 作者:1205

1、什么是kafka? 能用来做什么? Kafka是一个分布式、高吞吐量、可持续、自动负载平衡的消息队列。

不仅可以实现传统意义上的MQ功能,还可以实现异步解耦削峰

也可以作为大数据的流处理平台。

2、为什么kafka的安装需要依靠Zookeeper? 部署中心,管理中介、主题、分区、客户信息和包括数据更改在内的信息。 负载平衡,Broker在ZK上注册watch,感知Broker的上线。 集群管理和选举,选举产生控制器。 3、pull和push、kafka支持哪种消费模式? 你为什么这么设计? 因为在推送模式下,如果消费者生成消息的速度远远大于消费者消费消息的速度,kafka支持的拉动将由消费者承担(例如

塞到你嘴里直到切掉)。 另外,消费者一次可以自行控制获取多少条信息,由max.poll.record控制。

4、托普IC的用途是什么? 为什么Kafka没有队列? Topic为消息分类生产者与Topic、Topic与消费者的关系均为多对多。 一个生产者可以向多个Topic发送消息,并且一个消费者可以从多个Topic接收消息。

5、分区分区的作用是什么? 为了实现可扩展性,提高并发性。 如分库分表,还实现了横向扩展负载的目的。

6、分区数和拷贝数怎么设定? 分区数必须使用官方提供的测试工具kafka-producer-perf-test.sh和kafka-producer-perf-test.sh进行测试,具体取决于项目的具体情况

复制数也可以通过测试脚本获得最佳解,但复制数必须少于Broker数。 否则会报告错误。

7、分区副本在Broker中是如何分布的? 如果有三个Broker,一个Topic有两个分区,每个分区有两个副本,您会想到什么分布?

第一个分区的第一个副本的放置位置是从broker集合中随机选择的。 其他分区的第一个副本的放置位置相对于第一个分区依次向后移动。 每个分区的其馀副本相对于第一个副本的放置位置实际上由nextReplicaShift确定,该数量也是随机生成的。 8、分段的作用是什么? 如果将一个分区划分为多个分段,则一个分区不会太大,不会减慢消息查询的读取速度。 提高查询读取消息的效率。

9、消费者组的意思是什么? 客户组是消费者组的意思,多个客户通过设置相同的组id来组成一个客户组。 同一Consumer Group中的Consumer使用同一主题是互斥的,一个分区只能由组中的一个Consumer使用。 通过多个消费者消耗一个Topic,获得消费消息的吞吐量

10、消费者组上次消费的偏移量记录在哪里? 怎么更新? Consumer Group上次消耗的偏移记录在_consumer_offset的Topic中,主要存储在GroupMetadataOffsetAndMetadata两个对象上这里保存了OffsetAndMetadata消费群体以及partition和offset位移信息的元数据。

Consumer Group偏移仅在消费者消费和提交消息后更新。

11、生产者的信息如何选择分区? 如果在创建消息时指定了分区,则前往指定的分区。 没有创建分区,而是使用自定义的分区机器。 根据分区机器计算哪个分区。 如果未指定分区值,但有key,则使用缺省分区设备DefaultPartitioner将key的散列值和topic的分区数相加,得到分区值; 如果没有partition的值,也没有key的值,则在第一次调用时随机生成整数,然后对每个调用用该整数递增,取该值和topic可用的partition的总数,得到partition的值。 是所谓的round-robin算法。 12、生产者acks 1 0 -1的意思是什么? acks=0,Broker在收到消息时返回(尚未写入磁盘)。 延迟最低,Broker发生故障的情况下,丢失数据的风险很大。 acks=1,Partition的leader放弃成功之前返回ack,如果follower同步成功之前leader发生故障,则数据会丢失。 acks=-1,Partition的leader和follower全部掉落后返回ack。 13、邮件的主要物理存储文件是什么?

14、Kafka有什么索引类型? 消息如何在索引中搜索? 偏移索引和时间戳索引。

例如,搜索偏移为10002673的消息。

消费的时候能行

够确定分区的,所以第一步是找到在哪个segment 中。Segment文件是用base offset命名的,所以可以用二分法很快确定(找到名字不小于10002673的segment)。这个segment有对应的索引文件,它们是成套出现的。所以现在要在索引文件中根据offset找position。得到position之后,到对应的log文件开始查找offset,和消息的 offset进行比较,直到找到消息。 15、kafka的稀疏索引,间隔由什么决定?为什么不用B+Tree?

间隔有消息的大小决定,只要写入消息超过4K,则偏移量索引增加一条记录。

16、Kafka的日志文件不可能无限扩大,那么可以通过哪些方式释放磁盘空间?

可以有两种方式释放,一种是delete删除,一种是compact压缩。

delete方式,是通过定时任务来执行的,执行间隔默认是5分钟,可以设置。也可以通过配置,确定哪些消息需要删除。

compact方式,是通过保存key相同的最后一个value,来进行压缩的。

17、Kafka副本Leader是怎么选举的?谁来选举?选谁为Leader?什么是AR?什么是ISR?什么是OSR?

副本的leader是通过Controller来选举的 ,使用微软的PacificA算法。在这种算法中,默认是让ISR中第一个replica变成leader。比如ISR是1、5、9,优先让1成为leader。

AR是Assigned-Replicas,一个分区所有的副本。

ISR是In-Sync Replicas,是这些所有的副本中,跟leader 数据保持一定程度同步的。

OSR是Out-Sync Replicas,是跟leader同步滞后过多的副本。

18、Kafka副本follower怎么向Leader同步?什么是HW?什么是背后的洋葱?

HW(Hight Watermark)是副本水位值,表示分区中最新一条已提交(Committed)的消息的Offset。

背后的洋葱:Log End Offset,Leader中最新消息的Offset。

follower节点会向Leader发送一个fetch请求,leader向follower’发送数据。follower接收到数据响应后,依次写入消息并且更新背后的洋葱。leader更新HW (ISR最小的背后的洋葱)。 19、kafka的offset怎么维护?存在哪里?什么时候更新?

同10

20、一个消费组中的消费者与分区的关系是什么样的?例如topic有3个分区,假如有2个消费者,怎么分配?假如有4个消费者,怎么分配?

假如Topic有3个分区,2个消费者;

这里涉及到,消费者配置是消费策略,如果是RangeAssignor(范围分配),则可能的结果是,{(1,2)(3)}或者{(1){2,3}}

如果是RoundRobinAssginor(轮询),则可能是{(1,3)(2)}

如果是StickyAssignor(粘滞),可能是{(1,2)(3)};{(1){2,3}};{(2){1,3}}

假如是3分区,4个消费者的话,前3个消费者一个人一个,第四不消费。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。