【kafka】记录用-----------1

在这里插入图片描述

  • 主题(topic):消息的第一次分类
    • 根据人为的划分条件将消息分成不同的主题
      • 主题的划分是人为的根据不同的任务情景去划分
        • 比如,我们有两个主题,一个是"订单",另一个是"库存"。每个主题代表一个消息流。
      • 主题的名称作为主题的为一标识符,我们需要保证其唯一性
  • 分区(partition):消息的第二次分类
    • 区域化同主题中的消息:分区管理同主题的消息
      • 不同主题下分区标识可以相同
      • 每个分区都有一个唯一的标识
  • 分区偏移(partition offset):消息的第三次分类
    • 同一分区内的不同消息都有唯一的偏移
      • 消息的偏移值是唯一且按照顺序递增的。kafka分配消息时确定
    • 不同分区内的消息的偏移可以相同

🫱🏽 kafka分区策略

  1. 默认分区策略(DefaultPartitioner): 如果消息没有指定 key,或者指定的 key 为 null,那么默认分区策略会采用轮询(round-robin)的方式将消息均匀地分配到所有可用分区。
  2. 基于 key 的分区策略(PartitionByKey): 如果消息指定了 key,那么基于 key 的分区策略会根据 key 的哈希值将消息分配到对应的分区。这确保具有相同 key 的消息总是被分配到同一个分区,以保证消息的顺序性。
  3. 自定义分区策略: 用户可以根据自己的需求实现自定义的分区策略。这可以通过实现 Kafka 提供的 Partitioner 接口来完成。
  • 分区备份(replicas of partition):分区的备份,用于防止数据丢失。
    • 备份时机
      • 消息写入
      • 消费者拉取
      • 后台任务

🫱🏽 kafka后台同步策略

后台同步任务是 Kafka 内部自动管理的,不需要人为干预。Kafka 设计了一些后台任务来确保副本之间的同步和数据的一致性,以提高整个系统的可用性和可靠性。

这些后台同步任务包括:

  1. Leader 的心跳检测: Kafka 集群中的每个分区都有一个领导者(Leader),领导者会定期发送心跳消息给追随者(Followers)。这有助于检测领导者的健康状态。
  2. 追随者的数据拉取: 追随者会定期从领导者拉取缺失的数据,以保持与领导者的同步。这有助于处理因追随者滞后或宕机而导致的数据不一致。
  3. Leader 的日志清理: 领导者会定期清理旧的日志段,删除过时的消息。这确保了存储在磁盘上的数据不会无限增长,也有助于提高性能。

  • 经纪人(Brokers):负责维护发布数据的系统,每个代理可以管理一个或多个主题的分区。
    • 同一主题下可能有1-n 经纪人
    • 同一分区任意时刻只能由一个经纪人管理
    • 经纪人的分配区域管理
      • 一个主题和N个代理中有N个分区,每个代理将有一个分区。
      • 一个主题中有N个分区并且多于N个代理(n + m),则第一个N代理将具有一个分区,并且下一个M代理将不具有用于该特定主题的任何分区。
      • 一个主题中有N个分区并且小于N个代理(n-m),每个代理将在它们之间具有一个或多个分区共享。 由于代理之间的负载分布不相等,不推荐使用此方案

  • 领导者(Leader):负责处理该分区的读写请求
    • 职责:
      • 消息追加到分区的日志文件,这确保了分区的写入顺序

        • 不同分区的消息顺序不做保证
        • 同一分区下的消息顺序是根据消息的写入的先后顺序有序存储
      • 消息的复制和同步:

        • 消息异步地复制到追随者(Followers)

          步骤详细过程举例(假设分区有3个追随者,需要2个确认)
          初始状态:一个分区有一个领导者和多个追随者。领导者和追随者的副本都在 ISR 中,表示它们与领导者同步。
          生产者写入消息:生产者产生一条新消息并发送给领导者。领导者接收到消息后,将消息追加到分区的日志文件。生产者发送消息A,领导者将A追加到日志。
          消息异步复制到追随者:领导者开始异步地将写入的消息复制到追随者。追随者接收到领导者的复制请求,将消息追加到它们的日志文件中。追随者1、追随者2接收A并将A追加到各自日志。
          等待 ISR 中的确认:尽管消息复制是异步进行的,领导者必须等待 ISR 中的一定数量的追随者确认已成功复制。等待追随者1、追随者2确认。两者是异步的。
          如果 ISR 中的足够数量的追随者确认成功复制,领导者将响应给生产者,表示消息已成功写入。追随者1、追随者2确认,领导者响应。
          消息的持久性和有序性:由于消息已成功写入 ISR 中的足够数量的追随者,可以确保消息的持久性。消息A被持久化,即使领导者宕机,ISR 中的副本可以被选为新的领导者,从而保证消息的持久性。
          由于等待 ISR 中的追随者确认,保证了消息的有序性。领导者会按照消息写入的顺序等待确认,以确保整个分区的消息顺序性。领导者需要等待一定数量的追随者确认后才能继续处理下一条消息。这确保了消息在分区内的有序存储。
      • 追随者的管理

        • 心跳机制:检测追随者状态(在线、宕机、滞后)
          • 在线(心跳表现 | ISR中)

            • 追随者定期发送心跳消息,表示自己在线
            • 如果追随者的心跳正常,领导者将其包含在 ISR 中,表示它是同步的。
          • 宕机(心跳表现 | ISR中)

            • 领导者在一定时间内没有受到心跳信息,无法确认追随者的在线状态
            • 领导者可能将宕机的追随者移出 ISR,等待其他追随者的确认。
          • 滞后(心跳表现 | ISR中)

            • 追随者仍定期发送心跳消息,但在处理消息上存在滞后。
            • 领导者可能将滞后太多的追随者移出 ISR,以确保 ISR 中的副本是相对同步的。

            滞后主要指的是追随者在处理消息时相对于领导者的位置较远,即它的日志文件中的消息相对较旧。这是通过追随者的日志文件中的偏移量(offset)来衡量的。

      • 读操作的响应

        • 领导者负责处理来自消费者的读取请求。
          • 消费者可以从领导者或者任意一个追随者拉取消息。领导者负责返回正确的消息,确保读取操作的正确性。
      • 故障转移

        • 如果领导者宕机或者发生故障,Kafka 集群会自动进行领导者选举。新的领导者将被选举出来,确保分区的可用性。这是通过使用 ZooKeeper 进行协调的。
      • 日志清理

        • 领导者定期进行日志清理,删除过时的日志段,以释放磁盘空间。这有助于保持存储的合理大小
  • 追随者(Follower):备份节点是领导者的追随者,它们会按照领导者的指令更新数据。如果领导者失败,追随者可以接管并保持系统正常运行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

eureka-server项目工程搭建、linux集群部署

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服…

与纸质合同相比,电子合同有哪些优势?

在无纸化办公的当下,电子合同软件成为了企业数字化转型必不可少的工具。而随着国内电子合同软件功能的完善,电子合同拥有便捷,安全,功能等要素,因此,电子合同是更多人的选择方式。 电子合同指的是双方或者多…

antd时间选择器,设置显示中文

需求 在实现react,里面引入antd时间选择器,默认显示为英文 思路 入口处使用ConfigProvider全局化配置,设置 locale 属性为中文来实现。官方文档介绍全局化配置 ConfigProvider - Ant Design 代码 import React from react; import { Prov…

Shutter Encoder多媒体转换v17.8

软件介绍 多媒体包含种类繁多的各种文件格式,每种格式都有其不同的特征和所谓的“怪癖”。 因此,如果使用多种图像、视频或音频格式,找到一个集中的软件来从一个地方处理所有这些格式可能会非常棘手。 这就是 Shutter Encoder 基本上允许做的…

Git的安装

1、下载 官网地址: https://git-scm.com/或https://github.com/git-for-windows/git/releases 百度网盘链接:链接:https://pan.baidu.com/s/13_asGO-XQb5KWWH_V7rq6g?pwd0630 2、安装 ①查看GNU协议,可以直接点击下一步。 ②…

加速 Android Studio 依赖项下载

在某些网络环境中,访问互联网可能受到限制,在Android Studio中,项目构建时可能需要下载依赖项,如果网络受到限制,就无法下载或下载速度非常慢只有十几 kb/s ,设置可以帮助解决下载问题。 进入设置页面找到…

HTTP数据请求

文章目录 1 概述2 什么是HTTP3 如何发起HTTP请求4 参考链接 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更…

vivado ip manager cache

https://china.xilinx.com/video/hardware/configuring-managing-reusable-ip-vivado.html “Core Containers”(核容器):勾选Use Core Containers for IP(为 IP 使用核容器)即可使用核容器功能,该功能支持…

基于SSM+vue的新生报到服务管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

【Linux实用篇】Linux软件安装 JDK Tomcat MySQL lrzsz

1. 软件安装 1.1 软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布,只要解压,修改配置即可rpm安装软件已经按照red…

Gitlab Gitee GitHub 远程仓库显示图片

大家好我是苏麟 , 今天出一期开发之外的如何在远程仓库展示图片 . 以GitLab为例 1.首先我们要把一张图片上传到远程仓库 . 2.第二步,点击图片 3.鼠标右键点击下载左键点击复制连接 4.找到我们要上传的md文件 , 把连接复制到 ( ) 里 , 这样上传md之后就可以看到图片了 . 这期就到…

Python学习从0到1 day2 python注释

那就祝我们 all is well ——24.1.12 一、python中的注释 1.注释的作用 注释代码与非注释代码对比,可以发现,添加了注释的代码更加易于程序的阅读 2.注释的分类及方法 注释在python中有两种形式:单行注释和多行注释。 单行注释只能注释一行…

POI:对Excel的基本读操作 整理2

1 简单读取操作 public class ExcelRead {String PATH "D:\\Idea-projects\\POI\\POI_projects";// 读取的一系列方法// ...... } 因为07版本和03版本操作流程大差不差,所以这边就以03版本为例 Testpublic void testRead03() throws IOException {//获取…

代码随想录刷题笔记(DAY11)

今日总结:继续准备期末,今天的算法题目比较简单,晚上看看能不能再整理一篇前端的笔记。 Day 11 01. 有效的括号(No. 20) 题目链接 代码随想录题解 1.1 题目 给定一个只包括 (,),{&#xff…

AMEYA360报导:瑞萨宣布收购Transphorm,大举进军GaN

全球半导体解决方案供应商瑞萨电子与全球氮化镓(GaN)功率半导体供应商Transphorm, Inc.(以下“Transphorm”)于今天宣布双方已达成最终协议,根据该协议,瑞萨子公司将以每股5.10美元现金收购Transphorm所有已发行普通股,较Transphorm在2024年1…

XYplorer:双栏多标签文件资源管理器的高效选择

在文件管理的世界中,效率和便捷性是用户追求的关键。XYplorer作为一款专为Windows设计的文件资源管理器,以其独特的双栏多标签浏览、强大的文件搜索功能、以及高度可定制的界面,为用户提供了一种全新的文件管理体验。 XYplorer:速…

SpringMVC文件上传(CommonsMultipartResolver)

以上传一个图片为例 添加依赖 <!--文件上传--> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version> </dependency> 配置文件上传解析器 <…

用C语言采集亚马逊amazon产品数据

上一篇文章我是用C写的一个爬取亚马逊的爬虫程序&#xff0c;相信大家已经看过了&#xff0c;这次呢&#xff0c;我依然使用C语言来写一个爬虫&#xff0c;大体上思路是和之前一样&#xff0c;只是支持的库以及语法有些区别&#xff0c;具体的呢我会一一解释出来&#xff0c;方…

利用Qt输出XML文件

使用Qt输出xml文件 void PixelConversionLibrary::generateXML() {QFile file("D:/TEST.xml");//创建xml文件if (!file.open(QIODevice::WriteOnly | QIODevice::Text))//以只写方式&#xff0c;文本模式打开文件{qDebug() << "generateXML:Failed to op…

stable diffusion使用相关

IP Adapter&#xff0c;我愿称之它为SD垫图 IP Adapter是腾讯lab发布的一个新的Stable Diffusion适配器&#xff0c;它的作用是将你输入的图像作为图像提示词&#xff0c;本质上就像MJ的垫图。 IP Adapter比reference的效果要好&#xff0c;而且会快很多&#xff0c;适配于各种…