kafka的文章

1.面试的问题

  • 要点 至多一次、恰好一次
  • 数据一致性
  • 超时重试、幂等
  • 消息顺序
  • 消息挤压
  • 延时消息

1.1 kafaka 生产消息的过程。

在消息发送的过程中,涉及到了两个线程,一个是main 线程,一个是sender 线程。在main 线程中创建了一个双端队列 RecordAccumulator,main 线程将消息发送到 双端队列,sender 线程不断从双端队列读取 发送到 broker

1.2 消息队列的可靠性。

1.3 副本同步机制

leo: 定义:LEO 即日志末端偏移量,它表示每个副本日志中最后一条消息的下一个偏移量。
hw:高水位(HW,High Watermark)的确是 ISR(In - Sync Replicas,同步副本集合)中所有副本的最小日志末端偏移量(LEO,Log End Offset)
Kafka 的副本同步机制
Kafka 的副本同步机制是保障数据可靠性和高可用性的核心特性,下面从整体架构、同步流程、ISR 机制、相关参数等方面进行详细介绍。
整体架构

  • Kafka 中每个分区都有一个 Leader 副本和多个 Follower 副本。生产者和消费者只与 Leader 副本进行交互,Follower 副本负责从 Leader 副本同步数据。这样的设计使得 Kafka 可以在多个 Broker 上存储数据副本,提高数据的容错能力。
    同步流程
  1. 消息生产
    生产者将消息发送到 Kafka 集群时,会指定要发送到的主题和分区。Kafka 根据分区的 Leader 副本位置,将消息发送到对应的 Leader 副本所在的 Broker。
  2. Leader 副本接收消息
    Leader 副本接收到生产者发送的消息后,将消息写入本地日志,并更新自身的日志末端偏移量(LEO)。
  3. Follower 副本同步消息
    Follower 副本通过向 Leader 副本发送 Fetch 请求来同步消息。Fetch 请求中包含 Follower 副本当前的 LEO,Leader 副本根据该信息将新的消息发送给 Follower 副本。
    Follower 副本接收到消息后,将消息写入本地日志,并更新自身的 LEO。
  4. 高水位(HW)更新
    高水位(HW)是分区中所有副本都已经成功复制的消息的最大偏移量。Kafka 会根据 ISR(In - Sync Replicas,同步副本集合)中所有副本的 LEO 来更新 HW。具体来说,HW 是 ISR 中最小的 LEO。
    只有偏移量小于 HW 的消息才被认为是已经在所有同步副本中安全保存的,可以被消费者消费。
    ISR 机制
  5. ISR 定义
    ISR 是与 Leader 副本保持同步的一组副本集合。只有在 ISR 中的副本,才被认为是可靠的同步副本,能够参与 HW 的计算。
  6. ISR 动态维护
    Kafka 会定期检查 Follower 副本与 Leader 副本的同步情况,通过比较 LEO 的差距来判断 Follower 副本是否落后。如果 Follower 副本的 LEO 与 Leader 副本的 LEO 差距超过一定阈值(由 replica.lag.time.max.ms 参数控制),则该 Follower 副本会被从 ISR 中移除。
    当落后的 Follower 副本追上 Leader 副本后,它可以重新加入 ISR。
  7. ISR 的作用
    提高数据可靠性:只有 ISR 中的副本参与 HW 的计算,确保消费者只能读取到已经在多个副本中安全保存的消息。
    故障转移:当 Leader 副本出现故障时,Kafka 会从 ISR 中选举出新的 Leader 副本,保证数据的一致性和服务的连续性。
    相关参数
  8. acks 参数
    该参数用于控制生产者发送消息时的确认机制,影响副本同步策略。
    acks = 0:生产者发送消息后,不等待任何确认,相当于异步复制,性能最高但数据可靠性最低。
    acks = 1:生产者发送消息后,等待 Leader 副本确认,只要 Leader 副本写入成功就返回响应,性能和可靠性适中。
    acks = all 或 acks = -1:生产者发送消息后,等待所有 ISR 中的副本确认,相当于同步复制,数据可靠性最高但性能最低。
  9. min.insync.replicas 参数
    用于指定 ISR 中最少需要有多少个副本同步消息,才能认为消息写入成功。结合 acks = all 使用时,可以进一步增强数据的可靠性。如果 ISR 中的副本数量小于 min.insync.replicas,生产者发送消息时会收到写入失败的响应。
  10. replica.lag.time.max.ms 参数
    该参数定义了 Follower 副本与 Leader 副本之间允许的最大延迟时间。如果 Follower 副本在该时间内没有向 Leader 副本发送 Fetch 请求或者没有追上 Leader 副本的 LEO,则会被从 ISR 中移除。
    异常情况处理
  11. Leader 副本故障
    当 Leader 副本所在的 Broker 出现故障时,Kafka 会从 ISR 中选举出新的 Leader 副本。新的 Leader 副本会将 HW 作为新的起始偏移量,继续处理生产者和消费者的请求。
  12. Follower 副本故障
    如果某个 Follower 副本出现故障,它会被从 ISR 中移除。当该副本恢复正常后,会重新向 Leader 副本发送 Fetch 请求,追赶 Leader 副本的进度,当追上后可以重新加入 ISR。
    综上所述,Kafka 的副本同步机制通过 Leader - Follower 架构、ISR 机制和相关参数的配置,在保证数据可靠性和高可用性的同时,兼顾了性能和容错能力。

1.4 kafka 高性能、高吞吐原因

  • 磁盘顺序读写
    • 顺序读 会使用预读
    • 保证了消息的堆积 相比于内存。
  • 使用了零拷贝的技术
  • 分区分段 + 索引
    • 每个 分区 在磁盘上 按照segment 文件存储的。针对segment 建立.index的索引文件
  • 批量压缩 多条消息批量压缩传输,降低带宽
  • 批量读写

1.5 消息丢失的场景 解决方案

  1. ack=all,
  2. 配置 min.insync.replicas>1

1.6 消息可靠性的解决方案

消息发送

  • ack -1/all 、
  • unclean.leader.election.enable: false, 禁止选举 isr 以外的follower为leader
  • tries >1 重试次数
  • min.insync.replicas>1 同步副本数,没满足该之前,不提供 读写服务。
    综上所述,在 acks = all 且 min.insync.replicas = 3,副本总数为 5 个的情况下,至少 3 个处于 ISR 中的副本写入数据完成,Kafka 才会判定消息写入操作完成。

消费者

  • 手动提交 offset
  • broker 减少刷盘间隔
  • 事务消息

1.7 kafka reblance

  • 消费者分区策略
  1. range 范围分区 默认
  2. roundrobin 轮询
  3. sticky 策略 体现在 reblance 策略下。
  • 触发reblance 的时间
  1. 消费者组成员个数变化的时候。 有新的消费者加入、离开消费者组
  2. 订阅的topic 发生变化
  3. 订阅topic 的分区发生变化
  • coordinator 协调过程
  1. 消费者 找到消费者组中的 协调器
  2. 确定分区策略

system design interview 书

第八章 设计短链系统

kafka 笔记

尚硅谷-笔记

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

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

相关文章

以mysql 为例,增删改查语法及其他高级特性

以下是 MySQL 的 增删改查语法及 高级特性的详细整理,结合示例说明: 1. 基础操作(CRUD) (1) 创建数据(INSERT) -- 单条插入 INSERT INTO users (id, name, email) VALUES (1, Alice, aliceexample.com);…

Postman最新详细安装及使用教程【附安装包】

一、Postman介绍 ‌Postman是一个功能强大的API测试工具,主要用于模拟和测试各种HTTP请求,支持GET、POST、PUT、DELETE等多种请求方法。‌通过Postman,用户可以发送请求并查看返回的响应,检查响应的内容和状态,从而验…

第十三章 : Names in Templates_《C++ Templates》notes

Names in Templates 重难点多选题设计题 重难点 1. 名称分类与基本概念 知识点: 限定名(Qualified Name):使用::或.显式指定作用域的名称(如std::vector)非限定名(Unqualified Name&#xff0…

整合vue+Element UI 开发管理系统

1、 安装 Node.js 和 npm 确保安装了 Node.js 和 npm。可以通过 Node.js 官网 下载。 2、 创建 Vue 项目 安装cli npm install -g vue/cli 使用 Vue CLI 创建一个新的 Vue 项目。 vue create admin-system cd admin-system npm run serve 出现这个页面表示vue创建成功 安…

3. 轴指令(omron 机器自动化控制器)——>MC_Stop

机器自动化控制器——第三章 轴指令 9 MC_Stop变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_Stop 使轴减速停止。 指令名称FB/FUN图形表现ST表现MC_Stop强制停止FBMC_Stop_instance (Axis :《参数》 ,Execu…

C#中修饰符——abstract、virtual

一、多态简介 在面向对象编程的过程中,多态体现出来的是【一个接口,多个功能】;多态性体现在2个方面: 1、程序运行时,在方法参数、集合或数组等位置,派生类对象可以作为基类的对象处理;这样该对…

Spring Boot + Spring Integration整合MQTT打造双向通信客户端

1. 概述 本文分两个章节讲解MQTT相关的知识,第一部份主要讲解MQTT的原理和相关配置,第二个章节主要讲和Spring boot的integration相结合代码的具体实现,如果想快速实现功能,可直接跳过第一章节查看第二章讲。 1.1 MQTT搭建 为了…

2025前端面试题记录

vue项目目录的执行顺序是怎么样的? 1、package.json   在执行npm run dev时,会在当前目录寻找package.json文件,此文件包含了项目的名称版本、项目依赖等相关信息。 2、webpack.config.js(会被vue-cli脚手架隐藏) 3、vue.config.js   对…

专题|Python贝叶斯网络BN动态推理因果建模:MLE/Bayes、有向无环图DAG可视化分析呼吸疾病、汽车效能数据2实例合集

原文链接:https://tecdat.cn/?p41199 作为数据科学家,我们始终在探索能够有效处理复杂系统不确定性的建模工具。本专题合集系统性地解构了贝叶斯网络(BN)这一概率图模型在当代数据分析中的创新应用,通过开源工具bnlea…

WX小程序

下载 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.Cl…

Vulnhub-wordpress通关攻略

姿势一、后台修改模板拿WebShell 第一步:进⼊Vulhub靶场并执⾏以下命令开启靶场;在浏览器中访问并安装好.... 第二步:找到外观--编辑--404.php,将原内容删除并修改为一句话木马,点击更新--File edited successfully. &…

Spring Boot(十六):拦截器Interceptor

拦截器的简介 拦截器(Interceptor)​是Spring框架中的概​念,它同样适​用于Spring Boot,​因为Spring Boot是基于Spring框架的。拦截器是​一种AOP(面向切面编程)​的轻量级实现方式,它允许我…

Kotlin v2.1.20 发布,标准库又有哪些变化?

大家吼哇!就在三小时前,Kotlin v2.1.20 发布了,更新的内容也已经在官网上更新:What’s new in Kotlin 2.1.20 。 我粗略地看了一下,下面为大家选出一些我比较感兴趣、且你可能也会感兴趣的内容。 注意!这里…

开源链动2+1模式、AI智能名片与S2B2C商城小程序源码在社交电商渠道拓宽中的协同应用研究

摘要:本文基于"开源链动21模式""AI智能名片""S2B2C商城小程序源码"三大技术要素,探讨社交电商时代商家渠道拓宽的创新路径。通过解析各技术的核心机制与应用场景,结合京东便利店等实际案例,论证其对…

【蓝桥杯速成】| 10.回溯切割

前面两篇内容我们都是在做有关回溯问题的组合应用 今天的题目主题是:回溯法在切割问题的应用 题目一:分割回文串 问题描述 131. 分割回文串 - 力扣(LeetCode) 给你一个字符串 s,请你将 s 分割成一些 子串&#xff…

【嵌入式硬件】三款DCDC调试笔记

关于开关电源芯片,重点关注输入电源范围、输出电流、最低压降。 1.MP9943: 以MP9943为例,输入电压范围4-36V,输出最大电流3A,最低压降为0.3V 调整FB使正常输出为5.06V 给定6V空载、5V空载、5V带2A负载的情况: 6V带2A…

2025年03月18日柯莱特(外包宁德)一面前端面试

目录 自我介绍你怎么从0到1搭建项目的webpack 的构建流程手写webpack插件你有什么想问我的吗 2. 你怎么从 0 到 1 搭建项目的 在面试中回答从 0 到 1 搭建前端项目,可按以下详细步骤阐述: 1. 项目前期准备 需求理解与分析 和产品经理、客户等相关人…

在vitepress中使用vue组建,然后引入到markdown

在 VitePress 中&#xff0c;每个 Markdown 文件都被编译成 HTML&#xff0c;而且将其作为 Vue 单文件组件处理。这意味着可以在 Markdown 中使用任何 Vue 功能&#xff0c;包括动态模板、使用 Vue 组件或通过添加 <script> 标签为页面的 Vue 组件添加逻辑。 值得注意的…

Jupyter Notebook 常用命令(自用)

最近有点忘记了一些常见命令&#xff0c;这里就记录一下&#xff0c;懒得找了。 文章目录 一、文件操作命令1. %cd 工作目录2. %pwd 显示路径3. !ls 列出文件4. !cp 复制文件5. !mv 移动或重命名6. !rm 删除 二、代码调试1. %time 时间2. %timeit 平均时长3. %debug 调试4. %ru…

Java面试黄金宝典12

1. 什么是 Java 类加载机制 定义 Java 类加载机制是 Java 程序运行时的关键环节&#xff0c;其作用是把类的字节码文件&#xff08;.class 文件&#xff09;加载到 Java 虚拟机&#xff08;JVM&#xff09;中&#xff0c;并且将字节码文件转化为 JVM 能够识别的类对象。整个类…