
最近在升级ckafka带宽时发现两种现象,有时候会提醒进行数据迁移,有时候提示无需数据迁移,通过和腾讯云售后技术沟通了解了为什么会这样,下面我给大家总结下,解答大家的疑问。
无需数据迁移如下图1:

需要进行数据迁移如下图2:

根据他们文档说明:选择好变配的目标实例规格后,系统会自动识别底层资源是否需要变更,是否需要进行数据迁移。这里带宽不像磁盘等硬件为什么还要迁移。
腾讯云给出的结论是:当调整带宽时,必须满足对应的最低磁盘容量要求,若当前磁盘容量低于目标带宽对应的最低磁盘容量,需同步提升磁盘容量至最低值。当带宽增加时,最低的磁盘容量有限制,如果底层资源不足,或迁移到其他的地方。如下图3:

需要注意的是涉及数据迁移的过程中,每个分区迁移完成后,会进行分区的 Leader 切换,Leader 切换典型场景如下:
https://cloud.tencent.com/document/product/597/55801#leader-.E5.88.87.E6.8D.A2.E6.98.AF.E4.BB.80.E4.B9.88.EF.BC.9F
在建立一个新 topic 时,kafka broker 集群会进行每个 partition 的 leader 分配,将当前 topic 的 partition 均匀分布在每个 broker 上。
但在使用一段时间后,可能会出现 partition 在 broker 上分配不均,
或是出现客户端在生产消费中抛出 BrokerNotAvailableError,NotLeaderForPartitionError 等异常。
这通常都是由于 partition 发生了 leader 切换导致的,典型场景如下:
当某个 partition leader 所在的 broker 发生某些意外情况,例如网络中断,程序崩溃,机器硬件故障导致无法与 broker controller 通信时,
当前 topic partition 将会发生 leader 切换,leader 将迁移至 follower partition 上。
当 kafka 集群设置 auto.leader.rebalance.enable = true 进行自动 reBalance,或是人工增加/削减 broker 并手动触发 reBalance 时,
由于涉及到 partition 自动平衡,此时也会出现 leader 切换。
当由于 broker 意外中断,导致 leader 切换时:
如果客户端设置 ack = all,并且 min.insync.replicas > 1 ,由于消息同时在 leader partition 和 follower partition 都确认,因此消息不会丢失。
如果客户端设置 ack = 1 ,此时可能会出现设置在 replica.lag.time.max.ms 时间中的消息未同步到 follower partition,可能导致消息丢失。
当由于 broker 正常,手动/自动(如实例升级、单可用区切换跨可用区、实例迁移等)发起 reBalance 导致 leader 切换时,不会导致消息丢失,原因如下:
如果客户端设置 ack = all,并且 min.insync.replicas > 1 ,由于消息同时在 leader partition 和 follower partition 都确认,因此消息不会丢失。
如果客户端设置 ack = 1 ,leader 切换将会自动同步 partition 中的 offset,因此消息不会丢失。
希望可以帮到大家。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。