本文为复习期间面试总结

从以下方面对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 之间的关系

    • ISR 正在主副本保持备份的副本
    • HW high wather高水位 一般指的是ISR中同步主副本的进度最慢的副本当前正在同步的消息的offset,在HW之前的消息都可以被消费者拉取到
    • LEO log end offset 当前主副本中正在写入的消息 一般是当前分区中最后一条消息的offset+1

    当主副本有消息写入的时候,follower会主动向leader获取消息,每次读消息都会更新HW当HW大于等于LEO时候可以认为是同步完成,副本管理者会想producer报告ack确认消息保存成功。

参考资料

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

kafka面试总结的更多相关文章

  1. Kafka面试你不得不知道的基础知识

    Java内存管理面试指南一 Java基础面试指南一 Java基础面试指南二 Java基础面试指南三 Java基础面试指南四 Java线程面试指南一 Java线程面试指南二 Redis面试指南一 Kaf ...

  2. 028 kafka面试小节

    1.大纲 Kafka控制节点用的是什么? 消费者.生产者是如何理解的? 2.Kafka控制节点用的是什么? 基于zookeeper协调的分布式消息系统 3.消费者.生产者是如何理解的? 消息系统通常都 ...

  3. Kafka面试,看这篇文章就够了

    原文链接:https://mp.weixin.qq.com/s/zxPz_aFEMrshApZQ727h4g** 引言 MQ(消息队列)是跨进程通信的方式之一,可理解为异步rpc,上游系统对调用结果的 ...

  4. 手撕面试官系列(八):分布式通讯ActiveMQ+RabbitMQ+Kafka面试专题

    ActiveMQ专题 (面试题+答案领取方式见主页) 什么是 ActiveMQ? ActiveMQ 服务器宕机怎么办? 丢消息怎么办? 持久化消息非常慢. 消息的不均匀消费. 死信队列. Active ...

  5. 【18】进大厂必须掌握的面试题-15个Kafka面试

    1.什么是Kafka? Wikipedia将Kafka定义为"由 Scala编写的Apache软件基金会开发的开源消息代理项目 ,并且是一个分布式的发布-订阅消息系统. 特征 描述 高吞吐量 ...

  6. 一文告诉你,Kafka在性能优化方面做了哪些举措!

    很多粉丝私信问我Kafka在性能优化方面做了哪些举措,对于相关问题的答案其实我早就写过了,就是没有系统的整理一篇,最近思考着花点时间来整理一下,下次再有粉丝问我相关的问题我就可以潇洒的甩个链接了.这个 ...

  7. kafka 45个题目介绍

    >1.Kafka面试问答 Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景.此外,在这个时代拥有kafka知识是一条快速增长的道路.所以,在这篇文章中,我们收集了 ...

  8. 50道Kafka面试题和解析(转载)

    转载:https://zhuanlan.zhihu.com/p/78912551 前言 Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景.此外,在这个时代拥有kafka ...

  9. 阿里P7Java最全面试296题:阿里天猫、蚂蚁金服含答案文档解析

    [阿里天猫.蚂蚁.钉钉面试专题题目加答案] 不会做别着急:文末有答案以及视频讲解,架构师资料 1. junit用法,before,beforeClass,after, afterClass的执行顺序 ...

随机推荐

  1. Kafka内部实现原理

    Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 1)Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开 ...

  2. 谷歌蜂鸟算法对网站seo优化有何影响

    http://www.wocaoseo.com/thread-89-1-1.html       谷歌在过去三个月里,非常低调的推出了蜂鸟算法,据谷歌技术员表示,此种方法一出,将影响90%网站的排名, ...

  3. 利用Python爬虫刷新某网站访问量

    前言:前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章,当时还觉得蛮有意思的,就保存了一下,但是当我昨天准备复现的时候居然发现文章404了.所以本篇文章仅供学习交流,严禁用于商业用途 很多人学习p ...

  4. Resources.UnloadUnusedAssets

    2017.11.7更新: 其实这个函数就是顾名思义,关键是理解AssetBundle, Asset, GameObject, 资源等之间的关系,参考此文即可: http://www.cnblogs.c ...

  5. qdu-凑数题(01背包)

    Description 小Q手里有n(n<=1000) 个硬币,每枚硬币有一定的金额(200=>x>=1)他想知道,用这些硬币(每枚硬币只能用一次,但可能会有等面值的用两次) 能组成 ...

  6. 持续部署入门:基于 Kubernetes 实现滚动发布

    前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...

  7. Linux—账号管理及命令使用详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在Linux系统中,我们常常会看到目录或文件的所属关系: [root@linux01 ~]# ll -d test.sh -rw ...

  8. 一键部署k8s

    本人学习安装kubernetes时,顺便整理了安装脚本,可以通过执行一个脚本,自动二进制安装好1台master+2台node的k8环境.方便需要学习k8s的同学. 百度网盘:https://pan.b ...

  9. 三年前买的T440p目前淘宝二手价2300左右

    当时可是近六千买的,唉... 有消息说六千多电脑和四千多的区别是多了OEM Windows的价钱,如果一重装,等于把差价抹了... 看来买电脑,买车,买手机都该秉承一个够用就好的原则,不然当时的顶配不 ...

  10. Linux:apache安装

    1.查询是否已安装 rpm -qa httpd 如果已安装,先卸载 发现有依赖包,先把依赖卸载 或者加上--nodeps参数,不考虑依赖,直接卸载   rpm -e --nodeps httpd-2. ...