Kafka-核心架构-分区、副本(含副本选举机制)

article/2024/6/13 21:22:56

Kafka概述

在这里插入图片描述

Kafka-核心架构-分区

Kafka的分区是将数据在主题(Topic)中逻辑上划分成多个片段的机制
在这里插入图片描述

分区使得数据可以被水平扩展,提高了Kafka的可伸缩性和吞吐量,并允许数据在集群中分布和并行处理。
在这里插入图片描述

1.Kafka 分区的作用

(1)数据分布和负载均衡:

  • Kafka通过将数据分割成多个分区并在集群中分布这些分区来实现数据的水平扩展和负载均衡。
  • 每个分区可以在集群中的不同节点上进行复制,从而提高了容错性。

(2)并行处理:

  • 每个分区在不同的消费者实例中可以并行处理,这提高了系统的吞吐量和性能。

(3)顺序保证:

  • Kafka保证每个分区内的消息顺序,即在同一个分区内,消息的顺序是有序的。
  • 但是在不同分区之间,消息的顺序不做保证。
    在这里插入图片描述

2.Kafka 分区的管理

(1)创建和删除:

  • 可以使用kafka-topics.sh命令创建和删除主题时指定分区数量,从而创建或删除分区。

(2)动态调整:

  • Kafka允许在运行时动态地调整分区数量,但这可能会影响消息的分布和顺序,需要谨慎操作。

(3)分区分配策略:

  • Kafka提供了多种分区分配策略,如轮询、随机等,用于将分区分配给消费者组中的消费者,以实现负载均衡和最优分配。

(4)分区副本:

  • 每个分区都有多个副本,副本的数量可以通过配置指定,副本之间会根据配置的复制策略进行数据同步,以提高数据的可靠性和持久性。

(5)分区Leader和副本:

  • 每个分区都有一个Leader副本,负责处理该分区的所有读写请求,而其他副本则作为Follower副本,从Leader副本同步数据,以实现高可用和故障转移。

Kafka-核心架构-副本

Kafka的副本(Replicas)是指在分区(Partition)级别对数据的冗余备份。每个分区可以配置多个副本,副本之间存储的是相同的数据。
在这里插入图片描述

1.Kafka 副本的作用

(1)数据冗余和容错性:

  • Kafka 使用副本机制来确保数据的冗余存储和容错性。
  • 每个分区可以配置多个副本,这些副本分布在不同的 Broker 节点上,一旦某个节点出现故障,系统可以从其他副本中继续提供服务,保证数据不丢失。

(2)提高读取性能:

  • 副本可以分布在不同的节点上,允许客户端从最近的副本读取数据,这样可以降低读取延迟并提高读取吞吐量。

(3)提高写入吞吐量:

  • Kafka 允许将写入请求发送给 Leader 副本,并且异步地将写入操作复制到 Followers 副本。
  • 这样可以在保证数据持久性的前提下提高写入吞吐量。

(4)故障转移:

  • 当 Leader 副本所在的节点发生故障时,Kafka 可以从副本中选择一个新的 Leader 副本来继续服务,从而实现故障转移,保证系统的可用性。

2.Kafka 副本的特性

在这里插入图片描述

(1)Leader 和 Followers:

  • 每个分区都有一个 Leader 副本和零个或多个 Followers 副本。
  • Leader 副本负责处理读写请求,而 Followers 副本则从 Leader 副本同步数据。

(2)数据同步:

  • Leader 副本会将写入操作异步地复制到 Followers 副本,一般情况下,写入操作在 Leader 副本成功提交后就会被复制到 Followers 副本,从而保证数据的一致性。

(3)ISR(In-Sync Replicas):

  • ISR 是指与 Leader 副本保持同步的 Followers 副本集合。
  • 如果某个副本落后于 Leader 副本太多,将会被从 ISR 中移除,直到其追赶上 Leader 副本的进度。

(4)副本选举:

  • 当 Leader 副本发生故障时,Kafka 集群会从 ISR 中选择一个副本作为新的 Leader 副本,以保证分区的可用性。

  • Kafka 中的副本选举是确保在领导者副本(Leader Replica)不可用时,从 ISR(In-Sync Replicas,同步副本)中选举一个新的领导者副本。

  • 这个过程是自动进行的,由 Kafka 控制器负责执行。

  • 下面是副本选举的一般步骤:

    • (1)领导者副本失效检测:
      Kafka 集群中的每个节点都会监视分区的领导者副本的状态。如果领导者副本失效,即无法响应请求或已经停止工作,节点会检测到这一情况。

    • (2)ISR 中的副本选择: 在领导者失效后,控制器会从 ISR(同步副本集合)中选择一个副本作为新的领导者。ISR 中的副本是与领导者保持同步状态的副本,它们的数据与领导者的数据是一致的。
      通常情况下,新的领导者会从 ISR 中选择。这是因为 ISR 中的副本与领导者保持同步,可以更快地接管领导者的角色,而不需要进行数据同步。

    • (3)副本选举通知:
      一旦控制器选择了新的领导者副本,它会将这一信息通知给集群中的所有节点。

    • (4)选举结果确认:
      所有节点接收到新领导者的选举通知后,它们会更新本地的分区信息,将新的领导者副本标记为领导者,并更新其角色状态。

    • (5)客户端重定向:
      一旦新的领导者选举完成,Kafka 控制器会将分区的元数据更新到 Zookeeper(或者最新版本的 Kafka 使用自己的元数据存储),并通知客户端有关领导者副本的更改。
      客户端在收到更新后,会将请求重定向到新的领导者副本,确保数据的连续性和可用性。

通过在 ISR 中选择一个合适的副本作为新的领导者,Kafka 能够快速地恢复分区的服务,保证系统的稳定性和可用性。

3.Kafka 副本的管理

  • 副本配置:可以通过配置文件或者动态配置指定每个分区的副本数量,以满足不同的容错性和性能需求。
  • 副本调整:Kafka 允许在运行时动态地调整分区的副本数量,但需要注意的是,增加副本数量可能会增加系统的负载和存储开销。
  • 副本同步策略:可以配置副本之间的同步方式,包括同步和异步复制,以及复制的延迟和批量大小等参数。
  • 监控和故障处理:Kafka 提供了丰富的监控工具和指标,可以用来监控副本的状态和健康情况,并及时处理副本同步延迟、故障和数据不一致等问题。

http://www.ngui.cc/article/show-2100790.html

相关文章

力扣72-编辑距离

题目链接 记忆化搜索: 解题关键:每次仅考虑两字符串word1、word2分别从0 - i修改成0-j下标的完全匹配(下标表示) 临界条件:当 i 或 j 小于0时,表示该字符串为空,编辑距离确定为 y1 或 x1 int dp[501][501…

第6章 动态响应页面内容

1 什么是动态页面 之前案例虽然收到了表单提交的参数但是收到了404错误,因为确实没有页面与请求URI对应,解决这个办法就可以使用动态页面技术,就是动态生成页面内容。 动态响应页面(Dynamic Response Page)是一种动态生成的Web页面,其内容可以根据用户的请求和其他动态变…

linux ndk编译搭建测试

一、ndk下载 NDK 下载 | Android NDK | Android Developers 二、ndk环境变量配置 ndk解压: unzip android-ndk-r26d-linux.zip 环境变量配置: export NDK_HOME/rd/own/test/android-ndk-r26d/ export PATH$PATH:$NDK_HOME 三、编译测试验证 …

word标题格式批量设置方法

1.直接全选ctrlA 全选后然后统一进行编辑(适用于标题是紧挨着的情况) 2.直接修改对应几级标题格式,然后应用于自己所需要的标题(可能会导致上面修改后但是下面不会自动更改,此时用第三种方法) 点击[开始…

互联网洗护工厂系统能带来哪方面的便捷

我们的干洗店洗衣洗鞋小程序,为您带来便捷、智能的洗衣洗鞋体验。只需轻触屏幕,即可在线预约洗衣服务,随时随地,无需等待,告别繁琐的电话预约。 用户成为会员,您将独享专属优惠与折扣,更有积分累…

如何配置Always On 可用性组

配置SQL Server的Always On可用性组是一个相对复杂的过程,涉及多个步骤。以下是一个简化的配置流程: 先决条件: 确保你正在使用SQL Server的企业版或开发人员版,因为Always On可用性组功能在这两个版本中是可用的。部署Always On可用性组需要一个Windows Server故障转移群集…

Python内置函数oct()详解

Python中的oct()函数是一个内置函数,用于将一个整数转换成它的八进制字符串表示。 函数定义 oct()函数的基本语法如下: oct(x)x:一个整数。 函数返回x的八进制表示,以字符串形式。 基本用法 将整数转换为八进制 number 64…

vue3 使用WebAssembly 实战

在Vue 3中使用WebAssembly(WASM)的一个基本示例包括以下几个步骤: 1. 准备WebAssembly模块 首先,你需要一个WebAssembly模块。假设你已经有了一个编译好的.wasm文件,比如名为example.wasm。 2. 加载WebAssembly模块…

几个人脸库对于面部动作识别的功能比较

经粗略研究,insightface只能识别面部特征点的位置,根据这些位置不能直接推出一个人是否在睡觉。 OpenFace 是一个高级的面部行为分析工具,它能够识别和分析多种面部动作单位(Facial Action Coding System, FACS),这些动作单位是根据面部肌肉活动定义的。每个动作单位(A…

golang实现普通升管理员权限

golang实现普通升管理员权限 package mainimport ("fmt""os""path/filepath""runtime""syscall""unsafe""golang.org/x/sys/windows""golang.org/x/sys/windows/registry" )var (modntdll …