当前位置: 首页 > article >正文

kafka常见面试题总结

Kafka 核心知识解析

一、Kafka 消息发送流程

Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 RecordAccumulator 中拉取消息并发送到 Kafka Broker。

二、Kafka 分区的目的

  1. 合理使用存储资源与负载均衡
    分区会分布在不同 broker 上,通过将海量数据分区存储在各个 broker,可以实现负载均衡的效果,以此达到合理使用存储资源的目的。
  2. 提高并行度
    生产者能够以分区为单位发送消息,消费者也以分区为单位消费数据,这样大大提高了并行度。

三、Kafka 消息的有序性保障

  1. 生产者端
    最简单的方式是设置一个分区,因为 Kafka 在同一个分区内传递消息是有序的。或者可以选择同步式发送模式,不过这种模式效率较低。
  2. 消费者端
    可以设置单个消费者单个分区,以此确保消息的有序性。

四、ISR、OSR、AR 概念

ISR 是 Kafka 集群中还存活的副本,OSR 是在规定时间内没有做出响应被认为已经挂掉的副本,AR 包含 ISR 和 OSR。

五、Kafka 消息丢失情况及应对

  1. 生产者端消息丢失
    如果 acks 设置不当很可能导致消息丢失,acks 有三种配置级别,最高级别是 -1 或者 all,在此级别下生产者会等待整个集群回应接收到消息才认为消息发送成功,安全性更高。不过,由于网络或服务状态问题也可能导致发送消息出现问题,解决此问题可能会涉及到事务。
  2. 消费者端消息丢失
    这和偏移量有很大关系,不合理的偏移量提交一般会导致消息丢失。

六、保证 Kafka 可靠性的方法

  1. 生产者端
    考虑将 acks 参数调为 -1 或者 all,设置调优重试机制,启动幂等性(保证同消息只持久化一次),使用开启事务来提交生产者消息并使用同步提交方式(send(record).get())。
  2. 消费者端
    可以选择手动控制偏移量的提交,这样能避免依赖自动提交时因故障导致的错误偏移量。

七、Kafka 数据去重

Kafka 0.11 版本以后出现了幂等性和事务两个特性来保证数据去重。幂等性通过 PID、Partition、SeqNumber 判断消息是否重复,重复的数据 broker 只会持久化一条。通过事务提交,可以在事务完整提交前对消费者隐藏消息,只有全部事务完整完成消费者才会消费消息,类似于 Java、mysql 等的事务。

八、生产者提高吞吐量的方法

可以调大批次大小参数 batch.size、调整等待时间 linger.ms 参数、设置压缩格式 compression.type 参数压缩数据、调增缓冲区大小 RecordAccumulator。

九、Zookeeper 在 Kafka 集群中的作用

Zookeeper 相当于 Kafka 集群的一个代理,Kafka 的每个 broker 会在 Zookeeper 中进行注册,并保存一些元数据信息,比如主题创建的分区副本等信息。Zookeeper 还会对 Kafka 集群进行 leader 的选举,当某个 leader 出现故障,Zookeeper 会根据选举机制选举新的 leader,同时还能起到负载均衡的效果。总的来说,Zookeeper 协助 Kafka 实现高可用。

十、Kafka 集群中的 Leader 选举机制

当一个分区的 leader 出现故障时,集群会给分区选举新的 leader 以保证该分区的正常运行。选举会根据 Replicas 的顺序,并对照 Isr 来跳过实际不存活的节点。

十一、Kafka 处理数据乱序问题的方法

Kafka 消息传递过程中每个分区的消息是有序的,但存在多个分区时,由于每个分区传递数据的顺序不同会导致数据乱序问题。解决数据乱序问题需要只设置一个分区,并且开启幂等性,acks 设置为 all 或者 -1。

十二、Kafka 中节点的服役和退役

  1. 服役
    首先准备一台配置好环境的服务器,然后写一个需要服役的主题的 json 文件并为之生成负载均衡计划,将计划储存在 json 文件中,使用 kafka - reassign - partitions.sh 命令执行计划,最后查看主题详情确认是否服役成功。
  2. 退役
    和服役操作相仿,重新生成执行计划并执行即可。

十三、Kafka 中 Leader 和 Follower 故障重启后的数据同步

  1. Follower 挂了再启动
    如果是 follower 挂了不影响其他的副本,当 follower 再次启动时,会根据它挂掉时的分区内最小的偏移量 offset 值的后一位从 leader 中同步。
  2. Leader 挂了
    如果 leader 挂了,此时需要重新选举 leader,其他 follower 会从此时分区内偏移量最小的后一个位置重新从新的 leader 中同步数据。

十四、打破 Kafka 初始化时 Leader 选举规律的方法

这种情况一般很少出现,大概率是因为某个任务量巨大,而集群里服务器配置不同,有的服务器性能比较低。此时需要手动设置副本存储计划,指定 replicas 都在哪些节点里执行创建的计划。


http://www.kler.cn/a/386067.html

相关文章:

  • 游戏引擎学习第九天
  • mybatisPlus打印sql配置
  • ES6更新的内容中什么是proxy
  • windows tomcat 报错后如何让窗口不闪退
  • 深度学习的多主机多GPU协同训练
  • AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码
  • C++继承(图文非常详细)
  • html+js+css实现拖拽式便签留言
  • SSL/TLS握手过程
  • 渗透测试专业名词解释
  • 罗技M590鼠标无法连接到无线接收器
  • 室内定位论文精华-20241108
  • 软件需求规格书评审报告,系统需求设计申评审,代码和测试过程评审报告,软件各类资质评审资料(word原件)
  • 书生实战营第四期-基础岛第四关-InternLM + LlamaIndex RAG 实践
  • uni-app开发小程序【uni.showToast字数超过两行自动省略显示不全问题】
  • 论文阅读:基于语义分割的非结构化田间道路场景识别
  • SpringBoot开发——Spring Boot 3种定时任务方式
  • 深入探索哈尔滨二级等保下的负载均衡SLB及其核心算法
  • FineBI帆软 FCA-数据分析理论 正确答案
  • 【spark面试】spark的shuffle过程
  • 【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)
  • Python世界:力扣题704二分查找
  • 大型语言模型(LLMs)关键技术指南
  • 科技改变生活:最新智能开关、调光器及插座产品亮相
  • ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
  • 无人机影像处理系统技术选型