【Kafka】深入了解Kafka

集群的成员关系

Kafka使用Zookeeper维护集群的成员信息

  • 每一个broker都有一个唯一的标识,这个标识可以在配置文件中指定,也可以自动生成。
  • broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系统工具会订阅Zookeeper的 /brokers/ids 路径;当有broker加入或退出集群时,会收到通知。
  • 当试图启动另一个具有相同ID的broker时,会收到错误信息。

控制器

控制器也是一个broker,除了提供一般broker功能外,还负责选举分区首领

创建控制器

  • 集群中第一个启动的broker会通过Zookeeper创建一个/controller的临时节点让自己成为控制器;
  • Zookeeper会为控制器分配一个epoch
  • 其他broker在启动时,也会尝试创建,但是因为已经存在他们会收到”节点已存在“异常;
  • 然后在控制器节点上创建Zookeeper watch,这样就可以接收这个节点的变更通知。通过这样的方式来保证节点只有一个控制器。
    image

变更控制器

  • 控制器关闭或者与Zookeeper断开连接,这个临时节点会消失;
  • 当其他节点收到控制器节点消失的通知时,会尝试创建/controller的临时节点成为控制节点;
  • 其他未创建成功的broker会在新的控制节点上创建Zookeeper watch
  • 新的控制器节点由Zookeeper分配一个数值更大的epoch。这样做的目的是为了杜绝之前离线的控制器重新上线,并且发送消息,如果broker接收到消息的epoch小于监听的则会忽略当前消息。
    image

新控制器 KRaft

用基于Raft的控制器替换基于Zookeeper的控制器。
集群即可以使用基于Zookeeper的传统控制器,也可以使用KRaft

为什么替换控制器

  • 元数据是同步写入Zookeeper的,但是异步发送给broker的,Zookeeper的接收更新也是异步的,会导致broker、控制器和Zookeeper之间元数据不一致的情况
  • 控制器在重新启动时需要从Zookeeper读取所有的broker和分区元数据,再将他们发给所有broker,随着分区和broker的争夺,重启控制器会变慢。
  • 元数据所有权架构不够好,有些操作通过控制器、有些通过broker、有些通过Zookeeper来完成
  • 使用Kafka需要对Zookeeper有一定了解,学习成本较高

Zookeeper主要功能

  • 用于选举控制器
  • 保存集群元数据(broker、配置、主题、分区和副本)

KRaft

  • 新架构中控制器节点形成了一个Raft仲裁,管理元数据事件日志,这个日志包含了集群元数据的每一个变更,原先保存在Zookeeper中的所有东西(主题、分区、ISR、配置等)都保存在这个日志中。

  • 涉及直接与Zookeeper通信的客户端和broker操作都通过控制器来路由,以达到无缝迁移。

  • 使用Raft算法,控制节点可以在不依赖外部系统情况下选举首领,首领节点被称为主控制器,负责处理来自所有broker的RPC的调用,跟随者控制器从主控制器复制数据,并会作为主控制器的热备,

  • 其他broker通过API从主控制器获取更新,而不是等待通知。broker将自己注册到控制器仲裁上,在注销前会一直保持注册状态。

复制

复制是Kafka架构核心的一部分,之所以这么重要,是因为他可以在个别节点失效时仍能保证Kafka的可用性和持久性。

Kafka中每个主题有若干分区,每个分区可以有多个副本,副本均匀的分布在多个broker中。
副本有两种类型

  • 首领副本:每个分区都有一个首领副本,为了保证一致性,所有生产者的请求都会经过这个副本。客户端可以从首领副本或者跟随者副本读取数据
  • 跟随者副本:除了首领副本以外都是跟随者副本。没特别指定,跟随者副本不处理来自客户端的请求,主要任务是从首领副本复制消息,保持与首领一致的状态。

请求的处理

客户端持有集群的元数据缓存,元数据中包含了客户端感兴趣的主题清单以及主题包含的分区、副本、首领等,一般情况下客户端会直接向目标broker发送生产请求和获取请求。

请求分类

  • 生产请求
  • 获取请求
  • 管理请求

生产请求

生产者发送的请求,包含客户端要写入broker的消息

borker在接收到生产请求时会做一些验证

  • 发送数据的用户是否有写入权限
  • 请求中acks参数是否有效
  • 如果acks=all是否足够多的同步副本保证消息已经写入
    消息写入分区首领后,broker会检查acks参数,等到所有的都完成后,会返回响应给客户端。
    获取请求

消费者和跟随者副本发送的请求,用于从broker读取消息。

broker接收到获取请求时会做一些校验

  • 请求指定的偏移量是否存在
    客户端读取消息时,Kafka使用零复制技术向客户端发送消息。也就是说Kafka会直接把消息从文件里发送到网路通道,不经过任何缓冲区。
    客户端能读取的消息是已经被写入所有同步副本的消息;部分没有完全同步给所有副本的消息是不会发送给消费者的。

管理请求

管理客户端发送的请求,用于执行元数据操作,比如创建和删除topic

存储

分层存储

  • 本次存储:与当前存储一致,保存在broker机器上
    • 优势:响应快
    • 劣势:成本高、数据保留时间短
  • 远程存储:利用HDFS、S3等存储系统来存储日志信息
    • 优势:成本低于本地存储、数据可保留较长时间
    • 劣势:响应较慢

文件管理

数据保留是Kafka的一个重要概念

  • Kafka中一个分区会分为若干片段
  • 默认每个片段包含1GB或者1周的数据,触发任意上限,会关闭当前文件,重新打开一个文件
  • 正在写入的片段叫做活动片段,活动片段不会被删除。

压实

保留每个键的最新有效数据,同时清理历史冗余的数据。

  • 保留最新值:对于每条消息,如果指定了 Key,Kafka 会为每个 Key 保留最后一个写入的 Value(最新状态)。
  • 删除冗余记录:所有旧版本的 Key-Value 对会被标记为可删除(逻辑删除),但物理删除会在后台异步完成。
  • 非键消息的保留:没有 Key 的消息(或 Key 为 null 的消息)不会被压实,仍然遵循基于时间或大小的保留策略(例如 7 天后删除)。

什么时候压实主题

  • 通过log.cleaner.enabled参数启动压实线程,线程会选择浑浊率最高的分区来压实。
  • 默认情况下会在主题中有50%数据包含脏记录时进行压实。
  • 每个日志片段分为两个部分
    • 干净的部分:被压实过的消息,每个键只有一个对应得值,是上一次压实保留下来得
    • 浑浊部分:上一次压实之后写入得
      image

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

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

相关文章

C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。

CSDN下载地址:https://download.csdn.net/download/sns1991sns/87726867 gitee下载地址:https://gitee.com/linsns/SnsPictrueBox 支持2种绘制方式:响应式和等待式。 一、使用响应式绘制图形 1、在窗口构造函数里添加绘制图形的完成响应函数 public…

Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!)

Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!) 在实战中,⼤多数情况下都不需要从0开始训练模型,⽽是使⽤“⼤⼚”或者其他研究者开源的已经训练好的⼤模型。 在各种⼤模型开源库中,最…

Redis BitMap 用户签到

Redis Bitmap Bitmap(位图)是 Redis 提供的一种用于处理二进制位(bit)的特殊数据结构,它基于 String 类型,每个 bit 代表一个布尔值(0 或 1),可以用于存储大规模的二值状…

Spring Boot 3 新特性实战:从理论到实践

引言 Spring Boot 自发布以来,凭借其简洁的配置和强大的功能,迅速成为 Java 开发者的首选框架。随着 Spring Boot 3 的发布,开发者们迎来了更多令人兴奋的新特性。本文将深入探讨 Spring Boot 3 的新特性,并通过实战示例展示如何…

Nodejs使用redis

框架:koa,通过koa-generator创建 redis: 本地搭建,使用默认帐号,安装说明地址以及默认启动设置:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 中间件&#x…

调研报告:Hadoop 3.x Ozone 全景解析

Ozone 是 Hadoop 的分布式对象存储系统,具有易扩展和冗余存储的特点。 Ozone 不仅能存储数十亿个不同大小的对象,还支持在容器化环境(比如 Kubernetes)中运行。 Apache Spark、Hive 和 YARN 等应用无需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…

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

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

除自身以外数组的乘积——面试经典150题(力扣)

题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时…

⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C++实现)Binary Tree Preorder Traversal

⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C实现)Binary Tree Inorder Traversal Given the root of a binary tree, return the preorder traversal of its nodes’ values. Example 1: Input: root [1,null,2,3] Output: [1,2,3]Explanation: Exam…

计算机二级MS之Excel

声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点&#x…

【Linux】VMware Workstation Pro 17 安装教程

目录 安装 VMware Workstation Pro 17 一、CDS Repository 获取安装包 二、网盘获取安装包 三、Broadcom官方获取安装包 后续安装过程没啥特殊要求 安装 VMware Workstation Pro 17 目前VMware Workstation pro 17已经对个人用户免费开放使用。 Broadcom官网地址&#x…

如何在云端平台上建立 30,000 名用户的网页 MMO游戏环境-2 (服务器)

接续上一篇「如何在云端平台上建立 30,000 名用户的网页 MMO游戏环境」,接下来讨论模拟连结上的问题。 最初计划使用35台伺服器来完成这个实验,希望能够有大量的用户连接,以验证真实的连接状况。然而,我们高估了这方面&#xff0c…

架构设计的灵魂交响曲:系统设计各维度的深度解析与实战指南

引言: 系统设计的背景与重要性 在快速变化的技术环境中,数字化转型成为企业生存与发展的核心驱动力。系统设计能力不仅是技术团队的核心竞争力,也是推动业务创新和提升整体效率的关键因素。根据Gartner的研究,超过70%的数字化转型项目未能实…

C语言指针(详细总结)

目录 1.初始C指针 几个重要的概念: 指针的加减 &与* 二级指针 2.指针与数组 指针数组 数组指针变量 一维数组与二维数组传参的本质 ​编辑​编辑 ​编辑 3.指针与函数 函数指针数组 4.指针与结构体 5.野指针以及常见的内存管理错误 常见的内存错…

JAVA学习-练习试用Java实现“编写一个Spark程序,结合Elasticsearch对大数据进行全文搜索和筛选“

问题: 编写一个Spark程序,结合Elasticsearch对大数据进行全文搜索和筛选。 解答思路: 为了编写一个结合Apache Spark和Elasticsearch进行全文搜索和筛选的程序,你需要按照以下步骤操作: 1. 设置Spark环境:…

VLLM专题(二十一)—分布式推理与服务

1. 如何决定分布式推理策略? 在深入探讨分布式推理和服务之前,我们首先需要明确何时使用分布式推理以及可用的策略是什么。常见的做法如下: 单 GPU(无需分布式推理): 如果你的模型可以放入单个 GPU 中,那么你可能不需要使用分布式推理。直接使用单个 GPU 运行推理即可。…

torcharrow gflags版本问题

问题描述 其实仍然是很简单的编译问题,但是又弄了一整个下午加几乎整个晚上,进度缓慢,又吸取了教训,因而还是来记录一下。 在试图使用torcharrow进行推荐系统模拟的时候,撰写的python程序报错:ERROR: flag…

介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。

LSM 树(Log-Structured Merge-Tree) 核心原理:通过将随机写转换为顺序写优化写入性能,适用于写密集型场景。数据首先写入内存中的 MemTable(有序结构,如跳表),当达到阈值后转为 Imm…

ESP32 BLE 初步学习笔记

前言 蓝牙作为一个庞大的知识体系,其学习和运用对于初学者来说显得有些复杂且凌乱。我整理了这段时间的学习笔记,涵盖了协议栈、工作流程、参数等内容。在实际应用中,我们主要使用 GAP 和 GATT,协议栈中的其他部分只需了解即可。…

dfs(二十四)47. 全排列 II

47. 全排列 II 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出:[[1,…