kafka常见面试题总结

Kafka 核心知识解析

一、Kafka 消息发送流程

Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 RecordAccumulator 中拉取消息并发送到 Kafka Broker。

二、Kafka 分区的目的

  1. 合理使用存储资源与负载均衡
    分区会分布在不同 broker 上,通过将海量数据分区存储在各个 broker,可以实现负载均衡的效果,以此达到合理使用存储资源的目的。
  2. 提高并行度
    生产者能够以分区为单位发送消息,消费者也以分区为单位消费数据,这样大大提高了并行度。

三、Kafka 消息的有序性保障

  1. 生产者端
    最简单的方式是设置一个分区,因为 Kafka 在同一个分区内传递消息是有序的。或者可以选择同步式发送模式,不过这种模式效率较低。
  2. 消费者端
    可以设置单个消费者单个分区,以此确保消息的有序性。

四、ISR、OSR、AR 概念

ISR 是 Kafka 集群中还存活的副本,OSR 是在规定时间内没有做出响应被认为已经挂掉的副本,AR 包含 ISR 和 OSR。

五、Kafka 消息丢失情况及应对

  1. 生产者端消息丢失
    如果 acks 设置不当很可能导致消息丢失,acks 有三种配置级别,最高级别是 -1 或者 all,在此级别下生产者会等待整个集群回应接收到消息才认为消息发送成功,安全性更高。不过,由于网络或服务状态问题也可能导致发送消息出现问题,解决此问题可能会涉及到事务。
  2. 消费者端消息丢失
    这和偏移量有很大关系,不合理的偏移量提交一般会导致消息丢失。

六、保证 Kafka 可靠性的方法

  1. 生产者端
    考虑将 acks 参数调为 -1 或者 all,设置调优重试机制,启动幂等性(保证同消息只持久化一次),使用开启事务来提交生产者消息并使用同步提交方式(send(record).get())。
  2. 消费者端
    可以选择手动控制偏移量的提交,这样能避免依赖自动提交时因故障导致的错误偏移量。

七、Kafka 数据去重

Kafka 0.11 版本以后出现了幂等性和事务两个特性来保证数据去重。幂等性通过 PID、Partition、SeqNumber 判断消息是否重复,重复的数据 broker 只会持久化一条。通过事务提交,可以在事务完整提交前对消费者隐藏消息,只有全部事务完整完成消费者才会消费消息,类似于 Java、mysql 等的事务。

八、生产者提高吞吐量的方法

可以调大批次大小参数 batch.size、调整等待时间 linger.ms 参数、设置压缩格式 compression.type 参数压缩数据、调增缓冲区大小 RecordAccumulator。

九、Zookeeper 在 Kafka 集群中的作用

Zookeeper 相当于 Kafka 集群的一个代理,Kafka 的每个 broker 会在 Zookeeper 中进行注册,并保存一些元数据信息,比如主题创建的分区副本等信息。Zookeeper 还会对 Kafka 集群进行 leader 的选举,当某个 leader 出现故障,Zookeeper 会根据选举机制选举新的 leader,同时还能起到负载均衡的效果。总的来说,Zookeeper 协助 Kafka 实现高可用。

十、Kafka 集群中的 Leader 选举机制

当一个分区的 leader 出现故障时,集群会给分区选举新的 leader 以保证该分区的正常运行。选举会根据 Replicas 的顺序,并对照 Isr 来跳过实际不存活的节点。

十一、Kafka 处理数据乱序问题的方法

Kafka 消息传递过程中每个分区的消息是有序的,但存在多个分区时,由于每个分区传递数据的顺序不同会导致数据乱序问题。解决数据乱序问题需要只设置一个分区,并且开启幂等性,acks 设置为 all 或者 -1。

十二、Kafka 中节点的服役和退役

  1. 服役
    首先准备一台配置好环境的服务器,然后写一个需要服役的主题的 json 文件并为之生成负载均衡计划,将计划储存在 json 文件中,使用 kafka - reassign - partitions.sh 命令执行计划,最后查看主题详情确认是否服役成功。
  2. 退役
    和服役操作相仿,重新生成执行计划并执行即可。

十三、Kafka 中 Leader 和 Follower 故障重启后的数据同步

  1. Follower 挂了再启动
    如果是 follower 挂了不影响其他的副本,当 follower 再次启动时,会根据它挂掉时的分区内最小的偏移量 offset 值的后一位从 leader 中同步。
  2. Leader 挂了
    如果 leader 挂了,此时需要重新选举 leader,其他 follower 会从此时分区内偏移量最小的后一个位置重新从新的 leader 中同步数据。

十四、打破 Kafka 初始化时 Leader 选举规律的方法

这种情况一般很少出现,大概率是因为某个任务量巨大,而集群里服务器配置不同,有的服务器性能比较低。此时需要手动设置副本存储计划,指定 replicas 都在哪些节点里执行创建的计划。

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

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

相关文章

2024/11/4 计网强化

10: 17: 22: 09: 11: 12: 13: 14: 15: 18: 19: 20: 21: 16:

力扣104 : 二叉树最大深度

补:二叉树的最大深度 描述: 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 何解? 树一般常用递归:递到叶子节点开始倒着处理

机器情绪及抑郁症算法

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

JAVA学习日记(十五) 数据结构

一、数据结构概述 数据结构是计算机底层存储、组织数据的方式。 数据结构是指数据相互之间以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择。 二、常见的数据结构 (一)栈 特点&…

i春秋-SQLi(无逗号sql注入,-- -注释)

练习平台地址 竞赛中心 题目描述 后台有获取flag的线索应该是让我们检查源码找到后台 题目内容 空白一片 F12检查源码 发现login.php 访问login.php?id1 F12没有提示尝试sql注入 常规sql注入 //联合注入得到表格列数 1 order by 3 # 1 union select 1,2,3 #&#xff08…

sql注入之二次注入(sqlilabs-less24)

二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…

nginx 部署2个相同的vue

起因: 最近遇到一个问题,在前端用nginx 部署 vue, 发现如果前端有改动,如果不适用热更新,而是直接复制项目过去,会404 因此想到用nginx 负载两套相同vue项目,然后一个个复制vue项目就可以了。…

MySQL:CRUD

MySQL表的增删改查(操作的是表中的记录) CRUD(增删改查) C-Create新增R-Retrieve检查,查询U-Update更新D-Delete删除 新增(Create) 语法: 单行数据全列插入 insert into 表名[字段一,字段…

centos7 node升级到node18

使用jenkins发布vue3项目提示node18安装失败 错误日志: /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node18/bin/node: /lib64/libm.so.6: version GLIBC_2.27 not found (required by /var/lib/jenkins/tools/jenkins.plugins.node…

万字长文解读深度学习——ViT、ViLT、DiT

文章目录 🌺深度学习面试八股汇总🌺ViT1. ViT的基本概念2. ViT的结构与工作流程1. 图像分块(Image Patch Tokenization)2. 位置编码(Positional Encoding)3. Transformer 编码器(Transformer En…

MFC中Excel的导入以及使用步骤

参考地址 在需要对EXCEL表进行操作的类中添加以下头文件:若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类,对Excel大…

前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)

文章目录 1. npm (Node Package Manager)2. Yarn (Yarn Package Manager)3. pnpm4. Bower5. Parcel总结 前端开发中常用的包管理器主要有以下几个: 1. npm (Node Package Manager) 简介: npm 是 Node.js 的默认包管理器,也是最广泛使用的包…

Linux(CentOS)安装 Nginx

CentOS版本:CentOS 7 Nginx版本:1.24.0 两种安装方式: 一、通过 yum 安装,最简单,一键安装,全程无忧。 二、通过编译源码包安装,需具备配置相关操作。 最后附:设置 Nginx 服务开…

深度学习项目启动(笔记用)

深度学习项目启动 项目配置虚拟环境 项目配置虚拟环境

万字长文解读深度学习——卷积神经网络CNN

推荐阅读: 卷积神经网络(CNN)详细介绍及其原理详解 CNN笔记:通俗理解卷积神经网络 文章目录 🌺深度学习面试八股汇总🌺主要组件输入层卷积层 (Convolutional Layer)批归一化层(Batch Normalizat…

VBA10-处理Excel的动态数据区域

一、end获取数据边界 1、基本语法 1-1、示例: 2、配合row和column使用 2-1、示例1 2-2、示例2 此时,不管这个有数值的区域,怎么增加边界,对应的统计数据也会跟着变的! 二、end的缺陷 若是数据区域不连贯,则…

Spring boot + Vue2小项目基本模板

Spring boot Vue2小项目基本模板 基本介绍基本环境安装项目搭建最终效果展示 基本介绍 项目来源哔哩哔哩的青戈,跟着学习搭建自己的简单vue小项目;看别人的项目总觉得看不懂,需要慢慢打磨 这里目前只简单的搭建了菜单导航和表格页面&#x…

“箱体分析”,箱体支撑压力位,分析市场方向 通达信主图 源码

使用技巧 该指标用于在通达信的K线图上绘制箱体分析图形,主要通过支撑位、波浪顶、箱体上下限等多个技术指标来识别股票的支撑和压力区域。 支撑位分析:可以帮助用户识别股价的支撑区域,并判断是否会反弹。 箱体震荡区间识别:通…

PICO+Unity MR视频透视

官方链接:视频透视 | PICO 开发者平台 在 PXR_Manager (Script) 面板上,勾选 Video Seethrough 选框 2.将 Clear Flags 设置为 Solid Color。颜色设置为黑色,Alpha 通道设置为完全透明 3.在代码中开启透视 using System.Collections; usin…

大学生福音!用gpt-4o和o1大模型拿捏大学化学作业

文章目录 零、前言一、使用GPT操作指导作业拍照使用o1-preview大模型小结 二、感受 零、前言 昨天发了gpt-4o拿捏大学物理作业,群友说,急需要一位化学老师指导 虚竹哥是宠粉的,连夜请了一位博士级的化学老师~ 一、使用GPT 操作指导 ChatG…