“Kafka面试攻略:核心问题与高效回答”

1,生产者发送消息的原理

发送消息的过程中,涉及到两个线程,main线程和sender线程,main线程会创建一个双端队列,main线程向双端队列发送消息,sender线程从双端队列里拉取消息,发送给Kafka Broker。

2,如何给数据去重

幂等性就是指生产者不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了数据不重复

ACK级别调成-1,分区的副本数要大于等于二,ISR最小副本数也要大于等于二

什么是ISR ISR就是指只保留存活的leader和follower的队列

3,如何保证数据的安全性

kafka提供了三种ACK级别

1,acks=0:生产者向leader发送消息不会等待应答,认为消息发送成功,这种方式效率较高,可靠性最差,可能导致数据的丢失。

2,acks=1:生产者向leader发送消息给leader,leader拿到数据后应答之后挂掉了还没来得及同步给follower,但是生产者接到应答后觉得已经发送成功了,这个leader挂掉后会重新选举一个leader,这个时候leader向生产者要数据,但是生产者觉得已经发送成功了,就不会给新的leader发数据,导致数据的丢失

3,acks=-1,生产者向leader发送消息,leader开始同步给其他的follower,leader和ISR队列里面的所有节点收齐数据后应答,否则不会走,但是此时有一个follower出问题了迟迟同步不了,这个时候就需要用到ISR,ISR里面都是存活的leader,如果有follower挂了就会被踢出ISR队列。默认时间是30秒。

这还不是最可靠的

数据完全可靠的条件=ACK级别设置为-1+分区副本数大于等于二ISR里面应答的最小副本数大于等于2

4.如何解决数据积压的问题?

1,如果是Kafka的消费能力不足,则可以考虑增加主题Topic的分区数,并同时提升消费组的消费者数量。

2,如果是下游的数据处理不及时;提高每批次拉取的数量,批次拉取数据过少使处理的数据小于生产的数据,也会数据积压。

5,Kafka对leader的选举机制。

Kafka集群中会有一个broker的Controller会被选举位controller leader,负责管理集群broker的上下线,所有topic分区副本分配和leader选举。

leader的选举规则:首先要在ISR里存活,按照ar的排名在前的优先。

6,Kafka如何提高吞吐量?

1,如果是生产者要提高吞吐量的话,

首先要调整batch.size的大小,默认的批次是16k,linger.ms等待时间,,修改为5-100ms,compression.cype:压缩snappy,设置缓冲区大小RecordAccumlator 修改为64m。

2,如果是要提高消费者吞吐量的话,

1,如果是Kafka的消费能力不足,则可以考虑增加主题Topic的分区数,并同时提升消费组的消费者数量。

2,如果是下游的数据处理不及时;提高每批次拉取的数量,批次拉取数据过少使处理的数据小于生产的数据,也会数据积压。

7,如何做到高效读写数据

因为Kafka本身是分布式集群,可以采用分区技术,并行度高,读写数据采用稀疏索引,可以快速定位要消费的数据,顺写磁盘,页缓存+零拷贝技术。

8,offect机制

我们要如何指定offect消费

Kafka提供了seek方法,可以让我们从分区位置开始消费。

面试题:问:假如 kafka 崩了,重启之后,想继续消费,怎么做?

1、确定要消费的主题是哪几个

2、使用命令或者其他的组件查看 __consumer_offset 主题下的偏移量信息,找到我们关心的主题再崩溃之前消费到了哪里。

3、使用 java 代码,里面有一个非常重要的方法 seek,指定需要消费的主题,分区以及偏移量,就可以继续消费了。

offect位移

记录消费到哪里的这个值,就是偏移量。

记录:哪个主题,哪个分区,哪个位置。

相关推荐
此时不提桶,更待何时5 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
时间的拾荒人8 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试
yumgpkpm8 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
沐言人生9 小时前
又一个神级考公脑库-22,375篇真题终于按考点整理了
后端·面试
方方洛9 小时前
ray教程-00-前言与导读
人工智能·分布式·机器学习
方方洛9 小时前
ray教程-01-认识Ray
人工智能·分布式·机器学习
for_ever_love__10 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
救救孩子把10 小时前
Agent面试题-记忆治理-上下文-多Agent协作与工程落地
面试·agent·多agent·agent记忆·agent面试题·上下文治理
泡干脆面就番茄11 小时前
HDFS读写流程与MapReduce原理深度解析(面试高频考点)
hdfs·面试·mapreduce
bksczm11 小时前
0基础面试3
面试·职场和发展