Kafka分区、副本机制(二)

【Kafka】 分区和副本 Partition 详解 Kafka分区和副本 Partition 详解 阅读详情

2.Kafka 高级

2.1. 分区和副本机制

2.1.1 分区写入策略

生产者可以写入消息到同批次中,Kafka将会根据不同的策略分配到不同的分区中。

分区策略主要3种:

  1. 轮询分区策略

    • 这是一种默认的策略,也是采用最多的策略。它可以最大限度保证所有的消息平均分配到一个分区中。

    • 当生产者生产消息时,将key设置为 null, 则认为使用轮询算法均匀地分配分区。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKkRTPXS-1604475558866)(…/…/AppData/Roaming/Typora/typora-user-images/image-20201101143240188.png)]

  1. 随机分区策略

    每次都将消息随机分配到不同的分区中,在较早的版本这,这是默认的分配策略。

  2. 按key分区分配策略

    按key分配策略,可能会出现 数据倾斜 。 例如:某个key包含了大量的数据,因为 key 值一样,所有的数据将分配到一个分区中,造成该分区的消息数量远大于其它的分区。

    这种方式类似于 HashMap 的思想,对key进行hashcode运算,得到的结果再进行取余,然后分配到不同的分区中。

2.1.2 Kafka 如何保证消息的消费顺序有序性?

轮询策略、随机策略都会导致一个问题,生产者生产到Kafka中的数据是乱序存储的。而按key分区分配策略可以在一定程度上实现数据的有序性,但也是局部有序性,且会导致数据倾斜,所以在实际生产环境中要结合实际情况进行取舍。

image-20201102200810504

因为 Kafka中存在者多个分区的原因,生产者生产消息时,会将数据根据分区写入策略写入到分区中,而一个消费者组中的一个消费者只能同时消费一个分区的数据,因此导致在多分区时,Kafka消费者消费的消息时全局无序的。

  • 解决办法:

    1. 如果我们要实现消息总是有序的,那么我们可以将消息连续的放入到一个partition分区中,但这种做法并不符合Kafka的设计思想

    2. (推荐)Kafka在发送 1条消息的时候,可以指定 topic,partition,key,data(数据) 4个参数。如果你发送消息的时候指定了 Partition 的话,所有消息都被发送到指定的 Partition。并且,同一个key的消息可以保证只发送到同一个partition,这样我们就可以对 表/对象的id作为key。

      因为很多的实际场景中,往往并不需要确保topic的消费完全有序。

      当然,如果场景需要保证顺序有序性,比如发送两个消息,对应数据库中的操作为更改用户会员等级和根据用户会员等级计算订单支付价格。那儿我们只需要保证key值相同的topic被顺序消费,因此,我只要将相同的key发送至相同的partition中即可。这样相比于将所有的key都发送到同一个partition,有效的利用了多个partition,从而可以被多个节点消费,实现负载均衡。

      image-20201102203410290

2.2 消费者组 Consumer Group Reblannce 机制

  • 再均衡机制:在某些情况下,消费者组中的消费者消费的分区会产生变化,会导致消费者分配不均匀(例如:有两个消费者消费3个分区,即一个消费者(C1)消费两个分区、另一个消费者(C2)消费一个分区。而恰好此时C2消费的分区崩溃了,只剩余两个分区,且恰恰都是C1消费的两个分区,所以C2消费者没有分区,就要进行削峰)Kafka Consumer Group 就会启动 rebalance机制,重新平衡Consumer Group 内的消费者消费的分区分配。

  • 触发时机:

    • 消费者数量发生变化
      • 某个消费者 crash,即消费者宕机
      • 新增消费者
    • topic的数量发生变化
      • 某个topic 被删除
    • partition的数量发生变化
      • 删除partition
      • 新增partition
  • 不良影响

    • 发生rebalance时,所有的consumer都将不再工作,共同参与再均衡,直到每个消费者都已经被成功分配所需要消费的分区位置,即rebalance结束。

2.3 消费者分区分配策略

当触发再均衡机制时,就会需要考虑怎么对分区进行分配。分区分配策略保障了每个消费者尽量能够均匀地消费分区地数据,不能出现某个消费者消费的分区特别少,某个消费者消费的分区特别多。

Kafka提供的分区分配策略主要有以下三种:

  • Range分配策略(范围分配策略):Kafka的默认分配策略

    • n: 分区数/消费者数

    • m:分区数%消费者数

    • 前m个消费者 消费 n+1 个分区

    • 剩下的消费者 消费 n 个分区

    • 假如有10个分区,3个消费者,把分区按照序号排列0,1,2,3,4,5,6,7,8,9;消费者为C1,C2,C3,那么用分区数除以消费者数来决定每个Consumer消费几个Partition,除不尽的前面几个消费者将会多消费一个
      最后分配结果如下

      C1:0,1,2,3
      C2:4,5,6
      C3:7,8,9

      如果有11个分区将会是:

      C1:0,1,2,3
      C2:4,5,6,7
      C3:8,9,10

      假如我们有两个主题T1,T2,分别有10个分区,最后的分配结果将会是这样:

      C1:T1(0,1,2,3) T2(0,1,2,3)
      C2:T1(4,5,6) T2(4,5,6)
      C3:T1(7,8,9) T2(7,8,9)

      在这种情况下,C1多消费了两个分区

    • 显然这种方式会存在有弊端的

  • RoundRobin 分配策略(轮询分配策略)

    • 消费者挨个分配消费的分区
    • 这种方式分配最均匀,但是会上下文切换明显
  • Striky 粘性分配策略

    • 在没有发生rebalance跟轮询分配策略是一致的
    • 发生rebalance,轮询分配策略会重新走一遍轮询分配的过程。而粘性会保证跟上一次尽量一致,只是将新的需要分配的分区,均匀的分配到现有可用的消费者中即可。
    • 减少上下文切换。

2.4 producer 的ACKs参数

在配置文件中,我们可以配置acks参数,即

spring.kafka.producer.acks=

properties中的acks参数表示生产者生产消息的时候,写入副本的要求严格程度。它决定了生产者的性能和可靠性中如何做取舍。

  • acks=0 性能是最好的,它不需要等待broker的确认,直接发送下一条数据,但是可能存在数据丢失的问题。
  • acks=1 等待leader副本确认接收后,才能发送下一条数据,性能中等。
  • acks=-1或all 等待所有副本已经将数据同步后才会发送下一条数据,性能最慢。
Kafka副本机制详解 在讨论具体的副本机制之前,我们先花一点时间明确一下副本的含义。我们之前谈到过,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。 阅读详情

相关推荐

kafka生产者分区写入策略

生产者写入消息到topic,kafka将依据不同的策略将数据分配到不同的分区中 1.轮询分区策略 2.随机分区策略 3.按key分区分配策略 4.自定义分区策略 1.1 轮询分区策略 默认的策略,也是使用最多的策略,可以最大限度的保证所有消息平均分配到分区里面 如果在生产消息时,key为null,则使用轮询算法均衡地分配分区 1.2 随机分区策略 基本废弃,可能会造成数据倾斜 1.3 按key分区分配策略 按key分配策略,key.hash()%分区的数量,然后shuffle到对应的分区,有可能会出现数据倾

科学的N次方 2446

Kafka 原理——生产者分区写入策略

文章目录一、生产者分区写入策略1.1 分区策略1.1.1 指定分区(与写入策略无关)1.1.2 轮询策略1.1.3 按 key 分配策略1.1.4 随机策略1.1.5 自定义分区策略二、 消息乱序问题参考 一、生产者分区写入策略 Producer 发送消息到 Topic 时,会根据不同的策略将数据分配到不同的 Partition 中 1.1 分区策略 1.1.1 指定分区(与写入策略无关) 若 Producer 在发送消息时指定了 Partition,就直接发送到这个 Partition,与分区策略无关

星辰之眼 3046

【kafka】Kafka消费者分区分配策略详解

Kafka Consumer用来从Kafka集群拉取数据,通过允许多个进程共同分担消费/处理数据的工作,这些进程可以运行在一台机器或者多台机器。默认常见的消费原理如下Consumer Group (CG):消费者组,由多个consumer组成。形成一个消费者组的条件,是所有消费者的 groupid 相同。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费。消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

九师兄 4538

【项目实战】Kafka 生产者写入分区的策略

生产者写入分区的策略主要有以下几种: 1. **轮询分区策略**:生产者可以使用轮询策略将消息依次写入每个分区,实现负载均衡。在每次发送消息时,生产者会按照轮询的方式选择下一个可用的分区,并将消息写入该分区。这样可以确保消息均匀地分布在各个分区中。 2. **随机分区策略**:Kafka生产者随机的将消息写入分区,有可能会造成消息的分布不均,所以这个策略基本上也很少用。 3. **按 key 分区策略**:Kafka生产者基于消息的键(key)进行哈希计算,然后将消息写入对应的分区。这种策略可以保证

激流丶的博客 3654

分区副本限流机制三部曲(源码篇)

分区副本同步限流机制三部曲(源码篇)

石臻说AI(szzdzhp001) 【原名 石臻臻的杂货铺】 1万+

图解Kafka分区副本同步限流机制三部曲(源码原理篇+测试用例 )

之前的文章中,我们有讲解 Kafka中的数据采集和统计机制 分区副本限流机制三部曲(源码篇) 如果你都仔细研读过这两篇文章,那么会更容易理解本篇文章 想要把限流讲好, 我们分下面几个方面讲 如何配置副本限流配置 如何记录并统计Follower副本Fetch到的流量 如何判断Follower副本是否限流,并进行限流 如何记录并统计Leader副本Fetch到的流量 手动写入动态限流配置来进行限流 如何配置副本限流配置 如果你对我之前写的关于 分区副本重分配源码解析 还有印象, 那么你肯定记得这么几个配置

石臻说AI(szzdzhp001) 【原名 石臻臻的杂货铺】 6244

Kafka分区分配策略

目录分区是什么生产者分区写入策略1. 轮询分区2. 随机策略3. 按key分配策略4. 自定义分区策略消费者组Rebalance机制 分区是什么 从整体上来说,一个 Kafka 集群有多个机器(一个机器就是一个 Broker),创建一个 Topic 是针对集群创建的,也就是说一个集群共享一个 Topic。一个Topic 可以有多个分区,如果机器数量够用的话,多个分区会在不同的 Broker 上,当然如果 Broker 不够用,那么一个 Broker 就可能保存一个 Topic 的多个分区。 那么分区是什么呢

程序园@大Null 3079

云桌面如何部署?云桌面系统方案部署详细教程

云桌面作为一种比较新的技术工具,核心解决的场景是方便设计师的灵活办公,本身技术就是非常的灵活性,所以在安装部署方面青椒云也做到了十足的灵活。

2301_79113726的博客 1634

kafka 二 集群架构 幂等性 生产者写入分区策略、消费者组再均衡消费者规则、副本机制、低级 api、高级 api、Kafka-eagl监控工具、分区的leader 与follower

【kafka可视化工具】kafka-eagle在windows环境的下载、安装、启动与访问_kafka eagle下载_No8g攻城狮的博客-优快云博客。如果ack响应失败,生产者重试,再次发送消息,kafka会根据pid和 sequence number 是否保存同一条消息。0、1、2 节点 三个 副本 0挂掉 0的领导会在 1 or 2 上马上出现领导,实现保证分区全在。生产者 发送到分区,kafka 保存到分区,返回一个ack ,若果失败,生产者会重新发送。

银河系天城知识宝库_技术专家蒋浩宇 528

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 134

讲一讲 kafka 的 ack 的三种机制?

讲一讲 kafka 的 ack 的三种机制?

java1234的博客 799

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9056

Kafka - 分区机制及副本机制

自定义策略主要是依据业务属性和特点来实现的,以下是几种比较常见的自定义策略。按消息键保存策略,键可以依据业务属性进行划分,这样就可以保障同样的业务被分配到相同的分区,由于Kafka支持单分区消息有序,因此这种策略对于同一业务可以很好地实现消息的有序性需求。按区域分区策略。

小工匠 3540

细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl...

xueren_83的博客 1万+

SD - WAN:企业出海的网络加速器

例如,一家中国的跨境电商企业,在欧美市场的促销活动期间,借助 SD - WAN 技术,即使面对海量订单数据的交互,也能确保欧美客户在浏览商品、下单支付时感受到近乎本地网络的流畅体验,大大提升了客户满意度,稳住了销售增速。企业无需在海外本地部署大量冗余服务器,只需依托云台,借助 SD - WAN 快速稳定的网络连接,即可轻松实现业务拓展,进一步精简运营架构,提升整体效能。在未来,随着技术的不断演进和企业出海需求的持续增长,SD - WAN 将持续赋能,助力更多企业在全球市场扬帆远航,书写辉煌篇章。

idcicp_com的博客 446

Kafka的分区副本机制

1.自定义分区器@Override@Override// cluster.partitionCountForTopic 表示获取指定topic的分区数量@Override2.在kafka生产者配置中,自定义使用自定义分区器的类名。

m0_62645012的博客 2783

Ubuntu下Ollama局域网共享大模型服务:5分钟搞定配置与防火墙设置

本文提供了一份在Ubuntu系统上快速配置Ollama实现局域网共享大模型服务的实战指南。通过修改服务配置使其监听所有网络接口,并设置UFW防火墙规则,用户可在5分钟内让同一Wi-Fi下的其他设备(如笔记本、手机)便捷调用主机上的AI模型能力,实现团队或多设备间的AI资源共享。

ik6789012的博客 825

kafka 消息分发机制、分区和副本机制

一、消息分发机制 1.1 kafka 消息分发策略 消息是 kafka 中最基本的数据单元,在 kafka 中,一条消息由key、value两部分构成,在发送一条消息 时,我们可以指定这个key,那么 producer 会根据 key 和partition 机制来判断当前这条消息应该发送并 存储到哪个 partition 中。我们可以根据需要进行扩展 producer 的 partition 机制。 代码示例可移步:kafka 应用实战的第五点自定义分区(Partitioner) 1.2、消息默认的分发机制

weixin_43281498的博客 6864

ROS 之 使用yocs_velocity_smoother对机器人速度进行限制

yocs_velocity_smoother是一个速度、加速度限制器,用来防止robot navigation的速度/转速过快,加速度/快减速过大。Bound incoming velocity messages according to robot velocity and acceleration limits. The velocity smoother nodelet runs together with the kobuki_node to apply robot’s velocity and .

https://shixuebin.gitee.io/hexo-blog/ 2623

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

kafka的分区和副本机制

分区用于水平扩展 Kafka,增加并发和负载均衡,影响数据的分布和消费方式。副本机制用于提高 Kafka 的数据可靠性和容错性,确保数据不会因为单个节点的失败而丢失。副本数和节点数密切相关,副本数不能超过 Kafka 集群的节点数。

学亮编程手记 1412

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

Kafka分区和副本

喻师傅的学习笔记 3681

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

kafka:Kafka中的分区副本机制是如何工作的?如何设置副本数

副本数设置:通常3副本足够,关键业务5副本部署策略:跨机架、跨机房部署副本监控指标:重点关注ISR变化和副本Lag性能调优:合理配置等参数对副本同步机制的底层理解大规模集群的实战经验复杂问题的系统化解决能力性能与可靠性的平衡艺术。

weixin_43290370的博客 1491

Kafka之分区和副本详解

Kafka0.8版本后加入副本机制,每个Partition可能有多个备份,某个Partition的Replica列表叫作AR(Assigned Replicas) 1、优先副本(Preferred Replica) 如果一个分区有3个副本,且这3个副本的优先级别分别为1,5,9,根据优先副本的概念,1会作为leader。 AR中的第一个Replica即为“Preferred Replica”...

勇心在馨 5958

Kafka的分区和副本机制

生产者写入消息到topic,Kafka将依据不同的策略将数据分配到不同的分区中。 轮询分区策略 随机分区策略 按key分区分配策略 自定义分区策略

古城的博客 2440
上一篇: 基于Linux的Kafka安装,初步认识Kafka(一)
下一篇: Kafka底层原理及面试题(三)
Dim_Jerry
博客等级 码龄8年 14粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值