Kafka大厂面试题

余生约 988 字大约 3 分钟大数据组件KafkaBroker

本章主要介绍Kafka面试题

1. 为什么要使用Kafka

Kafka的作用,好处,应用场景

  1. 缓冲和削峰: 上游突发流量,下游性能不足,Kafka缓冲。
  2. 应用解耦:作为接口层,解耦重要业务流程
  3. 异步通信:系统需要时处理

2. Kafka消费过的消息如何再消费

offset信息是记录在zk中的,可以在redis自己记录一份offset checkpoint,使用该数据进行offset重设。

3. Kafka数据是放在哪里的,为什么速度快

  1. Kafka采用的磁盘存储
  2. 速度快是因为:
    1. Kafka是分布式集群,并行度高
    2. 读数据采用稀疏索引,可以快速定位
    3. 顺序写磁盘
    4. 页缓存+零拷贝技术

4. Kafka查找过程

  1. 基于位移的查找
    1. 连接zk,拿到对应topic的partition信息和Leader信息
    2. 根据需要查找的offset根据二分查找定位了目标segment文件
    3. 在index文件中,通过物理偏移地址找到最近的一个相对偏移
    4. 在log文件中,从相对偏移位置开始,顺序查找到offset位置
  2. 基于时间的查找

5. Kafka怎么保证数据不丢失

  1. 生产者

ACK机制

0:生产者不等待broker的同步完成确认

1:等待Leader成功收到,在发送下一条

-1:等到follower也同步完成

如果是同步模式,设为0的时候风险很大,设为1也会随着Leader宕机而丢失数据,-1最保险

如果是异步模式:考虑ack(回调)、时间阈值和消息的数量阈值

  1. 消费者数据不丢

因为offset信息并不是每次消费后的记录的,因此会重复消费,但不会丢数据

例外:两个不同功能的消费者用了同一个groupid

  1. broker数据不丢

设置副本数量

6. 采集数据为什么选择Kafka

Flume 是一个专用工具被设计为旨在往 HDFS,HBase 发送数据。它对 HDFS 有特殊的优化,并且集成了 Hadoop 的安全特性。

Cloudera 建议如果数据被多个系统消费的话,使用 kafka;如果数据被 设计给 Hadoop 使用,使用 Flume

7. Kafka重启是否会导致数据丢失

  1. 数据在磁盘,一般不会丢失
  2. 如果Leader挂掉了,之前follower数据未完全同步,选举成为新的Leader后,其余follower会截掉高于High watermark的数据

8. Kafka宕机了如何解决

  1. 先考虑业务是否受到影响
  2. 节点排错和恢复

9. Kafka为什么不支持读写分离

Kafka读写都是和Leader副本进行交互的,是主写主读生成消费模型

读写分离的问题

  1. 数据一致性问题
  2. 延时问题,对延时敏感的应用而言,不适用

主读主写的优点

  1. 简化代码的逻辑实现
  2. 没有延时的影响
  3. 在副本稳定的情况下,不会出现数据不一致的情况

10. Kafka数据分区和消费者的关系

一个分区只能由同一个消费者组内的一个消费者进行消费,不同消费者组不影响。

11. kafka内部如何保证顺序,外部组会如何保证消费者顺序

Kafka只能保证partition内是有序的。

一定要做的话就把需要有序的数据打到同一个partition中

12. Kafka数据积压,消费能力不足怎么办

  1. 增加分区数量,提高消费者的数量
  2. 下游处理的不及时的话,可以提高每批次拉取的数量

13. Kafka单条日志传输大小

默认1M