MSK集群升级

人工搭建及运维Kafka集群是一件繁琐的事,特别涉及到集群的升级,很容易出问题。

而MSK的集群升级,只需要一键点击,并且在升级的过程中,业务是正常运作的

集群升级

为了演示集群在升级过程中,业务是正常动作的,我们打开两个terminal:

  • 生产者持续往topic里写数据
  • 消费者持续从topic里取数据

然后进行升级操作, 并观察升级操作中Producer和Consumer是否会持续正常工作。

Producer

创建一个topic:topic-for-update,并每隔一秒每里面写数据

kafka-topics --bootstrap-server $BROKERS --create --replication-factor 3 --partitions 10 --topic topic-for-update  # 创建topic
for x in {1..10000}; do echo $x; sleep 1; done | kafka-console-producer --bootstrap-server $BROKERS --topic topic-for-update

Consumer

持续从Procuer里取数据,每秒会打印新获取的数据

kafka-console-consumer --bootstrap-server $BROKERS --topic topic-for-update

image-20220102170929107

MSK集群升级

在控制台点击Upgrade

image-20220102171009334

选择目标版本,并进行升级。

image-20220102171039104

升级过程中会有进度条实时提示:

image-20220102171351697

在升级过程中,可以看到producer和consumer两端均有WARN文本输出,但这并不会影响到生产环境,因为consumer端照常可以取到完整的数据:

image-20220102185212354

image-20220102185154513

升级大概持续2个小时结束:

image-20220102190515267

在升级前,要保证:
1. 所有topic的RF(Replication Factor) > 1
2. min.insync.replicas <= RF -1

Bidirectional Client Compatibility

从Kafka 0.10.2版本以后,Client和Broker之间有了bidirectional compatibility(双向兼容)。比如:

  • 旧版本的Client(1.1)可以与新版本的Broker(2.0)通讯
  • 新版本的Client(2.0)可以与新版本的Broker(1.1)通讯

这样升级起Kafka来就更没有业务压力,因为对Client端没有影响

参考:

https://www.confluent.io/blog/upgrading-apache-kafka-clients-just-got-easier/