锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的, 接下来的是今日的面试题:
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
**
**
全部内容在git上,了解更多请点我头像或到我的主页去获得,谢谢**
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net