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

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

相关文章

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算: 設,是維矢量,是數。加法:。數乘:。 矢量由矢量組綫性表示: 設是n維矢量,若存在一組數,使得,則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…

在CentOS 7.6中安装openGauss 5.1.0 (Preview)数据库并使用Navicat进行远程连接的过程记录

部署环境 华为云Flexus应用服务器 操作系统:CentOS 7.6 openGauss版本:openGauss 5.1.0 (Preview) 参考文档 官方安装文档: https://docs.opengauss.org/zh/docs/5.1.0/docs/InstallationGuide/%E4%BA%86%E8%A7%A3%E5%AE%89%E8%A3%85%E6%B…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能:监控指标、链路追踪、告警日志,及 Continues Profiling 持续剖析能力。对于操作系统可观测,监控指标可以帮助查看各个子系统(I…

Shell脚本学习笔记:从入门到变量(一)

前言 最近在看 Shell 脚本相关的内容,以下是我从入门到变量部分的整理笔记,内容有点多,但都是干货。 先从基础开始,再逐步深入。 一、Shell 脚本入门 1. Linux 如何控制硬件? Linux 靠内核操作硬件(CP…

Linux应用:进程间通信

linux的进程间通信概述 进程间通信(IPC,Inter - Process Communication)是指在不同进程之间进行数据交换和同步的机制。由于每个进程都有自己独立的地址空间,直接共享内存存在困难,因此需要专门的 IPC 机制来实现进程…

el-input 不可编辑,但是点击的时候出现弹窗/或其他操作面板,并且带可清除按钮

1.focus“getFocus”鼠标聚焦的时候写个方法,弹窗起来 getFocus(){ this.定义的弹窗状态字段 true;} 2.点击确定的时候,数值赋值到el-input的输入框,弹窗取消(this.定义的弹段字端 false) 3.但是会有个问题就是el-input 不可点…

Weblogic未授权远程命令执行漏洞复现

1 漏洞简介 Weblogic是Oracle公司推出的J2EE应用服务器,CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程W…

海康SDK协议在智联视频超融合平台中的接入方法

一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包,用于与海康设备(如摄像头、NVR、DVR等)进行通信和控制。其核心原理包括: 网络通信:基于TCP/IP协议,实现设…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测!五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运…

20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3

stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3 2025/3/19 14:17 缘起:在荣品的PRO-RK3566开发板的buildroot系统下,在命令…

Git 使用笔记

参考链接: 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细,最傻瓜,最浅显,真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…

Xilinx系列FPGA视频采集转HDMI2.0输出,基于HDMI 1.4/2.0 Transmitter Subsystem方案,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的 GT 高速接口解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构FPGA开发板输入Sensor之-->OV5640摄像头动态彩条Video In To AXI4-S…

机器学习面试重点第二部分(动画版)

​ 目录 ​ 第一章、聚类算法 ​1.1 K-means 聚类 ​1.1.1 算法​编辑流程 1.1.2 优缺点 ​1.1.3 应用场景 ​1.2 层次聚类 ​1.2.1 算法流程 1.2.2 优缺点 ​1.2.3 应用场景 ​1.3 DBSCAN ​1.3.1 算法流程 1.3.2 优缺点 ​1.3.3 应用场景 1.3.4. 参数 ε&…

剑指Offer精选:Java与Spring高频面试题深度解析

一、Java底层核心机制 🔥 问题1:谈谈对Java的理解? 📌 核心技术特性 平台无关性 "一次编译,到处运行":通过JVM实现跨平台兼容 字节码(.class)作为中间语言,…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配(滚动操作&#xf…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用,通过将时域采集到的音频数据通过FFT为频域。通过本章的学习,读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节: 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

嵌入式开发之STM32学习笔记day08

从“门铃”到“中断”:手把手玩转STM32的外部中断控制器(EXTI) 引言:为什么我们需要“中断”? (类比生活场景:用“快递按门铃”解释中断的意义) 想象一下:当你在…

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别: VMw…

Mac:JMeter 下载+安装+环境配置(图文详细讲解)

📌 下载JMeter 下载地址:https://jmeter.apache.org/download_jmeter.cgi 📌 无需安装 Apache官网下载 JMeter 压缩包,无需安装,下载解压后放到自己指定目录下即可。 按我自己的习惯,我会在用户 jane 目…

【简单有效!】Gradio利用html插件实现video视频流循环播放

文章目录 前言 & 思路静态资源挂载完整代码结果示例 前言 & 思路 需要利用gradio在前端搭建一个页面,循环播放视频。思路是直接调用gr.HTML插件实现,简单有效!!! 静态资源挂载 app.mount("/static&quo…