Kafka-集群架构设计

news2024/9/24 16:25:35

Kafka的Zookeeper元数据梳理

zookeeper整体数据

Kafka将状态信息保存在Zookeeper中,这些状态信息记录了每个Kafka的Broker服务与另外的Broker服务 有什么不同。通过这些差异化的功能,共同体现出集群化的业务能力。这些数据,需要在集群中各个Broker 之间达成共识,因此,需要存储在一个所有集群都能共同访问的第三方存储中。

Kafka的整体集群结构:

Kafka的集群中,最为主要的状态信息有两个:

  • 在多个Broker中,需要选举出一个Broker,担任 Controller角色。由Controller角色来管理整个集群中的分区和副本状态。

  • 在同一个Topic下的多个 Partition中,需要选举出一个Leader角色。由Leader角色的Partition来负责与客户端进行数据交互。

Zookeeper数据整体分布图:

Zookeeper客户端工具: prettyZoo。下载地址:Releases · vran-dev/PrettyZoo · GitHub

Controller Broker选举机制

在Kafka集群进行工作之前,需要选举出一个Broker来担任Controller角色,负责整体管理集群内的分区和副本状态。选举Controller的过程就是通过抢占Zookeeper的/controller节点来实现的。

当一个集群内的Kafka服务启动时,就会尝试往Zookeeper上创建一个/controller临时节点,并将自己的 brokerid写入这个节点。而Zookeeper会保证在一个集群中,只会有一个broker能够成功创建这个节点。这个注册成功的broker就成 了集群当中的Controller节点。节点内容:

{"version":2,"brokerid":0,"timestamp":"1702350416126","kraftControllerEpoch":-1}

临时节点:长时间断开连接,会被自动删除

监听机制:监听节点的状态,节点被删除后给所有监听器广播节点状态变化事件

Controller节点,负责监听Zookeeper中的其他一些关键节点,触发集群的相关管理工作:

  • 监听Zookeeper中的/brokers/ids节点,感知Broker增减变化。

  • 监听/brokers/topics,感知topic以及对应的partition的增减变化。

  • 监听/admin/delete_topic节点,处理删除topic的动作。

另外,Controller还需要负责将元数据推送给其他Broker。

Leader Partition选举机制

在Kafka中,一个Topic下的所有消息,是分开存储在不同的Partition中的。

使用kafka-topics.sh脚本创 建Topic时

  • 通过--partitions参数指定Topic下包含多少个Partition

  • 通过--replication-factors参数指定每个Partition有几个备份

在一个Partition的众多备份中,需要选举出一个Leader Partition,负责对接所有的客户端请求,并将消息优先保存,然后再通知其他Follower Partition来同步消息。

涉及的基础概念:

  • AR: Assigned Repllicas。 表示Kafka分区中的所有副本(存活的和不存活的)

  • ISR: 表示在所有AR中,服务正常且保持与Leader同步的Follower集合。如果Follower长时间没有向Leader发送通信请求(超时时间由replica.lag.time.max.ms参数设定,默认30S),那么这个Follower就会被踢出ISR。(在老版本的Kafka中,还会考虑Partition与Leader Partition之间同步的消息差值,大于参数replica.lag.max.messages条就会被移除ISR。现在版本已经移除了这个参数)

  • OSR:表示从ISR中踢出的节点。记录那些服务有问题,延迟过多的副本。

# 查看状态命令
bin/kafka-topics.sh -bootstrap-server localhost:9092 --describe --topic disTopic

在选举Leader Partition时,会按照AR中的排名顺序,靠前的优先选举。只要当前Partition在ISR列表中,也就是是存活的,那么这个节点就会被选举成为Leader Partition。(AR就是Replicas列中的Broker集合)

Leader Partition自动平衡机制

默认情况下,Kafka会尽量将Leader Partition分配到不同的Broker节点上,用以保证整个集群的性能压力能够比较平均。但是,经过Leader Partition选举后,这种平衡就有可能会被打破,让Leader Partition过多的集中到同一个Broker上,影响集群的整体性能。为此,Kafka设计了Leader Partition自动平衡机制,当发现Leader分配不均衡时,自动进行Leader Partition调整。

Leader Partition自平衡逻辑:会认为AR当中的第一个节点就应该是Leader节点。这种选举结果称为preferred election 理想选举结果。Controller会定期检测集群的Partition平衡情况,在开始检测时,Controller会依次检查所有的Broker。当发现这个Broker上的不平衡的Partition比例高于leader.imbalance.per.broker.percentage阈值时,就会触发一次Leader Partiton的自平衡。

官方文档的部分截图:

涉及Broker中server.properties配置文件的几个重要参数:

#1 自平衡开关。默认true
auto.leader.rebalance.enable
Enables auto leader balancing. A background thread checks the distribution of partition leaders at regular intervals, configurable by `leader.imbalance.check.interval.seconds`. If the leader imbalance exceeds `leader.imbalance.per.broker.percentage`, leader rebalance to the preferred leader for partitions is triggered.
Type:   boolean
Default:    true
Valid Values:   
Importance: high
Update Mode:    read-only
​
#2 自平衡扫描间隔
leader.imbalance.check.interval.seconds
The frequency with which the partition rebalance check is triggered by the controller
Type:   long
Default:    300
Valid Values:   [1,...]
Importance: high
Update Mode:    read-only
​
#3 自平衡触发比例
leader.imbalance.per.broker.percentage
The ratio of leader imbalance allowed per broker. The controller would trigger a leader balance if it goes above this value per broker. The value is specified in percentage.
Type:   int
Default:    10
Valid Values:   
Importance: high
Update Mode:    read-only

注意:使用集群时,要修改集群中所有broker的文件,并且重启Kafka服务才能生效

# 手动触发所有Topic的Leader Partition自平衡
bin/kafka-leader-election.sh --bootstrap-server worker1:9092 --election-type preferred  --topic secondTopic --partition 2

Leader Partition自平衡的过程是一个非常重的操作,因为要涉及到大量消息的转移与同步。并且,在这个过程中,会有丢消息的可能。所以在很多对性能要求比较高的线上环境,会选择将参数auto.leader.rebalance.enable设置为false,关闭Kafka的Leader Partition自平衡操作,用其他运维的方式,在业务不繁忙的时间段,手动进行Leader Partiton自平衡,尽量减少自平衡过程对业务的影响。

Partition故障恢复机制

当一组Partition中选举出了一个Leader节点后,这个Leader节点就会优先写入并保存Producer传递过来的消息,然后再同步给其他Follower。当Leader Partition所在的Broker服务发生宕机时,Kafka就会触发Leader Partition的重新选举。

Kafka为了消息能够在多个Parititon中保持数据同步,内部记录了两个关键数据:

  • LEO(Log End Offset): 每个Partition的最后一个Offset

每个Partition都会记录自己保存的消息偏移量。leader partition收到并记录了生产者发送的一条消息,就将LEO加1。follower partition从leader partition同步消息,每同步到一个消息,自己的LEO就加1。通过LEO值,就知道各个follower partition与leader partition之间的消息差距。

  • HW(High Watermark): 一组Partiton中最小的LEO。

follower partition每次往leader partition同步消息时,都会同步自己的LEO给leader partition。这样leader partition就可以计算出这个HW值,并最终会同步给各个follower partition。leader partition认为这个HW值以前的消息,都是在所有follower partition之间完成了同步的,是安全的。这些安全的消息可以被消费者拉取。而HW值之后的消息,是不安全的,可能丢失的。这些消息如果被消费者拉取消费了,就有可能造成数据不一致。

当服务出现故障时,如果是Follower发生故障,不会影响消息写入,只是少了一个备份而已。Kafka会做如下处理:

1、将故障的Follower节点临时踢出ISR集合。其他Leader和Follower继续正常接收消息。

2、出现故障的Follower节点恢复后,不会立即加入ISR集合。该Follower节点会读取本地记录的上一次的HW,将自己的日志中高于HW的部分信息全部删除掉,然后从HW开始,向Leader进行消息同步。

3、等到该Follower的LEO大于等于整个Partiton的HW后,就重新加入到ISR集合中。也就是说这个Follower的消息进度追上了Leader。

如果是Leader节点出现故障,Kafka为了保证消息的一致性,会做如下处理:

1、Leader发生故障,会从ISR中进行选举,将一个原本是Follower的Partition提升为新的Leader。这时,消息有可能没有完成同步,所以新的Leader的LEO会低于之前Leader的LEO。

2、Kafka中的消息都只能以Leader中的备份为准。其他Follower会将各自Log文件中高于HW的部分全部清理掉,然后从新的Leader中同步数据。

3、旧的Leader恢复后,将作为Follower节点,进行数据恢复。

在这个过程当中,Kafka注重的是保护多个副本之间的数据一致性。但是消息的安全性就得不到保障。

思考:HW和LEO是一个分布式的值,怎么保证HW在多个Broker中是一致的呢?

HW一致性保障-Epoch更新机制

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

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

相关文章

DS二分查找_搜索二维矩阵(纯二分查找写法)

本题我写了两个方法,一个是的时间复杂度,就是本文章一个mn时间复杂度,这个比较简单,如果不会二分法可以看这篇文章 Description 使用二分查找法来判断m*n矩阵matrix中是否存在目标值target。 该矩阵有以下特性: 1. 每行中的整数…

智物发布MT6877平台无线AR智能眼镜参考设计,推动下一代无线AR发展

随着增强现实(AR)技术的不断发展,有线AR眼镜在连接和使用方面存在一些限制。为了解决这些问题,无线AR智能眼镜的推出势在必行。 新一代无线AR智能眼镜采用了天玑900(MT6877)平台作为参考设计,搭载了2.4GHz的八核处理器…

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一:二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中,判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型

5MW飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型,仿真运行速度快。 飞轮储能变流器采用双PWM环设计,并网电压电…

CleanMyMac2024绿色免费激活码序列号

2024CleanMyMac免费mac下载版是一款简单实用的PC清洁管理工具,电脑刚装完系统的时候运行速度超级快,随着时间的推移,你会发现越来越慢,经常会反应卡顿,越来越多的垃圾文件占用了你的磁盘空间,各种过时的日志…

数据结构学习 12字母迷宫

dfs 回溯 剪枝 这个题和dfs有关,但是我之前没有接触过,我看了这一篇很好的文章,看完之后写的答案。 我觉得很好的总结: dfs模板 int check(参数) {if(满足条件)return 1;return 0; }void dfs(int step) {判断边界{相应操作}尝试…

HPV为什么无症状?皮肤性病科专家谭巍解读具体原因

HPV,即人乳头瘤病毒,是一种常见的性传播疾病。然而,并不是所有感染HPV的人都会出现症状。为什么有的人感染HPV没有症状呢? 首先,需要了解的是,HPV感染是一种非常常见的现象。事实上,大约有80%的性活跃人群…

SLAM学习——相机模型(针孔+鱼眼)

针孔相机模型 针孔相机模型是很常用,而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系,基于针孔的投影过程可以通过针孔和畸变两个模型来描述。 模型中有四个坐标系,分别为world,c…

智能指针管理“newed对象”

为什么要有智能指针? 指针智能是管理管理动态内存分配对象的一种机制。它提供了自动管理内存,避免常见内存泄漏和悬空指针。 对于上述Func函数的操作,一不小心就会产生很多问题。 p1 new时候抛异常 什么都不做p2 new时候抛异常 p1需要被清理…

SpringBoot 接口实现幂等性,实现的四种方案!

什么是接口幂等性 在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资…

3-分布式存储之Ceph

任务背景 虽然使用了分布式的glusterfs存储, 但是对于爆炸式的数据增长仍然感觉力不从心。对于大数据与云计算等技术的成熟, 存储也需要跟上步伐. 所以这次我们选用对象存储. 任务要求 1, 搭建ceph集群 2, 实现对象存储的应用 任务拆解 1, 了解ceph 2, 搭建ceph集群 3, 了…

【docker】 docker部署minio对象存储并用rclone同步

docker部署minio对象存储并用rclone同步 1.什么是minio? minio是一个开源的对象存储服务器,兼容S3协议。 官网:https://min.io/ 官方在开源的基础上也提供云端S3服务,分为个人和企业,有不同的收费标准。 1.1 自建对…

SQL注入【sqli靶场第15-19关】(四)

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 接上文:SQL注入【sqli靶场第11-14关】(三) …

Liunx系统安装mysql数据库

一、环境检查 1、检查本地是否安装MySQL服务; 2、下载MySQL安装包; 3、查看下载的文件 4、解压MySQL文件 5、安装MySQL 6、检查MySQL数据库安装情况 7、启动MySQL 8、查看MySQL安装初始密码 9、登录MySQL 10、设置远程授权 11、关闭防火墙

智慧灯杆技术应用分析

智慧灯杆是指在传统灯杆的基础上,通过集成多种先进技术实现城市智能化管理的灯杆。智慧灯杆技术应用的分析如下: 照明功能:智慧灯杆可以实现智能调光、时段控制等功能,根据不同的需求自动调节照明亮度,提高照明效果&am…

Pytorch学习概述

目录 学习目标人工智能1. 智能(Intelligence)1.1 人类智能1.2 机器学习(人工智能)1.3 深度学习1.4 学习系统的发展历程传统的机器学习策略 2. 传统机器学习算法的一些挑战3. 神经网络的简要历史3.1 Back Propagation(反…

Java数据类型相关

数据类型 Java有哪些数据类型 定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类 型,在内存中分配了不同大小的内存空间。 分类: 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,dou…

一键提取微信聊天记录,生成HTML、Word文档永久保存,还能生成微信年度聊天报告

不知道生活中你有没有遇到过这种情况,聊天记录不完整,有的在手机上,有的在电脑上,搜索起来很烦。那有没有一种办法可以把微信聊天记录统一呢?当然是有的。下面,就让我们一起来看一下怎么操作。 先看效果 操…

win11怎么录屏? Windows 11中录制屏幕的多种方法

Windows G 键在 Windows 11 中录制屏幕 win11怎么录屏?win11系统中想要对屏幕进行录屏,该怎么录屏呢?我们可以使用多款软件来实现,win11自带的软件和第三方软件,下面我们就来看看Windows 11中录制屏幕的多种方法 Win…

ICV:2023 年上半年全球量子计算的进展

2023年上半年,量子计算(QC)领域取得了一系列重要进展和突破,显示出量子计算技术的快速发展和商业应用的不断拓展。本报告从制度进步、产业生态、投融资形势、总结与展望四个方面对量子计算领域进行了系统而详细的分析。报告不仅回…