Kafka面试题01

news2024/11/9 1:44:23

1、kafka有哪些特点

高吞吐,低延迟
可以热扩展
并发度高
具有容错性(即使挂的只剩下一台也可以正常工作)
可靠性高

2、请简述你在那些场景下会选择kafka?kafka的应用

  • 日志收集: 一个公司可以用kafka收集各种服务的log文件,通过kafka以统一接口服务的方式开放给 各种consumer,例如hadoop、solr等。
  • 消息系统:解耦合生产者喝消费者、缓存消息等。
  • 用户行为跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
  • 运营指标:kafka也经常用来记录运营监控数据。包括收集各种分步式应用的数据,生产隔阂总操作的集中反馈,比如报警和报告。
  • 作为流式处理的数据员:比如spark streaming 和flink

3、kafka的设计架构

在这里插入图片描述

1.主题topic和分区partiton

  • topic
    kafka中存储数据的逻辑分类;可以理解为数据库中 表 的概念;
    比如,将app端日志、小程序端日志、业务订单表数据分别放入不通的topic
  • partiton分区(提升kafka吞吐量)
    topic中数据的具体管理单元;
- 每个partiton由一个kafka broker服务器管理;
- 每个topic可以划分多个partiton,分布到多个broker上管理;
- 每个partiton都可以由多个副本;保证数据安全
  • 分区副本replica
    每个topic的每个partiton都可以配置多个副本(replica),以提高数据的可靠性;
    每个partiton的所有副本中,必须有一个leader,其他的就是follower副本;follower定期与leader同步最新的数据;对外提供服务的只有leader;

  • 分区follower
    partiton replica中的一个角色,它通过心跳通信不断的从leader中拉取、复制数据(只负责备份)。
    如果所在的leader节点宕机,follower中会选举出新的leader;

  • 消息偏移量offset
    partiton内部每条消息都会被分配一个递增id(offset);通过offset可以快速定位到消息的存储位置;
    kafka只保证按一个partiton中的消息的顺序,不保证那一个分区的那一个,偏移量的数据只能追加,不能被修改
    在这里插入图片描述
    自我推导设计:

  • kafka是用来存数据的;

  • 现实世界数据有分类,所以存储系统也应有数据分类管理功能,如mysql的表;kafka有topic;

  • 如一个topic的数据全部交给一台server存储和管理,则读写吞吐量有限;

  • 所以,一个topic的数据应该可以分成多个部分(partition)分别交给多台server存储和管理;

  • 如一台server宕机,这台server负责的partition将不可用,所以,一个partition应有多个副本;

  • 一个partition有多个副本,则副本间的数据一致性难以保证,因此要有一个leader统领读写;

  • 一个leader万一挂掉,则该partition又不可用,因此还要有leader的动态选举机制;

  • 集群有哪些topic,topic有哪几个分区,server在线情况,等等元信息和状态信息需要在集群内部及客户端之间共享,则引入了zookeeper;

  • 客户端在读取数据时,往往需要知道自己所读取到的位置,因而要引入消息偏移量维护机制;
    broker服务器:一台 kafka服务器就是一个broker。一个kafka集群由多个 broker 组成。
    生产者producer:消息生产者,就是向kafka broker发消息的客户端。
    消费者consumer

  • consumer :消费者,从kafka broker 取消息的客户端。

  • consumer group:消费组,单个或多个consumer可以组成一个消费组;
    消费组是用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段;
    在这里插入图片描述

2.kafka的数据存储结构

kafka的整体存储结构

  • 数据文件 名称规范:
    生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制
  1. 每个partition的数据将分为多个segment存储
  2. 每个segment对应两个文件:“.index"文件和“.log"文件。
    index和log文件以当前segment的第一条消息的offset命名。
    index索引文件中的数据为: 消息offset -> log文件中该消息的物理偏移量位置;
    Kafka 中的索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引;每当写入一定量(由 broker 端参数 log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小 log.index.interval.bytes的值,对应地可以缩小或增加索引项的密度;
    查询指定偏移量时,使用二分查找法来快速定位偏移量的位置。

消息message存储结构

在客户端编程代码中,消息的封装类有两种:ProducerRecord、ConsumerRecord;
简单来说,kafka中的每个massage由一对key-value构成;
Kafka中的message格式经历了3个版本的变化了:v0 、 v1 、 v2
在这里插入图片描述
各个字段的含义介绍如下:

  • crc:占用4个字节,主要用于校验消息的内容;
  • magic:这个占用1个字节,主要用于标识日志格式版本号,此版本的magic值为1
  • attributes:占用1个字节,这里面存储了消息压缩使用的编码以及Timestamp类型。目前Kafka 支持 gzip、snappy 以及 lz4(0.8.2引入) 三种压缩格式;[0,1,2]三位bit表示压缩类型。[3]位表示时间戳类型(0,create time;1,append time),[4,5,6,7]位保留;
  • key length:占用4个字节。主要标识 Key的内容的长度;
  • key:占用 N个字节,存储的是 key 的具体内容;
  • value length:占用4个字节。主要标识 value 的内容的长度;
  • value:value即是消息的真实内容,在 Kafka 中这个也叫做payload。

4、kafka分区的目的

分区对于kafka集群的好处是:实现负载均衡
分区对于生产者和消费者来说,可以提高并行度,提高效率

5、kafka是如何做到消息的有序性

kafka中的每个partiton中的消息在写入时都是有序的(不断追加),而且单独一个partiton只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息不能保证有序。

6、kafka的高可靠性是怎么实现的?

多副本存储
producer发送数据时可以配置ack=all 并且里面有hw(水位线) 还有leader-epoch(详见http://t.csdn.cn/Wqh94)

7、kafka数据一致性原理

一致性值得是在不论什么情况下,消费者Consumer都能读到一致的数据。
HW高水位线在0.11版本之前,只用了高水位线来保证,但是这个里面会出现一些问题:比如丢失数据,即便是ack等于-1的情况下,也可能会丢失数据
在0.11版本之后,新加了一个角色叫leader的纪元号,根据高水位线和纪元号来处理,再配上ack=-1的时候基本可以保证数据不会丢失

8、kafka在什么情况下会出现消息丢失

  • topic的副本如果只有一个,那么一旦这个副本所在的briker服务器宕机,则可能丢失数据;
  • producer往kafka中写入数据时,如果确认机制参数acks!=all,也可能会造成数据丢失;
  • 不清洁选举机制如果开启,也可能会造成数据丢失(不清洁选举就是说在所有isr副本全部宕机的情况下可以让osr副本成为leader,而osr中的数据显然不安全,那么就算之前的leader重新上线,也会被进行日志截断)

9、怎么尽可能保证kafka的可靠性

复本数>1
ack=all
min.insync.replicas >=2

10、数据传输的语义有几种?

数据传输的语义通常有以下三种级别:
设置消费者里面由enable.auto.commit = true/false

  • 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有有可能被重复传输
  • 精确一次(Exactly once):不会漏传输也不会重复传输

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B站、抖音上那些4K、60帧视频是如何修复的?

如何把一个不清晰的视频变成高清的视频?今天就来教大家视频画质修复把720p的渣画质变成4K超清画质。 相信对于电影和后期爱好者来说,糊成马赛克的画质一定劝退了无数人,那不妨试试这个 牛学长视频修复工具 牛学长视频修复工具通过高级的AI…

Java网络开发(Tomcat)—— 登陆 和 注册功能 的实现 从html 到 jsp 迭代升级 session保存登陆信息

目录 引出登陆功能---从html到jsp1.登陆--用post请求2.用html文件的form表单登陆(1)index.html页面(2)login.html登陆的页面(3)LoginServlet.java处理输入信息的代码(4)登陆成功&…

ChatGPT提示大解析:如何有效定制Prompt并用插件管理

有时候,你可能在编程时遇到难题,需要解决方法。有时候,你在学习新的语言时,想要找到一位悉心的教师。又或者,你可能只是需要一些新的灵感,来润色你的文章。在所有这些情况下,ChatGPT都可以发挥巨…

轻量应用服务器哪款性价比高?

最近云服务器618活动正在火热进行中,选对时间入手自己心仪的云服务器其实可以为你省去一大笔费用,这里先开门见山将三家的云服务器活动粒度做个对比。 腾讯云 懂行的人一看这种配置性价比就会内心无比激动,按照平时的价格根本买不到这么实惠的…

JavaSE基础知识笔记

​1、基础语法 在一个Java源文件中可以声明多个class,但是最多只有一个类可以被声名为public,而且被声名为public的类的类名必须与源文件名相同。 计算机底层都以补码的方式来存储数据!目的是为了简化计算机的结构设计,同时提升运…

如何在Moonbeam设置多重签名钱包,加固资产安全

Moonbeam Safe是以太坊上Safe(先前名为Gnosis Safe)的分叉。Safe于2018年正式推出,并发展成为了以太坊上知名的去中心化托管协议和集体资产管理平台。 Moonbeam Safe可用于创建多重签名Safe钱包,通过配置一个多签(mul…

02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

Web大前端时代之&#xff1a;HTML5CSS3入门系列&#xff1a;Web大前端时代之&#xff1a;HTML5CSS3入门系列 - 毒逆天 - 博客园 1.结构元素 可以理解为语义话标记&#xff0c;比如&#xff1a;以前这么写<div id"nav"></div> 现在偷懒写&#xff1a;&l…

JavaWeb笔记_SpringBoot原理

JavaWeb笔记_SpringBoot原理 配置优先级Bean管理获取BeanBean作用域第三方Bean SpringBoot原理自动配置原理ComponentScan组件扫描Import导入源码跟踪Conditional自定义starter创建aliyun-oss-spring-boot-starter模块创建aliyun-oss-spring-boot-autoconfigure 来源 配置优先级…

opencv、dlib、paddlehub人脸检测

opencv、dlib、paddlehub检测效果对比。dlib和paddlehub的效果相对好一点。 说明&#xff1a;本文只做人脸检测不识别&#xff0c;找识别的不用看本文。 ## 部署说明 # 1. 安装python或conda # 2. 安装依赖&#xff0c;pip install -r requirements.txt # 3. 192.168.1.41 修…

Docker 基本使用

安装 Linux安装 # 1、查看当前Linux系统版本 Linux系统版本需要>3.0 [rootzjrs_test2_152 ~]# uname -a Linux zjrs_test2_152 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [rootzjrs_test2_152 ~]# uname -r 3.10.0-957.el…

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK控制相机数据流的方式2.使用BGAPISDK控…

AOP--@DeclareParents--引入新功能

目录 引入 解析 示例 引入 Java不是动态语言&#xff1b;一旦类编译完成了&#xff0c;我们就很难再为该类添加新的功能了切面能够为现有的方法增加额外的功能&#xff0c;为什么不能为一个对象增加新的方法呢&#xff1f;实际上&#xff0c;利用被称为引入的AOP概念&#x…

从数据开始,构建值得信赖的生成式AI应用

生成式AI有望从根本上打开新世界机遇的大门&#xff1a;从能够个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的定制化内容......生成式AI正在彻底改变企业的运作方式。越来越多的领先企业正在构建可信的生成式AI应用&#xff0c;让它们在…

信息共享、管理协作!工程劳务管理模板让企业内部更加通畅

随着建筑行业的快速发展&#xff0c;工程劳务管理变得越来越复杂&#xff0c;同时企业也需要更加高效地管理劳务人员的信息、工资、考勤等方面。因此&#xff0c;工程劳务管理系统应运而生&#xff0c;帮助企业解决这些问题。作为一款低代码开发平台&#xff0c;百数根据市面上…

面向 MSP 的IT管理

MSP&#xff08;管理服务提供商&#xff09;是通过建立自己的网络运作中心(NOC&#xff0c;Network Operating Center)来实施管理服务的。用户的网络通过WAN与MSP的NOC相连&#xff0c;并使用加密技术保证信息在网络上的传输安全。通过NOC&#xff0c;MSP可以实现远程的管理、实…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 &#xff08;1&#xff09;客户端发送请求到 Director Server&a…

前后端 java 对接海康威视监控-hls实现h5播放

海康的获取监控预览流的接口当中支持 rtsp、rtmp、hls等协议。 这篇文章主要是说hls协议的。 贴上海康的开发平台地址&#xff0c;其中有对应的API&#xff1a;海康开发平台 1、java层面代码 这里除了main方法之外&#xff0c;有两个方法&#xff0c;分别是&#xff1a; 1&am…

【Python】一文教你如何使用 Requests 库

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

审视自己再出发,在职读研从人民大学与加拿大女王大学金融硕士项目起航

有人说&#xff0c;人生并非一帆风顺。是的&#xff0c;在人生的道路上&#xff0c;总会出现各种各样的麻烦。或者认真学习不见成效&#xff0c;或是努力工作得不到赏识。人生中最困难的事情就是审视自己&#xff0c;当我们意识到自己需要提升时&#xff0c;往往是拥有强大能量…

【Linux】线程分离和线程互斥

终于到线程互斥了~ 文章目录 前言一、线程分离 如何理解线程库和线程ID二、线程互斥总结 前言 在上一篇文章中我们学习了线程控制&#xff0c;比如创建一个线程&#xff0c;取消一个线程以及等待线程&#xff0c;这篇文章我们讲两个非常重要的概念&#xff0c;一个是线…