Kafka扩容/缩容会影响业务吗?
Kafka扩容带宽/代理个数/存储空间,都不会影响业务的使用。
Kafka扩容代理规格,在扩容过程中,节点会重启,可能造成闪断。若Topic为单副本,扩容期间无法对该Topic生产消息或消费消息。
表 变更实例规格的影响
变更配置类型 影响 基准带宽/代理数量
扩容基准带宽/代理数量不会影响原来的代理,业务也不受影响。
扩容基准带宽/代理数量时,系统会根据当前磁盘大小进行相应比例的存储空间扩容。例如扩容前实例的代理数为3,每个代理的磁盘大小为200GB,扩容后实例的代理数为10,此时代理的磁盘大小依旧为200GB,但是总磁盘大小为2000GB。
新创建的Topic才会分布在新代理上,原有Topic还分布在原有代理上,造成分区分布不均匀。通过修改Kafka分区平衡,实现将原有Topic分区的副本迁移到新代理上。
存储空间
扩容存储空间有次数限制,只能扩容20次。
扩容存储空间不会影响业务。
代理规格
若Topic为单副本,扩容/缩容期间无法对该Topic生产消息或消费消息,会造成业务中断。
若Topic为多副本,扩容/缩容代理规格不会造成服务中断,但会逐个节点重启,负载会转移到剩余节点上,建议您在业务低峰期扩容/缩容。
扩容/缩容代理规格的过程中,节点滚动重启造成分区Leader切换,会发生秒级连接闪断,在用户网络环境稳定的前提下,Leader切换时长一般为1分钟以内。多副本的Topic需要在生产客户端配置重试机制,方法如下:
a. 生产客户端为Kafka开源客户端时,检查是否配置retries和retry.backoff.ms参数。建议参数值分别配置为:retries=10,retry.backoff.ms=1000。
b. 生产客户端为Flink客户端时,检查是否配置重启策略,配置重启策略可以参考如下代码。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(10, Time.seconds(20)));
若实例已创建的分区数总和大于待缩容规格的实例分区数上限,此时无法缩容。不同规格配置的实例分区数上限不同,具体请参见产品规格。例如:kafka.4u8g.cluster*3的实例,已创建800个分区,您想把此实例的规格缩容为kafka.2u4g.cluster*3,kafka.2u4g.cluster*3规格的实例分区数上限为750,此时无法缩容。
变更代理规格的时长和代理数量有关,单个代理的变更时长一般在5~10分钟,代理数量越多,规格变更时间越长。
扩容过程中涉及数据迁移吗?
扩容过程中不会迁移数据。
扩容/缩容过程中生产消息失败
可能原因: 在扩容/缩容代理规格的过程中,代理采用滚动重启的方式进行实例变更。在重启过程中,分区Leader会进行切换,此时生产客户端的元数据缓存中保存的分区Leader为旧分区Leader ID,仍然会向旧分区Leader发送消息,导致生产消息失败。
解决方法: 在生产客户端配置重试机制。建议设置retries=Integer.MAX_VALUE
扩容失败提示资源不足
问题现象: 扩容失败,提示底层ECS/EVS资源不足,但在ECS控制台可以购买对应规格的ECS
可能原因: 底层资源配额与控制台界面显示的可用规格配额存在差异
解决方法: 联系客服增加配额数