深入学习 Kafka(2)- Partition 和 Topic

1. Partition的作用

在这里插入图片描述

Topic是逻辑的概念,Partition是物理的概念:

  • Partition 对一个 Topic 的消息进行物理上的分离,让消息可以分布在不同的实体机器上,可以提升系统吞吐量和并行处理能力。
  • 每个Partition可以有多个副本(Leader和Follower),Leader负责读写操作,Follower负责数据同步。将消息备份在副本中,可以确保高可用性。

举个例子,更形象的理解Partition 和 Topic:

  • Topic 比作高速公路,不同的 Topic就是不同的高速公路
  • Partition 比作车道,有的公路是 3 车道,有的是 4 车道,车道可以提升公路的运输能力

Partition的目的是:通过多Partition实现负载均衡的效果,提高kafka集群的吞吐率。

2. 消息写入Partition

在这里插入图片描述
一个 Topic 有多个 Partition,生产者向一个 Topic 中发送消息的时候,有3种写入方式:

  1. kafka默认轮询规则
  2. producer指定partition key写入特定的partition
  3. producer自定义规则

3. 消息消费

假设主题T1有四个分区。

3.1 一个消费群组

3.1.1 partition数量 > 消费者数量
只有一个消费者时,消费者1将收到所有分区的全部消息。
在这里插入图片描述
当有两个消费者时,每个消费者将分别从两个分区接受消息。
在这里插入图片描述
3.1.2 partition数量 = 消费者数量
当有四个消费者时,每个消费者都可以接受一个分区的消息。
在这里插入图片描述

3.1.3 partition数量 < 消费者数量
当有五个消费者时,会有闲置的消费者。
在这里插入图片描述

3.2 多个消费群组

消费者群组之间是互不影响的:
在这里插入图片描述

4. 分区分配策略

Kafka的分区分配策略决定了如何将Topic的各个Partition分配给消费者组内的消费者,以实现消息的并行消费。这些策略通过配置参数partition.assignment.strategy来指定。主要的分区分配策略包括:

  • RangeAssignor(范围分配器):
    Kafka的默认分区分配策略。它首先将所有Partitions按分区编号排序,然后将消费者按字母顺序排序。之后,将Partitions均匀地“分配”给消费者,尽量使每个消费者分配到连续的Partition区间。这种方式有利于保持消息的顺序性,特别是在消费者组中的消费者数量少于或等于分区数时。
  • RoundRobinAssignor(轮询分配器):
    这种策略将分区在消费者间进行轮询分配,确保每个消费者尽可能平均地获得相同数量的Partitions。相比RangeAssignor,它不保证分区的连续性,但能更好地分散负载,尤其是在消费者数量远大于分区数的情况下。
  • StickyAssignor(粘性分配器 / 粘性分配策略):
    引入于Kafka 0.10.1版本,这是一种更高级的分配策略,旨在结合RangeAssignor和RoundRobinAssignor的优点。它试图在重新平衡时保持分配的稳定性(即尽量保持之前分配给消费者的Partitions不变),同时确保分区尽可能均匀地分布在消费者之间。这种策略减少了频繁的rebalance操作导致的性能开销,提高了整体的稳定性。

5. 分区Rebalance

触发分区分配策略的情景:

  1. 消费者组成员变化:当有新的消费者加入或已有消费者离开消费者组时,会触发重新分配。
  2. 订阅列表变化:如果消费者修改了其订阅的Topic列表,也会引起分配策略的重新执行。
  3. Broker或Partition变化:Kafka集群的Broker增加、减少或Topic的分区数发生变化时,需要重新分配分区。
  4. Session超时:消费者长时间未发送心跳给组协调者(通常由Zookeeper或Kafka自身的GroupCoordinator服务担任),被视为已离线,从而触发再平衡。
  5. 手动触发:在某些情况下,管理员或应用程序可以通过API调用来手动触发消费者的再平衡。

每次触发Rebalance时,Kafka会依据配置的分区分配策略重新计算分区到消费者的映射关系,以达到最佳的负载均衡状态。但是也会消耗大量网络资源和CPU资源,导致在Rebalance期间消费性能下降、集群不稳定,可能导致消息延迟、消息挤压、消息重复消费等异常。为了缓解上述问题,通常采取的措施包括优化Rebalance触发条件、合理配置消费者参数、使用更高效的分区分配策略(如StickyAssignor)、以及确保消费者及时提交偏移量等

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

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

相关文章

交换机06_vlantrunk

一、虚拟局域网vlan 目的&#xff1a;划分广播域 思科设备如何去配置vlan 创建vlan设置对应的接口模式将接口加入vlan全局模式配置vlan vlan 2 设置接口模式&#xff08;目前需要将接口加入对应vlan&#xff0c;一般用于连接PC&#xff09; en conf t int f0/0 switchport m…

SAP S/4 FICO批量创建银行主数据(银行主数据/账户主数据)开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

开发通用说明 新增程序——批导工具处理逻辑如下:自定义批导程序():点击“执行”按钮若数据错误或重复,先检查导入的银行账号是否已在系统中存在,若已存在则状态显示为红灯,并在消息反馈列提示“该银行已经存在”。查重后若银行账户为新增账户,但导入模板提供的数据有缺…

Spring Boot中获取请求参数的几种方式详解

Spring Boot中获取请求参数的几种方式详解 在Web开发中&#xff0c;处理HTTP请求是一项基本且核心的任务。Spring Boot作为目前最流行的Java Web开发框架之一&#xff0c;提供了多种简便的方式来获取和处理请求参数。本文将深入探讨在Spring Boot中获取请求参数的几种方式&…

学会python——用python编写一个计算机程序(python实例十六)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.编写计算器程序 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

【C语言】刷题笔记 Day1

多刷题 多思考 【题目1】 实现字母的大小写转换&#xff0c;实现多组输入输出 1. getchar 为输入函数&#xff0c;EOF&#xff08;end of file&#xff09;为文件结束标志&#xff0c;通常为文件结束的末尾。 2. 题目中要求实现多组输入输出&#xff0c;那我们用 while 循…

RH442 计算机测量单位的换算

计算机测量单位的换算 计算机测量单位的换算 计算机测量单位的换算 在本练习中&#xff0c;您要将性能指标从一个单位换算成另一个单位。 成果 您要学会性能指标单位的换算。 以 student 用户登录 workstation 虚拟机&#xff0c;密码为 student。 在 workstation上运行 l…

初步认识 B树(B-tree)

定义 B树&#xff08;B-tree&#xff09;是一种自平衡的多路搜索树&#xff0c;广泛应用于数据库和文件系统的索引结构中。它能够保持数据有序&#xff0c;同时提供高效的插入、删除和查找操作。 一、基本概念 定义&#xff1a;B树是一种自平衡的树结构&#xff0c;能够保持…

python+django 环境搭建以及post接口封装

1、搭建pythondjango环境 python 3.7.9的版本 具体参考之前的安装教程 django 使用 pip install django 会自动安装 检验安装版本&#xff1a; python -m django --version 2、创建django项目 django-admin startproject projectname 启动项目&#xff1a;python manage.py…

011-GeoGebra基础篇-验证泰勒斯定理(动点在指定曲线上移动)

注意咯&#xff0c;如果说前期的文章随便看看就行&#xff0c;但从这篇往后的内容&#xff0c;则需要君略微动动brain了。当然&#xff0c;后续的文章如果感觉吃力的话&#xff0c;可以看看本专栏序号比较小的文章&#xff0c;可能会对你开卷有益。 若A, B, C是圆周上的三点&am…

Windows PowerShell 添加新配置文件(打开对应的目录,并执行命令)

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe ./redis-server.exe %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe yarn dev 人工智能学习网站 https://chat.xutongbao.top

数据分析如何在企业中发挥价值

数据分析如何在企业中发挥价值 数据分析的目的是什么为什么怎么做做什么 思考问题流程确认问题拆解问题量化分析 分析数据流程收集数据处理数据制作图表 全流程 数据分析的目的 是什么 通过数据量化企业当前的经营现状或业务事实&#xff0c;将业务细节转换为具体数据&#xf…

通过容器启动QAnything知识库问答系统

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统&#xff0c;可断网安装使用。目前已支持格式&#xff1a;PDF(pdf)&#xff0c;Word(docx)&#xff0c;PPT(pptx)&#xff0c;XLS(xlsx)&#xff0c;Markdown(md)&…

LabVIEW汽车转向器测试系统

绍了一种基于LabVIEW的汽车转向器测试系统。该系统集成了数据采集、控制和分析功能&#xff0c;能够对转向器进行高效、准确的测试。通过LabVIEW平台&#xff0c;实现了对转向器性能参数的实时监测和分析&#xff0c;提升了测试效率和数据精度&#xff0c;为汽车转向器的研发和…

CAM350删除铺铜?

CAM350删除铺铜&#xff1f; 1、选择菜单栏Add 2、选择Polygon Void→Line... 3、然点击需要操作的铜箔&#xff0c;使其高亮 4、用鼠标框选需要删除的部分&#xff0c;然后右击 5、删除后如下图所示 The Layer Bar controls are part of the new Navigation Pane and can also…

OpenStack开源虚拟化平台(二)

目录 三、对象存储服务Swift&#xff08;一&#xff09;Swift特性&#xff08;二&#xff09;应用场景&#xff08;三&#xff09;Swift主要组件&#xff08;四&#xff09;Swift基本原理&#xff08;五&#xff09;实例分析 四、镜像服务Glance&#xff08;一&#xff09;Glan…

JAVA-Redis数据结构—跳跃表(Skiplist)【包含Java实现详情代码】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

CAAC无人机执照:视距内驾驶员与超视距驾驶员区别详解

CAAC无人机执照中的视距内驾驶员与超视距驾驶员在多个方面存在显著的区别。以下是详细的对比和解释&#xff1a; 1. 定义与操作范围&#xff1a; - 视距内驾驶员&#xff08;驾驶员证&#xff09;&#xff1a;操作无人机时&#xff0c;无人机必须在操控员的视线范围内&#xff…

数据开源|GigaSpeech 2:三万小时东南亚多语种语音识别开源数据集发布

“Giga”一词源于“gigantic”&#xff0c;互联网上具有海量音频资源&#xff0c;但语音质量良莠不齐&#xff0c;高质量音频文本对数据十分稀缺且标注成本高昂&#xff0c;特别是在小语种领域。GigaSpeech 是一个非常成功的英文开源数据集&#xff0c;以 YouTube 和 Podcast 为…

[数据库原理]关系范式总结(自用)

如有错误&#xff0c;欢迎指正&#xff01;&#xff01;&#xff01; 有一些题目我放在pdf里面了

解释 Java 中的封装、继承和多态性,并举例说明相关概念

在Java编程的世界里&#xff0c;封装、继承和多态是面向对象编程&#xff08;OOP&#xff09;的三大基石&#xff0c;它们支撑起整个Java程序设计的骨架&#xff0c;让代码更加灵活、可扩展和易于维护。 接下来&#xff0c;我会用一种轻松的方式&#xff0c;并通过一个贴近生活…