kafka面试十五题

1、kafka消息发送的流程

消息经过main线程里的拦截器(可选)、序列化器、分区器。分区器将数据发送到分区中,每个分区创建一个双端队列(分区是在内存中完成的),内存总大小为32M,每个批次的大小为16K。当batch.size到达16k或者linger.ms设置的时间到了的时候,线程sender不断地从双端队列里拉信息。并封装成 NetworkClient 对象。然后执行网络IO,最后发送到kafka server

2、Kafka 的设计架构

1)Producer:消息生产者,就是向 Kafka broker 发消息的客户端。 
2)Consumer:消息消费者,向 Kafka broker 取消息的客户端。 
3)Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消 费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。 
4)Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 
5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。 
6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。 
7)Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower。
8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。 
9)Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。

3、Kafka 分区的目的?

(1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。 

(2)提高并行度,生产者可以以分区为单位发送数据;消费者可以以分区为单位进行消费数据。

4、你知道 Kafka 是如何做到消息的有序性? 

Kafka通过分区(Partition)和分区内的消息顺序(Ordering)来保证消息的有序性。在Kafka中,每个主题(Topic)可以分为一个或多个分区,而每个分区内的消息是有序存储的。

  具体来说,Kafka中的每个消息都会被附加到特定的分区末尾。生产者可以选择性地指定要将消息发送到的特定分区,或者如果未指定分区,则可以使用分区器(Partitioner)来决定消息应该发送到哪个分区。默认情况下,Kafka会使用一种轮询的分区策略,它会将消息均匀地分布到所有分区中,以确保负载均衡。

5、ISR、OSR、AR 是什么?

AR = ISR + OSR

Kafka 分区中的所有副本(包含Leader)统称为 AR(Assigned Repllicas)

ISR,表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms   参数设定,默认 30s。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。 
OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本.

6、Kafka 在什么情况下会出现消息丢失

1)kafka在producer端的消息发送采用的是异步发送或者同步发送,可能因网络波动和消息太大超过了broker承受范围,导致丢失数据

2)数据从producer端push过来后,broker端需要将数据持久化存储到磁盘中,消息存储是异步存储的,按照一定的消息数量和间隔时间进行存储,如果在存储的时候broker挂了,此时选举了一个落后Leader 很多的Follower成为新的Leader,那么落后的消息就会丢失、

7、怎么尽可能保证 Kafka 的可靠性

数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2

8、Kafka中如何做到数据唯一,即数据去重?

 开启幂等性,但幂等性只能保证单分区单会话内不重复,如果Kafka集群挂了又重启,之前的数据还会发送一次,数据就又重复了,此时就需要事务了,开启事务的同时必须开启幂等性

9、生产者如何提高吞吐量?

1、batch.size:批次大小,默认16k 
2、linger.ms:等待时间,修改为5-100ms
3、compression.type:压缩snappy 
4、 RecordAccumulator:缓冲区大小,修改为64m

10、zk在kafka集群中有何作用

kafka通过zk进行集群管理,并且Kafka集群的broker信息、topic和partition的状态信息都会存储在zk节点上,当有变化时,zk的信息也会更新,zk还负责kafka中分区leader的选举

11、简述kafka集群中的Leader选举机制

1)每一个broker上线时,会在zk中进行注册

2)每个broker中都有一个controller,controller会争先抢占zk中 controller节点的注册权,谁先抢到,谁选举时说了算。假如broker0中的controller中抢到了,那它就是说了算的人。该controller一直监听ids节点是否有挂掉的节点。

3)选举规则是:在ISR中存活为前提,按照AR中排在前面的优先,例如 ar[1,0,2] ,isr[1,0,2],那么Leader会按照1,0,2 进行顺序的轮询。

4)选举出来的新节点,注册到zk中,将信息记录在zk中。

5)其他contorller将zk中的信息同步下来。

6)假定broker中的leader挂掉了,会进行重新的选举。

7)客户端发送消息给Leader,Leader记录数据,落盘,形成Log,Log底层使用的是Segment,Segment底层每一个G,是一个单独的文件,1G内的数据要想查找迅速又分成了两个文件 log和index

12、kafka是如何处理数据乱序问题的。

分区保证顺序:Kafka 将消息按 分区 存储,每个分区内部的消息顺序是严格保证的。当消费者从一个分区消费消息时,消息的消费顺序与其写入顺序一致。

分区策略:生产者可以根据消息的 key 将消息发送到特定分区,确保同一个 key 的消息始终发送到同一个分区,从而保持顺序。

消费者组管理:每个消费者组内部的每个消费者处理不同的分区。Kafka 确保每个分区只会有一个消费者来消费,从而避免了同一个分区的消息乱序。

幂等性和重试机制:为了避免消息丢失和乱序,Kafka 允许生产者启用幂等性,确保重复消息不会影响顺序,并且支持重试机制来保证消息成功传输。

13、kafka中节点如何服役和退役

服役:1)创建新节点

           2)执行负载均衡操作

     1.创建一个要均衡的主题  2.生成一个负载均衡的计划  3.创建副本存储计划  4.执行副本存储计划

退役:先退役一台节点,生成执行计划,然后按照服役时操作流程执行负载均衡。

14、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?

leader故障之后会在ISR中选出一个新的Leader,为保证多个副本之间的数据一致性,其余的Follower会先将log文件高于HW的部分截掉,然后从新的Leader同步数据。

由于数据同步的时候先进入Leader,随后同步给Follower,假如Follower挂掉了,Leader和其他的Follower 继续往前存储数据,挂掉的节点从ISR集合中剔除,此时挂掉的Follower又重启了,它会先从上一次挂掉的节点的HW开始同步数据,直到追上最后一个Follower为止,此时会重新回归ISR。

15、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?

在Kafka中,初始化时Leader选举的规律是由Zookeeper的临时节点创建顺序来决定的,只有第一个成功创建的节点的Controller才能成为leader,其余的都是follower。这个规律是为了保证Kafka集群中只有一个leader,并且这个leader是可靠的。

要打破这个规律,可以通过修改Zookeeper的临时节点创建顺序来实现。具体来说,可以通过修改Zookeeper的配置文件来改变临时节点的创建顺序。例如,可以将Kafka节点的临时节点创建顺序调整为按照节点的ID进行排序,这样就可以避免由于节点创建顺序不同而导致的leader选举问题

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

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

相关文章

CSS Position 定位如何使用?

写在前面 在网页设计中,定位元素是非常重要的。CSS 提供了多种定位方式,其中最常用的是 position 属性。position 属性允许你精确地控制元素在页面中的位置和布局。 1. static static 是默认的定位方式,表示元素将按照正常的文档流进行布局…

react的创建与书写

一:创建项目 超全面详细一条龙教程!从零搭建React项目全家桶(上篇) - 知乎 1.创建一个文件夹,shift鼠标右键选择在此处打开powershell 2.为了加速npm下载速度,先把npm设置为淘宝镜像地址。 npm config s…

量化交易系统开发-实时行情自动化交易-数据源选择

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 关于数据采集方面,首先聊聊…

【微信小游戏学习心得】

这里是引用 微信小游戏学习心得 简介了解微信小游戏理解2d游戏原理数据驱动视图总结 简介 本人通过学习了解微信小游戏,学习微信小游戏,加深了对前端框架,vue和react基于数据驱动视图的理解,及浏览器文档模型和javaScript之间的关…

【C++】【算法基础】第k个数(分治法)

第k个数 题目 在一个长度为 n n n的整数数列中找到第 k k k大的数。 题解 核心思想同快速排序&#xff08;实际就是快速排序加一个第 k k k大的数会在哪边的判定条件&#xff09;&#xff1a; #include<iostream> using namespace std;int quickSelect(int *a, int …

TVM计算图分割--LayerGroup

文章目录 介绍Layergroup调研TVM中的LayergroupTVM Layergroup进一步优化MergeCompilerRegions处理菱形结构TVM中基于Pattern得到的子图TPUMLIR地平线的Layergroup介绍 Layergroup目前没找到严格、明确的定义,因为不同厂家的框架考虑的因素不同,但是基本逻辑是差不多的。一般…

深究JS底层原理

一、JS中八种数据类型判断方法 在JavaScript中&#xff0c;数据类型分为两大类&#xff1a;基本&#xff08;原始&#xff09;数据类型和引用&#xff08;对象&#xff09;数据类型。 基本数据类型&#xff08;Primitive Data Types&#xff09; 基本数据类型是表示简单的数…

ssm071北京集联软件科技有限公司信息管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;北京集联软件科技有限公司信息管理系统 \ 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本信息…

Yocto 项目下通过网络更新内核、设备树及模块

Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中&#xff0c;特别是在进行 BSP&#xff08;Board Support Package&#xff09;开发时&#xff0c;经常需要调整特定软件包的版本&#xff0c;修改内核、设备树以及内核模块。然而&#xff0c;每次…

k8s集群安装(kubeadm)

k8s集群安装&#xff08;kubeadm&#xff09; 1、环境准备&#xff08;master和node节点都执行&#xff09;1.1、替换yum源1.2、关闭selinux1.3、永久关闭防火墙1.4、永久关闭swap1.5、修改主机名添加host1.6、时间同步1.7、将桥接的IPv4流量传递到iptables的链1.8、docker安装…

Ubuntu 修改时区 同步时间

Ubuntu 修改时区 同步时间 1、设置系统时区为中国上海2、更新软件包列表3、安装 ntpdate 工具4、从阿里云 NTP 服务器同步时间5、将系统时间同步到硬件时钟6、读取硬件时钟时间 1、设置系统时区为中国上海 timedatectl set-timezone Asia/Shanghai2、更新软件包列表 apt upda…

什么是JVM实现

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;实现是指将JVM规范转化为具体可执行代码的过程和结果。JVM规范定义了Java虚拟机应该具备的功能、行为以及与其他组件的交互方式&#xff0c;但它本身并不包含具体的实现代码。因此&#xff0c;不同的组织…

【日常问题排查小技巧-连载】

线上服务CPU飙高排查 先执行 top&#xff0c;找到CPU占用比较高的进程 id&#xff0c;&#xff08;比如 21448&#xff09; jstack 进程 id > show.txt&#xff08;jstack 21448 > show.txt&#xff09; 找到进程中CPU占用比较高的线程&#xff0c;线程 id 转换为 16 进…

您与此网站之间建立的连接不安全解决方法

如果你打开网站&#xff0c;地址栏有警告&#xff0c;点进去是这样的提示&#xff1a;您与此网站之间建立的连接不安全&#xff0c;了解详细信息。 请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。 …

【与AI+】学习SAP开发有什么渠道可以推荐

前言&#xff1a;好的&#xff0c;我又将开辟一个新的专栏&#xff0c;这个专栏呢&#xff0c;就准备放一些我向AI提问的问题&#xff0c;以及AI的回答。因为感觉真的好方便哈哈哈~ 我不是很确定我的专栏文章内容是否涉及版权&#xff0c;以及也不确定这些整合过的文字是否涉嫌…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比

一、Flutter 的 Widget 概述 Flutter 是 Google 开发的一款开源 UI 框架&#xff0c;旨在帮助开发者快速构建高性能、高保真度的移动、Web 和桌面应用程序。在 Flutter 中&#xff0c;UI 的构建完全是通过 Widget 来实现的。Widget 是 Flutter 中所有用户界面元素的基础构建块…

【python】Flask

文章目录 1、Flask 介绍2、Flask 实现网页版美颜效果3、参考 1、Flask 介绍 Flask 是一个用 Python 编写的轻量级 Web 应用框架。它设计简单且易于扩展&#xff0c;非常适合小型项目到大型应用的开发。 以下是一些 Flask 库中常用的函数和组件&#xff1a; 一、Flask 应用对…

FastAPI —— 请求参数验证

1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…

产品经理如何使用项目管理软件推进复杂项目按时上线

前言 相信很多产品同学或多或少都有过这样的经历&#xff1a;平时没有听到任何项目延期风险&#xff0c;但到了计划时间却迟迟无法提测……评审时没有任何argue&#xff0c;提测后发现开发的功能不是自己想要的……费劲九牛二虎之力终于让项目上线了&#xff0c;然而发现成果达…