面试题百日百刷-kafka篇(五)

demo软件园 2023-04-18 21:57:59

锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的,接下来的是今日的面试题:

1.请简单描述一下kafka中消费者的负载均衡机制

Kakfa的消费者负载均衡规定,在一个消费者组内,监控某一个topic的消费者的数量最多和这个topic的分片数量是相等的 如果大于了分片的数量,必然会有消费者处于闲置的状态.

2.当消费者无法及时消费kafka中数据,出现了消息积压,如何解决呢?

1)可以增加消费者的数量(注意:最多和topic的分片数量相等,并保证都在一个组内)

2)如果无法增加,可以调整topic的分片数量,以此来增加更多的消费者

3)调整消费者的消息的机制,让其消费的更快

3.请说明kakfa中消息的存储和查询的机制

在kafka中,数据的存储都是分布式存储,一个topic的数据被分在了多个分片上,然后最终让每个分片的多个副本来存储,而副本的数据就是存储在kafka的设定的数据目录下,在每个副本下,数据都是分文件段的形式来存储,一个文件段中主要包含两个文件一个log文件.一个index文件,index文件存储了log数据文件的索引信息,保证后续的查询更快,每个文件段最多存储1GB的数据,达到后,就会滚动形成一个新的文件段,同时文件名称代表了此文件存储消息的起始偏移量信息

文件查询机制:当查询某一个topic的也是先去从各个主副本中确定数据在那个副本中,然后找到这个副本的对应的文件段,接着查询这个文件段中index文件,找到消息在log文件的物理偏移量位置,最终到log文件中顺序查询到这条消息

4.请说明kafka生产者的数据分发策略有几种?

1) hash取模计算法 在发送数据的时候需要传递 key和 value .默认根据key的hash

2)粘性分区(2.4版本下:轮询方案 )

当生产者去发送数据时候,一般都是采用批量的发送方案,当发送一批数据到broker端后 首先会先随机选择其中一个分片,然后尽可能粘住这个分片,将这一批数据全部交给这一个分片老版本轮询方案:

当生产者去发送数据时候,一般都是采用批量的发送方案,当发送一批数据到broker端后,根据分片的数量,将一批数据切分为多个小的批次,一个批次对应一个分片,然后写入到topic的各个分片上

粘性分区好处:减少中间这个切分的方案,直接将一批全部写入给某一个分片即可同时也会减少了中间ack响应的次数 从而来提升效率

3)指定给某一个分片:在发生数据的时候,可以设置定制的分区编号,来实现

4)自定义分发策略:

4.1)创建一个类,实现 Partitioner接口, 4.2)重写其接口中方法: partition(主要的方法) close

partition方法中参数:

String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, cluster cluster :通过此对象 可以获取对应topic有几个分片

4.3)将自定义的分区类 配置到生产者的配置对象中:

key: partitioner.class

value: org.apache.kafka.clients.producer.internals.DefaultPartitioner

了解更多请点我头像或到我的主页去获得,谢谢

0 阅读:2

demo软件园

简介:分享面试题、软件、学习资源、源码相关内容