Kafka入门04——原理分析

news2024/9/20 6:11:29

目录

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.coloradmin.cn/o/1133000.html

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

相关文章

软件测试面试1000问(含文档)

前前后后面试了有20多家的公司吧,最近抽空把当时的录音整理了下,然后给大家分享下 开头都是差不多,就让做一个自我介绍,这个不用再给大家普及了吧 同时,我也准备了一份软件测试视频教程(含接口、自动化、…

进阶课4——随机森林

1.定义 随机森林是一种集成学习方法,它利用多棵树对样本进行训练并预测。 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,每棵树都由随机选择的一部分特征进行训练和构建。通过多棵树的集成,可以增加模型的多样性和泛化能力。…

MTK AEE_EXP调试方法及user版本打开方案

一、AEE介绍 AEE (Android Exception Engine)是安卓的一个异常捕获和调试信息生成机制。 手机发生错误(异常重启/卡死)时生成db文件(一种被加密过的二进制文件)用来保存和记录异常发生时候的全部内存信息,经过调试和仿真这些信息,能够追踪到异常的缘由。 二、调试方法…

深度学习_6_实战_点集最优直线解_代码解析

问题描述: 上述题目的意思为,人工造出一些数据点,对我们的模型y Xw b ∈进行训练,其中标准模型如下: 其中W和X都为张量,我们训练的模型越接近题目给出的标准模型越好 训练过程如下: 人造数…

订水商城H5实战教程-04用户注册

目录 1 用户注册2 创建模型应用3 开发审核功能4 配置菜单5 发布预览最终效果 我们上一篇讲解了用户协议的功能,如果用户同意协议,就可以跳转到注册页面,要求用户录入个人基本信息,本篇我们介绍一下用户注册功能。 1 用户注册 用户…

Python-自动化绘制股票价格通道线

常规方案 通过将高点/低点与其 2 个或 3 个相邻点进行比较来检测枢轴点,并检查它是否是其中的最高/最低点。对所有枢轴点进行线性回归以获得上方和下方趋势线。价格离开通道后建仓。通过这样做,我们得到如下所示的价格通道。我认为我们可以利用给定的数据取得更好的结果。

OkHttp网络框架深入理解-SSL握手与加密

OkHttp简介 由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。 特点: 支持HTTP/2并允许对同一主机的所有请求共享一个套接字通过连接池,减少了请求延迟…

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现

简介 JAX-WS(Java API for XML-Based Web Services),是创建web服务的Java编程接口,特别是SOAP服务。是Java XML编程接口之一,是Java SE 和Java EE 平台的一部分。 JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务AP…

红蓝对抗——信息收集

文章目录 1. 基础篇1.1 企业架构收集1.2 ICP 备案查询1.3 DNS 解析记录1.4 网络汇测1.5 C段收集1.6 证书收集1.7 接口收集1.8 APK信息收集1.9 公众号信息收集1.10 站点敏感信息收集1.11 供应链/业务链收集1.12 人员信息收集1.13 Google1.14 github信息收集 2. 进阶篇2.1 子域名…

C++ 异常和错误处理机制:如何使您的程序更加稳定和可靠

在C编程中,异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C中的异常处理和错误处理机制。 什么是异常处理? 异常处理是指在程序执行过程中发生异常或错误时,程序能够捕获并处理这些异常…

【打靶】vulhub打靶系列(一)—小白视野的渗透测试

主机探测 arpscan arp-scan -l 另一种方法arping for i in $(seq 1 200); do sudo arping -c 1 192.168.56.$i; done 注意这个必须是root权限 ​ 端口探测 nmap nmap -p- -sV -T4 192.168.56.104 发现8080端口 web测试 访问下web页面 1、通过逻辑点绕过 发送到xia_sq…

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

Redis数据类型——set类型数据介绍及操作

1.set类型介绍及基本操作 2.set类型数据的扩展操作

2023年5个美国代理IP推荐,最佳代理花落谁家?

美国代理IP指的是代理服务器位于美国的IP地址,对于跨境业务来说,这些代理IP地址可以用于隐藏用户的真实IP地址,将其网络流量路由通过美国的服务器,以实现一些特定的目的。由于近年来,面向美国市场的跨境商家越来越多&a…

Spring无法加载静态属性和SpringBoot单元测试指定加载配置文件

一、Spring无法加载静态属性,怎么解决? Spring主要用于管理和注入Bean(对象)的实例属性,而不是静态属性。静态属性属于类本身,而不是类的实例,因此Spring的依赖注入机制不会处理它们。 看图&a…

力扣:138. 随机链表的复制(Python3)

题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…

【Linux】Centos yum源替换

YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期(EOL)&#xff0…

设备保修小程序开发制作方案

设备保修小程序定位为一款专业的设备保修服务平台,旨在为用户提供便捷、高效、优质的设备保修服务。 一、用户需求 用户需要快速了解设备的保修政策和流程。 用户需要方便地提交保修申请和查询保修进度。 用户需要及时获取设备的维修信息和维修结果。 用户需要对设…

【鸿蒙软件开发】自定义弹窗(CustomDialog)

文章目录 前言一、创建自己第一个自定义弹窗1.1 创建自定义弹窗1.2 创建构造器,与装饰器呼应相连CustomDialogController参数详解函数介绍open() close() 1.3 点击与onClick事件绑定的组件使弹窗弹出 二、示例代码总结 前言 自定义弹窗(CustomDialog&am…