Kafka大厂面试题
约 988 字大约 3 分钟大数据组件KafkaBroker
本章主要介绍Kafka面试题
1. 为什么要使用Kafka
Kafka的作用,好处,应用场景
- 缓冲和削峰: 上游突发流量,下游性能不足,Kafka缓冲。
- 应用解耦:作为接口层,解耦重要业务流程
- 异步通信:系统需要时处理
2. Kafka消费过的消息如何再消费
offset信息是记录在zk中的,可以在redis自己记录一份offset checkpoint,使用该数据进行offset重设。
3. Kafka数据是放在哪里的,为什么速度快
- Kafka采用的磁盘存储
- 速度快是因为:
- Kafka是分布式集群,并行度高
- 读数据采用稀疏索引,可以快速定位
- 顺序写磁盘
- 页缓存+零拷贝技术
4. Kafka查找过程
- 基于位移的查找
- 连接zk,拿到对应topic的partition信息和Leader信息
- 根据需要查找的offset根据二分查找定位了目标segment文件
- 在index文件中,通过物理偏移地址找到最近的一个相对偏移
- 在log文件中,从相对偏移位置开始,顺序查找到offset位置
- 基于时间的查找
5. Kafka怎么保证数据不丢失
- 生产者
ACK机制
0:生产者不等待broker的同步完成确认
1:等待Leader成功收到,在发送下一条
-1:等到follower也同步完成
如果是同步模式,设为0的时候风险很大,设为1也会随着Leader宕机而丢失数据,-1最保险
如果是异步模式:考虑ack(回调)、时间阈值和消息的数量阈值
- 消费者数据不丢
因为offset信息并不是每次消费后的记录的,因此会重复消费,但不会丢数据
例外:两个不同功能的消费者用了同一个groupid
- broker数据不丢
设置副本数量
6. 采集数据为什么选择Kafka
Flume 是一个专用工具被设计为旨在往 HDFS,HBase 发送数据。它对 HDFS 有特殊的优化,并且集成了 Hadoop 的安全特性。
Cloudera 建议如果数据被多个系统消费的话,使用 kafka;如果数据被 设计给 Hadoop 使用,使用 Flume
7. Kafka重启是否会导致数据丢失
- 数据在磁盘,一般不会丢失
- 如果Leader挂掉了,之前follower数据未完全同步,选举成为新的Leader后,其余follower会截掉高于High watermark的数据
8. Kafka宕机了如何解决
- 先考虑业务是否受到影响
- 节点排错和恢复
9. Kafka为什么不支持读写分离
Kafka读写都是和Leader副本进行交互的,是主写主读生成消费模型
读写分离的问题
- 数据一致性问题
- 延时问题,对延时敏感的应用而言,不适用
主读主写的优点
- 简化代码的逻辑实现
- 没有延时的影响
- 在副本稳定的情况下,不会出现数据不一致的情况
10. Kafka数据分区和消费者的关系
一个分区只能由同一个消费者组内的一个消费者进行消费,不同消费者组不影响。
11. kafka内部如何保证顺序,外部组会如何保证消费者顺序
Kafka只能保证partition内是有序的。
一定要做的话就把需要有序的数据打到同一个partition中
12. Kafka数据积压,消费能力不足怎么办
- 增加分区数量,提高消费者的数量
- 下游处理的不及时的话,可以提高每批次拉取的数量
13. Kafka单条日志传输大小
默认1M