为什么要迁移?
- 业务早期单机版完全能够满足业务,但是随着业务的发展单机版已经无法满足
- 无法实现无损磁盘扩容,只能停机扩容,这显然是不能接受的
- kafka 服务无法实现弹性扩缩容,没办法实现高可用和高可扩展,反应到业务上业务猛增和流量高峰期 kafka 都会成为一个隐患
迁移方案
梳理所有 topic
要进行 kafka 迁移,显然从 topic 出发是最合理的,梳理出所有 topic 并确定每个 topic 生产者、消费者
- 如下所示,这是我们生产部分 topic,可以看到把每个 topic 对应的环境、负责人、状态、生产者、消费者、分区数全部都梳理清楚了
kafka 集群创建 topic 并指定分区
注意:迁移的同时可以对 topic 重新评估设置多少分区比较合理
保留老消费者服务,同时启动所有 topic kafka 集群的消费者
注意:老消费不能马上下线,否则单机版 kafka 会存在消息没有消费完的情况,从而影响业务
生产者服务 kafka 连接地址改为 kafka 连接地址,并发布
这样相当于实现了新的生产者上线,老的生产者平滑下线
检查 kafka 单机版所有 topic 中消息是否全部消费完,是则下线所有老消费者
注意:也可以采用逐个检查 topic ,然后逐个下线老消费者服务
kafka 监控调整
- 下线 kafka 单机版监控
- 上线 kafka 集群版监控
总结
- 对于线上基础组件的升级一定要充满敬畏,时刻保持警惕,否则可能会对线上带来灾难性的影响
- 无论做什么技术升级,一定要先确定方案,只有方案足够清晰才能保证高效、高质量的完成任务
- 切记拿到一个任务不经过思考,就想急着动手,这是我们团队很多新同学都存在的问题,这样不但不能高效完成任务,还会因为方案没有想清楚导致不断返工,甚至带来严重的故障