前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kafka面试总结

kafka面试总结

作者头像
Spark学习技巧
发布2021-03-05 15:01:10
6810
发布2021-03-05 15:01:10
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧

转自:https://www.cnblogs.com/threecha/p/13737421.html

从以下方面对kafka面试进行总结:基本原理架构/项目实践/生产者/消费者/协调者/存储层/控制器

基本原理架构

  1. 简单讲下什么是kafka[一句话概括/架构图]
  2. 消息队列选型 你们为什么不选用其他消息队列
  3. ZK 在消息队列中的作用是什么 注册中心[作为共享存储保存了kafka集群和客户端的相关信息]
  4. broke ISR AR Topic Partition Offset ConsumerGroup
    • Partition: kafka分区模型 每个分区都是一个有序的独立的不可变的记录序列,新的消息会不断-的追加到序列末尾,分区的offset都是从0开始。kafka只能保证消息在单个分区的有序
    • Offset:偏移量 通过offset+partition+topic可以定位到唯一一条消息
    • broke:消息代理服务器 可以认为是一台独立的机器
    • Topic:消息主题
    • ConsumerGroup:消费者组
    • ISR:副本冗余[正在和主副本保持同步的备份副本 只要ISR中还有一个节点是存活的就能保证消息不丢失 主副本和备份副本都有消息,主挂可切换副]
    • AR: 所有副本[包含主副本和正在同步的副本]
    • OSR:被踢出ISR的叫OSR,当同步进度追上 会重新加入ISR
  5. kafka有那些消息模型 队列模型和发布订阅 kafka使用消费者组统一了上面2种消息模型。[队列1对1/订阅1对多]
  6. kafka为什么这么快 追加方式写入 producer层选择分区并行写入数据[避免全量消息提交到协调阶段在计算分区] 使用消息batch[消息批 减少通讯次数]
  7. kafka follower如何与leader同步数据
  8. kafka节点之间消息如何备份的
  9. kafka消息是否会丢失为什么
  10. kafka的lead选举机制是什么
  11. kafka 的消息保障方式有那些

项目实践

  1. ACK 0 -1 1分别代表什么
    • [-1] 也就all 需要等待ISR中所有都同步完成
    • 1 默认的只需要等待主副本同步完成即可
    • 0 不确认就开始发送下一条消息
  2. 你们使用了kafka事务吗
  3. 消息队列丢失数据如何处理 这个问题可以分为三个方面 生产者 消费者 消息队列
    • 生产者方面我们使用的异步回调的方式,在收到回调的时候若消息没有发送成功,我们会记录再次发送。
    • 消费者 消费者的数据丢失可以认为是提交了offset但是数据处理失败了,我们使用的手动提交在处理成功后在提交offset 不会遇到这个问题。但是要注意消息处理时间不能过长,如果处理过长还没提交offset管理者可能会认为当前消费者下线从而触发reblance
    • 消息队列数据丢失 我们在kafka配置了ack = -1 要求所有ISR都确认同步了消息才给producer发送ack 所以可以保证消息不会丢失。

生产者

  1. 生产者消息发送的几种方式 同步阻塞 异步非阻塞 [都是通过send方法实现的]
  2. 生产者如何为消息选取分区的 若消息没有设置key loadblance写入partition。如设置了key murmur2(key) mod PartitionNum
  3. 简单讲下生产者的工作流程 1.主线程将消息封装到ProducerRecord[partition/key/value/key/时间戳] 2.client对ProducerRecord进行序列化 3.根据分区策略确定分区[无key轮询有key murmur2(key) mod PartitionNum] 4.将消息放入缓存区[每一个分区对应一个双端队列,] 由sender线程将一个批次的消息batch的消息发送到对应的broker
  4. 生产者如何批量的发送消息 sender的作用:归类消息为每个目标节点建立一个请求 sender线程并不真正发送客户端请求 sender线程会去遍历记录收集器中根据分区分好组的消息batches,将相同目标节点[NodeId]的batches的消息归类,为相同目标节点的[NodeId]创建一个请求发送消息。 1.消息放入记录收集器时会按分区进行分组,存放到对应的batches,分区队列保存了即将发送消息的批记录。 2.sender线程可以使用单线程迭代

消费者

  1. 什么是管理者 管理者是消费者组中的概念,用于对同一个消费者组中的所有消费者进行协调。
  2. 什么是reblance 简单来说就是消费者消费消息出现不均衡,会通过reblance达到动态平衡的过程。通常有如下几个方面
    • 消费者组订阅的主题发生变化
    • 消费者消费的分区数量出现变化
    • 消费者组中的消费者数量发生变化
  3. 消费者什么时候会再次加入消费者组 消费者只有在出现reblance的时候会出现再次加入消费者,分为如下步骤1.消费者准备好自身状态2.和协调者发送加入消费者组的请求3.成功加入消费者组,分配分区开始消费消息。
  4. 说下2种消费模式 消费模式可分为订阅模式和分配模式 我们项目中有4个分区,使用的订阅模式 设置了4个消费者。每个消费者独立消费一个分区[由协调者安排]
    • 订阅模式 消费者订阅指定主题,由协调者协调消费的分区
    • 分配模式 由消费者指定消费的分区。此时协调者不参与
  5. ISR HW LEO 之间的关系 当主副本有消息写入的时候,follower会主动向leader获取消息,每次读消息都会更新HW当HW大于等于LEO时候可以认为是同步完成,副本管理者会想producer报告ack确认消息保存成功。
    • ISR 正在主副本保持备份的副本
    • HW high wather高水位 一般指的是ISR中同步主副本的进度最慢的副本当前正在同步的消息的offset,在HW之前的消息都可以被消费者拉取到
    • LEO log end offset 当前主副本中正在写入的消息 一般是当前分区中最后一条消息的offset+1

参考资料

  • kafka实战
  • kafka技术内幕
  • kafka在公司项目实践

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本原理架构
  • 项目实践
  • 生产者
  • 消费者
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档