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

news2024/9/28 7:22:19

在这里插入图片描述

  • 主题(topic):消息的第一次分类
    • 根据人为的划分条件将消息分成不同的主题
      • 主题的划分是人为的根据不同的任务情景去划分
        • 比如,我们有两个主题,一个是"订单",另一个是"库存"。每个主题代表一个消息流。
      • 主题的名称作为主题的为一标识符,我们需要保证其唯一性
      • Topic是一个逻辑上的概念,并不能直接在图中把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):备份节点是领导者的追随者,它们会按照领导者的指令更新数据。如果领导者失败,追随者可以接管并保持系统正常运行。
  • 消费者:
    • 同一消费组中,消费者不能同时消费同一分区的消息

    • 消费者分配消费分区策略

      • 初始化(静态)
        请添加图片描述

      • 动态变化

        • 同一消费组内,增加消费者
          请添加图片描述请添加图片描述

        • 增加消费组

        在这里插入图片描述

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

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

相关文章

记录一个Insert姿势引起的MySQL从库上查不到数据的问题

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 某测试环境的MySQL用了两台节点,主从同步结构。忽然有研发同学反映说MySQL的主从不同步了。他…

亚马逊测评怎么做?

亚马逊作为全球最大的跨境电商公司,吸引了很多的中国卖家入驻,行业的内卷也是越来越严重,很多做过国内电商的都知道测评可以提高产品权重,快速提升产品销量 而测评模式主要有两种: 真人测评 优点:老外手…

【嵌入式——QT】QT静态编译

【嵌入式——QT】QT静态编译 QT下载查看文档下载Visual Studio打开命令行模式编译添加QT到Qt Creator编译示例 QT下载 下载地址 进入目录,我这里选择的qt-everywhere-src-5.14.1.zip。 查看文档 解压压缩包打开源码,查看README文件,里面…

解决文字识别中误识别问题的秘籍

随着人工智能技术的不断发展,文字识别技术已经广泛应用于各个领域,如智能客服、智能家居、自动驾驶等。然而,在实际应用中,文字识别技术也面临着误识别的问题。误识别不仅会影响用户体验,还可能导致严重的后果。因此&a…

UE5 实现RPG游戏操作控制

在UE5以后,epic抛弃了之前的那一套操作输入系统,使用了一套新的增强输入作为替代,目的主要是解决经常切换操作时的问题(操作人物上车以后,可以直接切换成操作汽车的一套输入)接下来,将实现如何使…

双目测距工程Stereo-Vision-master学习笔记

硬件: 首先要要把两个摄像头固定到支架上,并且两个摄像头的间距应该在110mm,两个摄像头没有落差 相机的内参数包括焦距、主点坐标、像素尺寸等,这些参数决定了相机成像的几何变换关系。内参数是相机固有的属性,不会随…

RK3568驱动指南|第十二篇 GPIO子系统-第128章 GPIO入门实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

【期末考试】网络综合复习宝典

相关链接 网络复习思维导图(HCIP)https://www.edrawsoft.cn/viewer/public/s/038e2370897928 详述循环冗余校验CRC码https://blog.csdn.net/liht_1634/article/details/124328005?app_version6.2.6&codeapp_1562916241&csdn_share_tail%7B%22…

用通俗易懂的方式讲解:十分钟读懂 Stable Diffusion 运行原理

AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好…

windows server 2012、2019服务器定时重启

手动设置定时任务 1.开始菜单,找到“计划任务程序”; 如果无法创建基本任务的话,可能是系统中的“Task Scheduler”服务没有启动,你可在运行中键入“ services.msc”,查看“Task Scheduler”服务是否被设置成了“已禁用”&#x…

2024 年 8 款最好的PDF阅读和编辑软件

写出好的内容本身就是一门艺术。写作中的错误会让你看起来粗心大意或无能为力——这两种情况都不利于你的职业形象。没有任何软件能够取代现实生活中可以指出您写作错误的编辑器。幸运的是,有些软件已经接近并仍在改进它们的服务以帮助您清理工作。 编辑PDF很昂贵&…

k8s集群配置NodeLocal DNSCache

一、简介 当集群规模较大时,运行的服务非常多,服务之间的频繁进行大量域名解析,CoreDNS将会承受更大的压力,可能会导致如下影响: 延迟增加:有限的coredns服务在解析大量的域名时,会导致解析结果…

【Maven】002-Maven 安装和配置

【Maven】002-Maven 安装和配置 文章目录 【Maven】002-Maven 安装和配置一、官网1、官网2、历史版本列表 二、下载 Maven 3.8.8 版本1、进入 Maven 3.8.8 版本发行说明页2、进入下载页3、下载4、下载得到 apache-maven-3.8.8-bin.zip 三、Maven 安装1、将安装包解压到想放置的…

牛客周赛 Round 1 解题报告 | 珂学家 | 分类计数 + 同余DP

前言 生于生时,亡于亡刻。遵从自心,尽人之事。 整体评价 终于等来了侧重面试的比赛,而且题量刚刚好,不超纲,不涉及算法竞赛。 第一场的比赛,感觉题目出的比较典,A是简单模拟,B则是…

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数 PK_ENTITY_t entity; PK_CLASS_t PK_TYPE; PK_ENTITY_ask_class(e…

玩转Mysql 六(MySQL数据存储结构)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 一、MySQL数据存储结构解析 1、mysql数据存储结构的组成 ​ 从 InnoDB 逻辑存储结构来看&a…

HandlerInterceptor拦截器 postHandle执行addHeader无效,postHandle执行setStatus无效的解决方案

问题描述 想在postHandle方法里执行addHeader方法来补充一些Header信息(如分页信息),但是最后执行却未如期显示 拦截器源码 import com.zhangziwa.practisesvr.utils.response.ResponseContext; import jakarta.servlet.http.HttpServletR…

【降龙算法】基于QT插件机制实现一个机器视觉算法小框架

机器视觉行业有各种各样的拖拉拽框架,也叫做低代码平台,例如国内海康的VisionMaster: 一个机器视觉框架需要包含各种算法模块,日志窗口,图像显示窗口等等,【降龙算法】就是做了一个入门级的机器视觉算法框…

What does `HandlerInterceptor` do?

HandlerInterceptor 是 SpringMVC 中的一个接口&#xff0c;在SpringMVC应用中它提供了一种实现应用级拦截器的机制。 第1步&#xff1a;引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…

自动化测试框架pytest系列之8个常用的装饰器函数

自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客 自动化测试框架pytest系列之21个命令行参数介绍(二)-CSDN博客 自动化测试框架pytest系列之强大的fixture功能&#xff0c;为什么fixture强大&#xff1f;一文拆解它的功能参数。(三)-CSDN博客 接上文 3.5 pytest的8…