Kafka入门04——原理分析

目录

01理解Topic和Partition

Topic(主题)

Partition(分区)

02理解消息分发

消息发送到分区

消费者订阅和消费指定分区

总结

03再均衡(rebalance)

再均衡的触发

分区分配策略

RangeAssignor(范围分区)

RoundRobinAssignor(轮询分区)

StickyAssignor(粘性分区)

Rebalance执行者Coordinator

再均衡的过程

再均衡的目的

04消费者读取消息Offset

消费者 Offset 的作用

重平衡和 Offset


01理解Topic和Partition

Topic 是消息的逻辑分类,而 Partition 是物理存储单元。在 Apache Kafka 中,Topic 和 Partition 是两个核心概念,它们用于管理消息的发布、存储和消费。不同的topic消息是分开存储的,同一topic下的不同分区包含的消息是不同的。

以下是对 Topic 和 Partition 的详细解释:

Topic(主题)
  1. Topic 是消息的逻辑容器:Topic 是 Kafka 中的消息分类或主题,它是消息的逻辑容器,类似于消息的类别或主题。生产者将消息发布到特定的 Topic,而消费者则订阅 Topic 来接收消息。

  2. 消息发布到 Topic:生产者将消息发布到一个或多个 Topic,可以根据业务需求创建不同的 Topic,每个 Topic 用于存储特定类型或主题的消息。

Partition(分区)
  1. 分区是消息的物理存储单元:分区是 Topic 的物理存储单元,它实际上是一个独立的消息日志文件。每个分区都包含一定范围的消息,消息以消息偏移量进行标识。

  2. 分区提供水平扩展:Kafka 允许为每个 Topic 配置多个分区,这些分区可以分布在不同的 Kafka 代理节点上,以提供水平扩展和分布负载的能力。

  3. 消息的顺序性:每个分区中的消息保持顺序性,即消息按照它们写入的顺序存储。这有助于维护消息的顺序性,特别对于需要处理有序数据的应用程序很重要。

  4. 多个消费者可以并行读取:多个消费者可以并行读取同一 Topic 的不同分区,以提高读取性能。这允许 Kafka 处理大规模的数据流和事件。

02理解消息分发

消息时Kafka中最基本的数据单元,在Kafka中,一条消息由key、value两部分组成。消息的发送由生产者负责。Kafka 的消息分发机制涉及生产者将消息发送到分区和消费者如何订阅和消费指定分区的消息。

消息发送到分区
  1. 消息键(Message Key):Kafka 生产者可以为每条消息指定一个消息键。消息键是一个字符串,它被用于确定消息应该发送到哪个分区。如果消息键为空,Kafka 生产者会使用分区分配策略来选择目标分区。

  2. 分区分配策略:Kafka 提供多种分区分配策略,例如轮询、随机、按键等策略。这些策略用于决定将消息发送到哪个分区。

  3. 生产者发送消息:生产者将消息与消息键一起发送到 Kafka 主题。如果指定了消息键,分区分配策略将使用消息键来选择目标分区。如果没有指定消息键,分区分配策略将使用轮询或其他默认策略。

消费者订阅和消费指定分区
  1. 消费者组:消费者通常以消费者组(Consumer Group)的形式消费消息。每个消费者组可以有多个消费者,它们一起消费主题中的消息。

  2. 订阅主题:消费者组通过订阅主题来指定要消费的消息来源。消费者组可以订阅一个或多个主题。

  3. 分区分配策略:Kafka 提供了分区分配策略,这些策略用于将分区分配给消费者组中的不同消费者。分区分配策略可以是轮询、最少分区、按键等策略。分区分配策略确保分区在消费者组中均匀分布。

  4. 消费指定分区:消费者可以通过分区分配策略订阅特定的分区,这样它们只会消费来自这些分区的消息。这是一种高度灵活的方式,允许消费者精确控制它们所消费的消息。

关于消费者消费消息:

  • 消费者组里的3个消费者会分别消费3个分区的消息,如果组里只有2个消费者,还是3个分区的情况下,那么有一个消费者会消费两个分区的消息,由策略决定。

  • Kafka的设计上,分区是不允许并发的,所以消费者数量大于分区数量是浪费

  • 当消费者少于分区的时候,需要尽可能保证读取均匀

  • 消费者从多个分区读数据不能保证总体的顺序性,只能保证单个分区数据的顺序性

  • 增减分区(partition)、消费者(consumer)以及节点(broker)都会导致再均衡(rebalance)

总结
  • 生产者发送消息时,可以选择是否指定消息键,以及采用哪种分区分配策略。

  • 消费者通常以消费者组的形式订阅主题,分区分配策略确保消息分布均匀。

  • 消费者可以选择消费特定的分区,从而控制它们所消费的消息。

03再均衡(rebalance)

Kafka 中的再均衡(Rebalance)是指在消费者组中发生变化(如有新消费者加入或旧消费者离开)时,Kafka 会重新分配分区以确保消息的均匀分发。再均衡是 Kafka 消费者组的核心机制,它确保消息的负载均衡和高可用性。

再均衡的触发
  1. 新消费者加入:当一个新消费者加入消费者组时,会触发再均衡。新消费者会参与到消费者组的分区分配中。

  2. 消费者离开:当一个消费者离开消费者组时,也会触发再均衡。分区将被重新分配给其它消费者。

  3. 分区数变化:如果 Kafka 主题的分区数发生变化,也可能触发再均衡,以确保新的分区能够被消费者组消费。

分区分配策略

Kafka 使用分区分配策略来决定分区如何分配给消费者。再均衡会触发分区分配。

常见的三种分区分配策略,Range(默认)、RoundRobin(轮询)和StickyAssignor(粘性)。

  1. RangeAssignor(范围分区)

    将同一主题中的分区按序号排序,对消费者按字母顺序排序。

    假设 :n = 分区数/消费者数量,m = 分区数%消费者数量

    那么前m个消费者每个分配n+1个分区,剩余的消费者每个分配n个分区

    例如:10个分区,3个消费者。(n = 10 /3 = 3,m = 10 % 3 = 1)

    结果:消费者A对应分区0,1,2,3。消费者B对应分区4,5,6。消费者C对应分区7,8,9。

  2. RoundRobinAssignor(轮询分区)

    将所有分区和消费者按照hashcode进行排序,通过轮询的方式分配给消费者。

    例如:10个分区的排序为0,2,3,4,1,8,6,9,5,7。消费者是A、B、C、D。

    结果: A对应分区0,1,5。B对应分区2,8,7。C对应分区3,6。D对应分区4,9。

  3. StickyAssignor(粘性分区)

    也叫粘滞策略,主要两个目的:

    • 分区的分配尽可能均匀

    • 分区的分配尽可能和上次分配保持相同

Rebalance执行者Coordinator

Kafka中指定了Coordinator负责再均衡的分区分配和消费者组的管理。Coordinator的确定:消费者向Kafka集群中的任意一个broker发送一个GroupCoordinatorRequest请求,服务端会返回一个负载均衡最小的broker节点的id,并将该broker设置为coordinator。

再均衡的过程
  1. 当再均衡触发时,Kafka 协调器(Coordinator)会协调分区的重新分配。协调器是 Kafka 服务中的一个组件,负责处理消费者组的管理和再均衡。

  2. 消费者向协调器发送它们当前持有的分区信息,协调器根据分区分配策略计算新的分区分配方案。

  3. 一旦计算出新的分区分配方案,协调器将新分配的分区信息通知给每个消费者。

  4. 消费者根据新的分区分配方案重新分配和管理分区,开始消费分配给它们的消息。

再均衡的目的
  • 均衡消费者间的分区负载,确保每个消费者处理大致相等数量的消息。

  • 支持高可用性:如果某个消费者发生故障,分区可以重新分配给其它活跃的消费者,以确保消息不会丢失。

再均衡是 Kafka 消费者组维护整体的负载均衡和可用性的关键机制。

04消费者读取消息Offset

消费者读取消息的偏移量(Offset)是非常重要的,它用于跟踪已消费的消息位置。Kafka 使用 Offset 来确保消息的有序和不重复传递。

消费者 Offset 的作用
  1. 消息的位置:Offset 表示消费者在一个特定分区中的消息位置。它是一个整数值,每个分区都有自己的 Offset。

  2. 消息的偏移量:当消费者成功消费一条消息后,它需要将消息的 Offset 保存下来,以便下次继续消费新的消息。Offset 可以看作是消息队列中消息的偏移量。

重平衡和 Offset

在 Kafka 中,再均衡(Rebalance)是常见的操作,它可能会导致消费者被重新分配到不同的分区。在再均衡期间,Offset 仍然会被维护,但消费者需要小心处理 Offset,以确保消息不会被重复消费或遗漏。

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

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

相关文章

MR混合现实情景实训教学系统在旅游管理专业中的应用

在旅游管理专业中,MR混合现实情景实训教学系统的主要应用包括但不限于以下几个方面: 1. 实地考察的替代:对于一些无法实地考察的景点或设施,学生可以通过MR系统进行虚拟参观,从而了解其实际情况。这不仅可以减少时间和…

人工智能基础_机器学习003_有监督机器学习_sklearn中线性方程和正规方程的计算_使用sklearn解算八元一次方程---人工智能工作笔记0042

然后我们再来看看,如何使用sklearn,来进行正规方程的运算,当然这里 首先要安装sklearn,这里如何安装sklearn就不说了,自己查一下 首先我们还是来计算前面的八元一次方程的解,但是这次我们不用np.linalg.solve这个 解线性方程的方式,也不用 直接 解正规方程的方式: 也就是上面…

【STM32】GPIO控制LED(HAL库版)

STM32最新固件库v3.5/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c 林何/STM32F103C8 - 码云 - 开源中国 (gitee.com) STM32最新固件库v3.5/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c 林何/STM32F103C8 - 码云 - 开源中国 (gitee.…

代码随想录二刷 Day50

198.打家劫舍 这个题一开始由于给出来的例子陷入了思维误区&#xff0c;以为结果就是每隔一个取一个&#xff0c;其实有可能中间隔很多个。比如一下这个例子 下面这种写法不对。 class Solution { public:int rob(vector<int>& nums) {int odd_sum 0;int even_su…

Loop Copilot:AI驱动,小白也能自己生成音乐?

01 项目介绍 Loop Copilot是一个使用自然语言生成音乐的系统。它不仅允许你使用自然语言来生成你想要的音乐风格、节奏或旋律&#xff0c;还支持通过多轮对话对已生成的音乐进行进一步的编辑和修改。包括对生成的音乐进行编辑修改、添加或删除乐器、加入音效等。 02 工作流程…

Spring Boot实战 | 如何整合高性能数据库连接池HikariCP

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

国密 SM2 SSL 证书 Nginx 安装指南 linux版

一、获取国密证书 1、在您完成申请西部GDCA服务器证书的流程后&#xff0c;下载证书将获取一个证书包&#xff0c;有以下 *.***.com_sign.crt&#xff1a;签名证书 *.***.com_sign.key&#xff1a;签名证书私钥 *.***.com_encrypt.crt&#xff1a;加密证书 *.***.com_encr…

【C++笔记】如何用检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、步骤详解 2.1 socket函数 socket 函数是用于创建套接字的函数&…

linuxnfs服务安装与配置实践

目录 一.NFS服务 二.NFS和RPC的概念 三.什么是RPC 四.工具 五.安装配置NFS环境 1.查看一下是否有nfs-utils和rpcbind软件包的安装rpm包 2.安装nfs-utils 、rpcbind 3.环境配置 1.nfs配置文件需要遵守如下规则&#xff1a; 2.nfs语法参数解释&#xff1a; 3.nfs客户端…

质数(素数)prime :只能被 1 和 它本身整除的自然数,不可再分,(三种方式求出质数)

从 2 开始&#xff0c;到这个数 减 1 结束为止&#xff0c; 都不能被这个数本身整除。例如&#xff1a;5 是否是质数 &#xff1f; 那么 2&#xff0c;3&#xff0c;4&#xff0c;都不能被 5 整除 所以 5 是 质数判断 n 是否是质数&#xff1f; 2&#xff0c;3&#xff0c;4&…

el-tree横向纵向滚动条

el-tree未展开时样式 el-tree展开时样式 给容器一个高度&#xff0c;然后样式加上overflow: scroll&#xff0c;这样纵向滚动条就出来了。 <el-card style"height: 528px;overflow: scroll"><el-inputplaceholder"输入关键字进行过滤"v-model&…

嵌入式系统设计师考试笔记之操作系统基础复习笔记一

目录 1、嵌入式软件基础 &#xff08;1&#xff09;嵌入式软件的特点&#xff1a; &#xff08;2&#xff09;嵌入式软件分类&#xff1a; &#xff08;3&#xff09;无操作系统的嵌入式软件的两种实现方式&#xff1a; &#xff08;4&#xff09;有操作系统的三大优点&am…

2021-arXiv-The Power of Scale for Parameter-Efficient Prompt Tuning

2021-arXiv-The Power of Scale for Parameter-Efficient Prompt Tuning Paper: https://arxiv.org/abs/2104.08691 Code: https://github.com/google-research/ text-to-text-transfer-transformer/ blob/main/released_checkpoints.md# lm-adapted-t511lm100k 在这项工作中&…

大数据调度最佳实践 | 从Airflow迁移到Apache DolphinScheduler

迁移背景 有部分用户原来是使用 Airflow 作为调度系统的&#xff0c;但是由于 Airflow 只能通过代码来定义工作流&#xff0c;并且没有对资源、项目的粒度划分&#xff0c;导致在部分需要较强权限控制的场景下不能很好的贴合客户需求&#xff0c;所以部分用户需要将调度系统从…

地面文物古迹保护方案,用科技为文物古迹撑起“智慧伞”

一、行业背景 当前&#xff0c;文物保护单位的安防系统现状存在各种管理弊端&#xff0c;安防系统没有统一的平台&#xff0c;系统功能不足、建设标准不同&#xff0c;产品和技术多样&#xff0c;导致各系统独立&#xff0c;无法联动&#xff0c;形成了“信息孤岛”。地面文物…

阿里云服务结构--长期更新

CNCF 全称Cloud Native Computing Foundation&#xff08;云原生计算基金会&#xff09;&#xff0c;成立于 2015 年7月21日&#xff08;于美国波特兰OSCON 2015上宣布&#xff09;&#xff0c;其最初的口号是坚持和整合开源技术来让编排容器作为微服务架构的一部分&#xff0…

uni-app中tab选项卡的实现效果 @click=“clickTab(‘sell‘)“事件可传参数

一、效果图 二、代码 <template><view><view class"choose-tab"><view class"choose-tab-item" :class"chooseTab 0 ? active : " data-choose"0" click"clickTab">选项1</view><view …

JVM | 命令行诊断与调优 jhsdb jmap jstat jps

目录 jmap 查看堆使用情况 查看类列表&#xff0c;包含实例数、占用内存大小 生成jvm的堆转储快照dump文件 jstat 查看gc的信息&#xff0c;查看gc的次数&#xff0c;及时间 查看VM内存中三代&#xff08;young/old/perm&#xff09;对象的使用和占用大小 查看元数据空…

Spark【Spark Streaming】

1、基本数据源 1.1、文件流 在spark Shell 下运行&#xff1a; [lyhhadoop102 spark-yarn-3.2.4]$ spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 2022-09-…

HTML笔记-狂神

1. 初识HTML 什么是HTML&#xff1f; Hyper Text Markup Language : 超文本标记语言 超文本包括&#xff1a;文字、图片、音频、视频、动画等 目前使用的是HTML5&#xff0c;使用 W3C标准 W3C标准包括&#xff1a; 结构化标准语言&#xff08;HTML、XML&#xff09; 表现标…