关于kafka 0.10.0版本升级存在性能影响的疑惑

我是段段段段段 发表于: 2020-12-16   最后更新时间: 2020-12-16 13:54:32   1,316 游览

提问说明

By setting the message format version, one certifies that all existing messages are on or below that message format version. Otherwise consumers before 0.10.0.0 might break. In particular, after the message format is set to 0.10.0, one should not change it back to an earlier format as it may break consumers on versions before 0.10.0.0.

上面是kafka 0.10.0潜在性能影响中的一段介绍。对于这段的理解,有点疑惑。我想它大概的意思应该是说如果消息格式被设置成0.10.0之后,不要将其更改为低版本的消息格式,否则会导致consumer崩溃。但是,我没太明白的是:

  1. “all existing messages are on or below that message format version”翻译后是“可以证明所有现有消息都在该消息格式版本之上或之下”,究竟是之上还是之下呢,“on or below”该怎么来理解?
  2. “after the message format is set to 0.10.0, one should not change it back to an earlier format”这里说的是broker的消息格式还是client的消息格式呢?如果broker由0.10.0改为低版本的消息格式,假设为0.8.2,如果client也是0.8.2版本的消息格式,消息格式不又统一了吗,为什么会使0.10.0.0之前的consumer崩溃呢?
发表于 2020-12-16
添加评论

1、消息都在或低于该消息格式版本。(不是之上)
2、首先,消息的格式有2种,kafka broker的inter.broker.protocol.version,和追加到log上的格式log.message.format.version。参见:https://www.orchome.com/472 其次,客户端0.8.2,当你升级kakfa到0.10.0时,获取的消息是0.10.0,那升级本身就会报错,影响了正常使用,为了防止这个问题,所以将broker的消息设置为0.8.2,保障新旧都使用这个格式进行通讯。

针对你说的“客户端0.8.2,当你升级kakfa到0.10.0时,获取的消息是0.10.0,那升级本身就会报错”,升级应该不会报错的吧,文档中是这样说的,“The default on-disk message format is 0.10.0. If a consumer client is on a version before 0.10.0.0, it only understands message formats before 0.10.0. In this case, the broker is able to convert messages from the 0.10.0 format to an earlier format before sending the response to the consumer on an older version. ”也就是会多一层消息转换,可能造成性能影响,但是没有明确说明升级会报错。
另外,如果client的消息格式一直保持的是0.8.2,把broker升级后消息格式也是0.8.2(状态1),然后将其消息格式改为0.10.0(状态2)后,经过短暂的时间,再将broke的消息格式改为0.8.2(状态3),这样状态3不是和状态1是一样的吗?那在状态1时没有问题,在状态3使就有问题了呢

我只是给你举个例子来说明它的作用额…

另外,升级的时候就要指定好版本,之后再改目的就达不到了

嗯,是的,所以现在还在弄升级前的一些调研工作

你的答案

查看kafka相关的其他问题或提一个您自己的问题