本文为复习期间面试总结

从以下方面对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. Leetcode 24. Swap Nodes in Pairs(详细图解一看就会)

    题目内容 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the ...

  2. Shell编程—正则表达式

    1什么是正则表达式 1.1定义 正则表达式是你所定义的模式模板,Linux工具可以用它来过滤文本.Linux 工具(比如sed编辑器或gawk程序)能够在处理数据时使用正则表达式对数据进行模式匹配. ...

  3. Java拷贝——深拷贝与浅拷贝

    深拷贝和浅拷贝 值类型 vs 引用类型 在Java中,像数组.类Class.枚举Enum.Integer包装类等等,就是典型的引用类型,所以操作时一般来说采用的也是引用传递的方式: 但是Java的语言 ...

  4. Spring Cloud:Consul基础知识

    一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...

  5. 小程序开发-使用xpath解析网页html中的数据

    最新有个微信小程序的开发需求,需要从网页中提取一些元素信息,获取有效数据 1. 了解到微信小程序里面不能直接操作dom元素,所以我们需要使用一些其他的npm包 2. 经过查到各方面的文档,最新决定用x ...

  6. npm 进阶命令知多少(一)

    npm命令知多少(一) 前言 作为前端模块化扎展现形式的npm包,已经在前端开发中不可或缺,熟练掌握npm相关内容,也是前端开发者的一门必修课,那么除了npm publish这类常见内容之外,还有哪些 ...

  7. C014:不用算术分割显示逆序三位数

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int handred,ten,ge; do{ pri ...

  8. nginx 配置下载text等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件.比如txt文件就直接被解析,还有其他文件也是一样. 在nginx.conf配置文件中添加 add_head ...

  9. Kubernetes-12:Secret介绍及演示

    Secret介绍 Secret存在的意义 Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中,可以以Volume或者环境变量的方式使用 ...

  10. [翻译] 发布双屏预览SKD,公布MICROSOFT 365开发者日日期

    [前置提示]:本文翻译工作尚未完工,您可以先看原文QUQ 原文标题:Announcing dual-screen preview SDKs and Microsoft 365 Developer Da ...