Kafka升级方案
一、0.10.x版本协议更新
0.10.x有协议的改变。按照下面建议的滚动升级方案,可以保证无宕机升级。
0.10.1.0更新
Kafka broker
Kafka broker集群是向前兼容的,可以兼容老版本的客户端。即0.10.1.x版本的broker也支持老版本的客户端。
Kafka客户端
客户端一般是向后兼容的,不与老版本的broker兼容。即0.10.1.x客户端仅支持0.10.1.x或者更高版本的brokers。
由于引入了新协议,在升级客户端之前,需要先升级Kafka broker集群的版本。
0.10.2.0更新
Kafka broker
0.10.2.0版本的brokers支持0.8.x或更高版本的客户端。
Kafka客户端
从0.10.2.0版本开始,Kafka的Java客户端(producer和consumer)实现了与部分老版本的broker(0.10.x)通信的兼容性。
0.10.2.0版本的客户端可以与0.10.0或更高版本的broker通信。但是,如果broker的版本低于0.10.0,必须先升级所有Kafka集群中的brokers的版本,才可以继续升级客户端的版本。
二、0.8.x,0.9.x,0.10.0.x,0.10.1.x向0.10.2.0滚动升级
更新所有brokers上的server.properties文件,并增加以下配置
- a)broker.protocol.version=CURRENT_KAFKA_VERSION (e.g. 0.8.2, 0.9.0,0.10.0 or 0.10.1).
- b)message.format.version=CURRENT_KAFKA_VERSION (See potential performance impact following the upgrade for the details on what this configuration does.)
逐台升级brokers:停掉broker,更新代码,然后重启
- 一旦所有集群节点都升级了,下面就可以逐步升级protocol版本-通过inter.broker.protocol.version这个配置选项,设置为0.10.2
- 如果原有消息版本是0.10.0,可以直接将log.message.format.version设定为0.10.2(这是个空指令,因为0.10.0,0.10.1和0.10.2的消息格式是相同的)。如果原有消息版本低于0.10.0,则不能直接改变log.message.format.version,在改变这个参数之前,应该将所有consumer客户端都升级到0.10.0.0或者更高版本。
- 逐台重启brokers,使新协议生效
- 如果此时log.message.format.version依然低于0.10.0,则需要等待所有consumer都升级到0.10.0或者更高版本,然后才能改变每台broker的log.message.format.version到0.10.2,最后逐台重启
注意:如果可以接受宕机,可以在停掉所有brokers之后再更新代码,然后重启brokers。启动后将默认采用新协议。
注意:设定版本协议以及重启可以在所有brokers都升级之后任何时间进行。而不需要在升级之后立刻重启。
三、参考文献
http://kafka.apache.org/0102/documentation.html#upgrade
Author: Yueqi Shi
Date: 2017-04-21 10:14:23 AM