Kafka常见面试问题
1、Kafka分区设计及主副本如何同步
Apache Kafka是一种分布式流处理平台,它使用分布式复制协议来实现高可用性和容错性。在Kafka中,每个主题(topic)都有一个或多个分区(partition),每个分区都有一组副本(replica),其中一个是主副本(leader),其余的是从副本(follower)。主副本负责处理来自消费者的所有读写请求,而从副本则扮演备份的角色,并在主副本出现故障时接管其职责。
主副本同步:
- Kafka的每个分区都有一个指定的副本,称为“初始副本”(initial replica)。这个初始副本是由Kafka在创建分区时指定的。
- 当消费者向Kafka发送消息时,消息首先被写入到该分区的初始副本中。
- 初始副本收到消息后,会将其复制到其他从副本中,实现副本的同步。
- 当所有的从副本都成功接收并存储了消息后,初始副本会向Kafka发送一个“消息已提交”(message committed)的响应给消费者。
2、Kafka如何选主
- Kafka使用一种称为“领导者选举”(leader election)的机制来选出每个分区的领导者(主副本)。
- 在Kafka集群中,每个节点都有一个选举代理(election proxy),它负责参与领导者选举过程。
- 当一个分区创建时,初始副本被选为该分区的领导者。
- 如果初始副本失效,选举代理会发现并通知其他存活的副本参与领导者选举。
- 存活的从副本会投票选举一个新的领导者。获得超过一半票数的副本会被选为新的领导者。
- 如果所有的从副本都失效,选举代理会重新选出新的初始副本作为领导者。
3、如果有多个broken故障,是会选哪个
Kafka的生产者使用一个负载均衡机制来分配消息到不同的broker。这个负载均衡机制可以基于各种因素,例如每个broker的可用带宽、处理能力、存储容量等。
当生产者向Kafka发送消息时,它会与Kafka的代理服务器(broker)建立连接,并由代理服务器负责将消息路由到正确的分区。代理服务器会根据负载均衡机制选择一个存活的分区,并将消息发送到该分区。如果多个broker出现故障,存活的代理服务器会选择一个存活的分区来处理消息。
因此,生产者并不直接选择发送消息到哪个broker,而是通过Kafka的负载均衡机制来自动分配消息到存活的broker上。这样可以确保消息的可靠性和容错性,并且可以有效地利用Kafka集群的资源。
4、kafka如何保证一致性
Kafka保持一致性的方式有很多,其中包括:
- 采用分布式副本集(replica set)来保证数据的一致性。Kafka将消息复制到多个副本中,当一个副本失效时,另一个副本可以接管它的工作,从而保证数据的完整性。
- Kafka至少保证消息被传递给消费者一次。生产者写入消息到Kafka时,会等待消息被持久化并复制到ISR(in-sync replica)中的副本,并返回一个确认(ack)给生产者。只有当所有ISR中的副本都完成了消息的复制后,消息才被认为是提交成功的,生产者才会收到确认。这样可以确保消息的可靠性,但也可能出现消息重复传递的情况。
- 消费者的消费位置(consumer offset)由消费者在消费消息时记录,并提交到Kafka,以便在重启或故障恢复后继续消费。Kafka会将消息的偏移量持久化,保证在故障发生时可以对未消费的消息进行重播。
5、什么情况下rebalance
Kafka Rebalance 是 Kafka 社区中用于重新分配分区以便平衡消费者组中消费者负载的一种机制。它会在消费者组发生变化时发生,例如当消费者加入或离开组时。
Kafka Rebalance 的工作原理如下:
- 检测到消费者组发生变化后,协调者会开始重新平衡过程。
- 协调者会根据分区策略(例如轮询或按权重分配)将分区重新分配给组中的消费者。
- 协调者将新的分区分配方案发送给所有组成员。
- 消费者接收到新的分配方案后,会根据方案调整它们订阅的分区。
- 当所有消费者都完成了分区调整后,重新平衡过程结束。
Kafka Rebalance 的主要目的是确保消费者组中的负载均衡分布,以便充分利用集群资源并提高吞吐量。然而,它也可能导致短暂的延迟,因为消费者需要重新平衡分区并重新开始消费数据。因此,在设计和部署 Kafka 集群时,需要考虑 Rebalance 对应用程序性能的影响。
相关文章:
Kafka常见面试问题
1、Kafka分区设计及主副本如何同步 Apache Kafka是一种分布式流处理平台,它使用分布式复制协议来实现高可用性和容错性。在Kafka中,每个主题(topic)都有一个或多个分区(partition),每个分区都有…...

学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)
文章目录 如何远程连接MySQL数据库1.创建用户来运行,此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议(超文本传输协议)简介HTT…...

一、TIDB基础
官方文档:TiDB 产品文档 | PingCAP 文档中心 TIDB整个逻辑架构跟MYSQL类似,如下: TIDB集群:相当于MYSQL的数据库服务器,区别是MYSQL数据库服务器为单进程的,TIDB集群为分布式多进程的。 数据库ÿ…...
【微软技术栈】使用新的C#功能减少内存分配
本文内容 通过引用传递和返回引用安全上下文安全的上下文和 ref 结构统一内存类型通过参考安全提高性能 本节中介绍的技术可提高应用于代码中的热路径时的性能。热路径是代码库中在正常操作中经常重复执行的部分。将这些技术应用于不经常执行的代码将产生最小的影响。在进行任何…...

Linux shell编程学习笔记29:shell自带的 脚本调试 选项
Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 1 bash 的命令行帮助信息(bash --help) purleEndurer csdn ~ $ ba…...
分享几个可以免费使用GPT的网站
ChatGPT这个是国产的,里面可以使用3.5和4.0,免费用户每日都有各自的使用次数,反应迅速。文言一心国内百度的chart8新用户200次,但只能用3.5,响应速度有点慢 各有优缺点,大家看个人情况使用,个人…...

一. BEV感知算法介绍
目录 前言1. BEV感知算法的概念2. BEV感知算法数据形式3. BEV开源数据集介绍3.1 KITTI数据集3.2 nuScenes数据集 4. BEV感知方法分类4.1 纯点云方案4.2 纯视觉方案4.3 多模态方案 5. BEV感知算法的优劣6. BEV感知算法的应用介绍7. 课程框架介绍与配置总结下载链接参考 前言 自动…...

Scala如何写一个通用的游戏数据爬虫程序
以前想要获取一些网站数据的时候,都是通过人工手动复制粘贴,这样的效率及其低下。数据少无所谓,如果需要采集大量数据,手动就显得乏力了。半夜睡不着,爬起来写一段有关游戏商品数据的爬虫通用模板,希望能帮…...
前端命名规范总结
布局类:header, footer, container, main, content, aside, page, section 包裹类:wrap, inner 区块类:region, block, box 结构类:hd, bd, ft, top, bottom, left, right, middle, col, row, grid, span 列表类:list,…...
Vue学习笔记-搭建Vuex
1.概念 在Vue实现集中式状态(数据)管理的一个插件,对Vue中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间的通信方式,适用于任意组件间的通信 2.使用场景 多个组件需要共享数据时…...

Ajax技
Ajax的特点 异步提交:Ajax采用异步通信方式,能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据,提升了用户体验。无需插件:Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的,无需安装插件或…...

Co-DETR:DETRs与协同混合分配训练论文学习笔记
论文地址:https://arxiv.org/pdf/2211.12860.pdf 代码地址: GitHub - Sense-X/Co-DETR: [ICCV 2023] DETRs with Collaborative Hybrid Assignments Training 摘要 作者提出了一种新的协同混合任务训练方案,即Co-DETR,以从多种标…...

ELk部署,保姆级教学超详细!!!
Elk(Elasticsearch, Logstash, Kibana)是一套日志收集、存储和展示方案,是由Elastic公司开发的开源软件组合。 Elasticsearch:是一个分布式的搜索和分析引擎。它能够处理大量的数据,并提供快速、准确的搜索结果&#x…...

计算机毕业设计springboot+vue高校田径运动会报名管理系统61s38
高校田径运动会管理采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页、个人中心、运动员管理、裁判员管理、场地信息管理、项目类型管理、比赛项目管理、比赛报名管理、比赛成绩管理、通知公告管理、留言板管理、交流论坛、系…...

java学习part21枚举
117-面向对象(高级)-枚举类的两种定义方式及练习_哔哩哔哩_bilibili 1.概念 2.enum关键字 枚举早期是用class内放n个public static final类变量供调用。 后来有了enum关键字,enum里的枚举变量都是public static final,但是必须都省略不写 正确方法 &…...
MongoDB的部署
MongoDB部署 基于Linux平台 前置要求 在Centos7 64位系统中安装64位的MongoDB的安装包,通过访问MongoDB官网https://www.mongodb.com/download-center/community进入MongoDB下载页面。Version:指定MongoDB版本,MongoDB的版本分为稳定版和开发…...

解析和存储优化的批量爬虫采集策略
如果你正在进行批量爬虫采集工作,并且想要优化解析和存储过程,提高采集效率和稳定性,那么本文将为你介绍一些实用的策略和技巧。解析和存储是批量爬虫采集中不可忽视的重要环节,其效率和质量对整个采集系统的性能至关重要。在下面…...

【git】使用ssh
前言 git之前一直使用https,因为很方便随时随地都可以用。最近把代码托管到GitHub,使用https就使用不了。后面听同事说GitHub使用ssh是没问题的,就想着尝试一下。 git ssh配置 设置用户名和邮箱 git config --global use.name username g…...

Linux 文件锁
1 为什么用文件锁 文件是一种共享资源,多个进程对同一文件进行操作的时候,必然涉及到竞争状态,因此引入了文件锁实现对共享资源的访问进行保护的机制,通过对文件上锁, 来避免访问共享资源产生竞争状态。 2 文件锁用法 (1)参考文档: man 2 …...

原理Redis-SkipList
SkipList ZipList和QuickList的共同特点是节省内存。在遍历元素时,只能从头到尾或从尾到头,所以在查找头尾元素性能还是不错的,但是中间元素查询的性能就会差。 **SkipList(跳表)**首先是链表,但与传统链表…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...