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.rhkb.cn/news/37117.html

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

相关文章

(2025|ICLR|华南理工,任务对齐,缓解灾难性遗忘,底层模型冻结和训练早停)语言模型持续学习中的虚假遗忘

Spurious Forgetting in Continual Learning of Language Models 目录 1. 引言 2. 动机:关于虚假遗忘的初步实验 3. 深入探讨虚假遗忘 3.1 受控实验设置 3.2 从性能角度分析 3.3 从损失景观角度分析 3.4 从模型权重角度分析 3.5 从特征角度分析 3.6 结论 …

【css酷炫效果】纯CSS实现火焰文字特效

【css酷炫效果】纯CSS实现火焰文字特效 缘创作背景html结构css样式完整代码基础版进阶版(冰霜版) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492005 缘 创作随缘,不定时更新。 创作背景 刚…

专访LayaAir引擎最有价值专家-施杨

在 LayaAir 引擎的资源商店中,许多开发者都会注意到一个熟悉的名字——“射手座”。他不仅贡献了大量高质量的 Shader 资源,让一些开发者通过他的作品了解到 LayaAir 引擎在 3D 视觉效果上的更多可能,也让大家能够以低成本直接学习并应用这些…

大模型详细配置

Transformer结构 目前主力大模型都是基于Transformer的,以下是Transformer的具体架构 它由编码器(Encoder)以及解码器(Decoder)组成,前者主要负责对输入数据进行理解,将每个输入 词元都编码成一个上下文语义相关的表示向量;后者…

鸿蒙NEXT项目实战-百得知识库04

代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…

Python数据可视化实战:从基础图表到高级分析

Python数据可视化实战:从基础图表到高级分析 数据可视化是数据分析的重要环节,通过直观的图表可以快速洞察数据规律。本文将通过5个实际案例,手把手教你使用Python的Matplotlib库完成各类数据可视化任务,涵盖条形图、堆积面积图、…

修改原生的<input type=“datetime-local“>样式

效果 基础样式 <input type"datetime-local" class"custom-datetime">input[type"datetime-local"] {/* 重置默认样式 */-webkit-appearance: none;-moz-appearance: none;appearance: none; // 禁用浏览器默认样式/* 自定义基础样式 */w…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…

fetch,ajax,axios的区别以及使用

fetch,ajax,axios这些都是发起前端请求的工具&#xff0c;除了这些外还有jquery的$.ajax。ajax和$.ajax都是基于XMLHttpRequest。 介绍下XMLHttpRequest XMLHttpRequest是一种在浏览器中用于与服务器进行异步通信的对象&#xff0c;它是实现 AJAX&#xff08;Asynchronous Ja…

微信小程序的业务域名配置(通过ingress网关的注解)

一、背景 微信小程序的业务域名配置&#xff08;通过kong网关的pre-function配置&#xff09;是依靠kong实现&#xff0c;本文将通过ingress网关实现。 而我们的服务是部署于阿里云K8S容器&#xff0c;当然内核与ingress无异。 找到k8s–>网络–>路由 二、ingress注解 …

LiteratureReading:[2016] Enriching Word Vectors with Subword Information

文章目录 一、文献简明&#xff08;zero&#xff09;二、快速预览&#xff08;first&#xff09;1、标题分析2、作者介绍3、引用数4、摘要分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;分析 5、总结分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;…

前后端联调解决跨域问题的方案

引言 在前后端分离的开发模式中&#xff0c;前端和后端通常在不同的服务器或端口运行&#xff0c;这样就会面临跨域问题。跨域问题是指浏览器因安全限制阻止前端代码访问与当前网页源不同的域、协议或端口的资源。对于 Java 后端应用&#xff0c;我们可以通过配置 CORS&#x…

开源软件许可证冲突的原因和解决方法

1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件&#xff0c;它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者&#xff08;通常是开发者或开发团队&#xff09;发布的&#xff0c;它…

python爬虫笔记(一)

文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签&#xff08;网站&#xff09;target属性换行线和水平分割线 图片设置宽高width&#xff0c;height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…

电脑节电模式怎么退出 分享5种解决方法

在使用电脑的过程中&#xff0c;许多用户为了节省电力&#xff0c;通常会选择开启电脑的节能模式。然而&#xff0c;在需要更高性能或进行图形密集型任务时&#xff0c;节能模式可能会限制系统的性能表现。这时&#xff0c;了解如何正确地关闭或调整节能设置就显得尤为重要了。…

AI学习——卷积神经网络(CNN)入门

作为人类&#xff0c;我们天生擅长“看”东西&#xff1a;一眼就能认出猫狗、分辨红绿灯、读懂朋友的表情……但计算机的“眼睛”最初是一片空白。直到卷积神经网络&#xff08;CNN&#xff09;​的出现&#xff0c;计算机才真正开始理解图像。今天&#xff0c;我们就用最通俗的…

2025年渗透测试面试题总结- shopee-安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 shopee-安全工程师 信息安全相关Response头详解 1. 关键安全头及防御场景 Linux与Docker核心命令速查…

IntelliJ IDEA 中 Maven 的 `pom.xml` 变灰带横线?一文详解解决方法

前言 在使用 IntelliJ IDEA 进行 Java 开发时&#xff0c;如果你发现项目的 pom.xml 文件突然变成灰色并带有删除线&#xff0c;这可能是 Maven 的配置或项目结构出现了问题。 一、问题现象与原因分析 现象描述 文件变灰&#xff1a;pom.xml 在项目资源管理器中显示为灰色。…

Spring MVC 接口数据

访问路径设置 RequestMapping("springmvc/hello") 就是用来向handlerMapping中注册的方法注解! 秘书中设置路径和方法的对应关系&#xff0c;即RequestMapping("/springmvc/hello")&#xff0c;设置的是对外的访问地址&#xff0c; 路径设置 精准路径匹…

技术分享 | MySQL内存使用率高问题排查

本文为墨天轮数据库管理服务团队第51期技术分享&#xff0c;内容原创&#xff0c;如需转载请联系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明来源。 一、问题现象 问题实例mysql进程实际内存使用率过高 二、问题排查 2.1 参数检查 mysql版本 &#xff1a;8.0.…