从老版本升级kafka
从0.8.x, 0.9.x 或 0.10.0.X 升级到 0.10.1.0
0.10.1.0有线协议更改,通过遵循以下建议的滚动升级,在升级期间不会停机。但是,需要注意升0.10.1.0中潜在的突发状况。
注意:由于引入了新的协议,要在升级客户端之前先升级kafka集群(即,0.10.1.x仅支持 0.10.1.x或更高版本的broker,但是0.10.1.x的broker向下支持旧版本的客户端)
滚动升级:
- 更新所有broker的server.properties文件,并添加以下属性:
- inter.broker.protocol.version=CURRENT_KAFKA_VERSION (如:0.8.2.0, 0.9.0.0或0.10.0.0).
- log.message.format.version=CURRENT_KAFKA_VERSION (有关此配置的详细信息,请查看升级后潜在的性能影响。)
- 每次升级一个broker:关闭broker,替换新版本,然后重新启动它。
- 一旦整个群集升级,通过编辑inter.broker.protocol.version并将其设置为0.10.1.0来转换所有协议。
- 如果之前的消息格式是0.10.0,则将log.message.format.version更改为0.10.1(这无影响,因为0.10.0和0.10.1的消息格式是相同的)。如果之前的消息格式版本低于.10.0,还不能更改log.message.format.version - 一旦所有的消费者都已升级到 0.10.0.0 或更高版本时,才能更改此参数。
- 逐个重新启动broker,使新协议版本生效。
- 如果log.message.format.version低于0.10.0,请等待,知道所有消费者升级到0.10.0或更新的版本,然后将每个broker的log.message.format.version更改为0.10.1。然后逐个重启。
注意:如果你可接受停机,你可以简单地将所有broker关闭,更新版本并重启启动,它们将默认从新版本开始。
注意:变换协议版本和重启启动可以在broker升级完成后的任何时间去做,不必马上做。
在0.10.1.0中潜在的变化
-
日志保留时间不再基于日志段的最后修改时间。相反,它将基于日志段中消息的最大时间戳。
-
日志滚动时间不再取决于日志段的创建时间。而是基于消息中的时间戳。进一步来说。如果日志段中第一个消息的时间戳是T,则当新的消息的时间戳大于或等于T+log.roll.ms时,日志将推出。
-
0.10.0 的打开的文件处理将增加了约33%,因为为每个段增加时间索引文件。
-
时间索引和offset索引共享相同的索引大小配置。因为每个时间索引条目是offset索引条目的1.5备。用户可能需要增加log.index.size.max.bytes以避免频繁的日志滚动。
-
由于索引文件数量增加,对于一些有大量日志段的broker(即 >15k),在broker启动期间,日志加载处理可能更长。根据我们的实现,num.recovery.threads.per.data.dir设置为1可减少日志加载的时间。
0.10.1.0显著的变化
-
新的java消费者不再是测试阶段了,我们建议将其应用到所有的新开发当中。旧的Scala使用仍然支持,但将在下一个版本中弃用,并在未来的主要版本中移除。
-
--new-consumer/--new.consumer
转换不再需要使用MirrorMaker和类似于Console消费者工具。只需要通过一个Kafka broker连接,而不是ZooKeeper了。另外,控制台消费者和旧消费者已弃用,并且将在未来的主要版本中移除。 -
Kafka集群现在可通过集群ID来标识唯一,broker升级到0.10.1.0时将自动的生成。集群ID可通过kafka.server:type=KafkaServer,name=ClusterId获取。它是元数据相应的一部分,序列化,客户端拦截器和度量记录器可通过实现ClusterResourceListener接口来接收集群I