【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):备份节点是领导者的追随者,它们会按照领导者的指令更新数据。如果领导者失败,追随者可以接管并保持系统正常运行。

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

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

相关文章

JavaScript基础(26)_dom增删改练习

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>DOM增删改练习</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>table {borde…

PMP与NPDP证书:哪个更权威?哪个含金量更高?

&#x1f3af;PMP和NPDP都具有权威性&#xff0c;但它们在领域和目标人qun方面略有不同。 1️⃣PMP在项目管理领域有较高的国际认可度 &#x1f48e;PMP是由项目管理协会(PMI)颁发的项目管理专业认证&#xff0c;具有较高的国际认可度。 PMP证书持有者通常具备严谨的项目管理知…

ubuntu20.04网络问题以及解决方案

1.网络图标消失&#xff0c;wired消失&#xff0c;ens33消失 参考&#xff1a;https://blog.51cto.com/u_204222/2465609 https://blog.csdn.net/qq_42265170/article/details/123640669 原始是在虚拟机中切换网络连接方式&#xff08;桥接和NAT&#xff09;&#xff0c; 解决…

C++代码重用:继承与组合的比较

目录 一、简介 继承 组合 二、继承 三、组合 四、案例说明 4.1一个电子商务系统 4.1.1继承方式 在上述代码中&#xff0c;Order类继承自User类。通过继承&#xff0c;Order类获得了User类的成员函数和成员变量&#xff0c;并且可以添加自己的特性。我们重写了displayI…

第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

OpenCV-19图像的仿射变换

放射变换是图像旋转&#xff0c;缩放&#xff0c;平移的总称&#xff0c;具体的做法是通过一个矩阵和原图片坐标进行计算&#xff0c;得到新的坐标&#xff0c;完成变换&#xff0c;所以关键就是这个矩阵。 一、仿射变换之图像平移 使用API------warpAffine&#xff08;src &…

【LangChain学习之旅】—(7) 调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

【LangChain学习之旅】—&#xff08;7&#xff09; 调用模型&#xff1a;使用OpenAI API还是微调开源Llama2/ChatGLM&#xff1f; 大语言模型发展史预训练 微调的模式用 HuggingFace 跑开源模型申请使用 Meta 的 Llama2 模型通过 HuggingFace 调用 LlamaLangChain 和 Hugging…

解决:ModuleNotFoundError: No module named ‘dbutils’

解决&#xff1a;ModuleNotFoundError: No module named ‘dbutils’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named dbutils背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;…

强化学习应用(四):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

快速搭建前端开发平台利器

JNPF是一款基于springboot、vue.js技术的企业级低代码平台&#xff0c;采用微服务、前后端分离等标准的原生架构&#xff0c;基于可视化业务建模、流程建模、表单建模、报表建模、大屏建模、移动端建模等工具&#xff0c;零代码快速构建业务应用。 官网地址&#xff1a;https:…

C++|44.智能指针

文章目录 智能指针unique_ptr特点一——无法进行复制 shared_ptr特点一——可复制特点二——计数器&#xff08;用于确定删除的时机&#xff09; 其他 智能指针 通常的指针是需要特殊地去申请对应的空间&#xff0c;并在不使用的时候还需要人工去销毁。 而智能指针相对普通的指…

imgaug库指南(19):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…