8.4.2. 升级客户端的策略

升级客户端应用程序(包括 Kafka Connect 连接器)的正确方法取决于您的具体情形。

使用应用程序时,需要以它们所理解的消息格式接收消息。您可以通过以下两种方式之一来确保这是这种情况:

  • 在升级任何制作者 之前,先 升级所有消费者的主题。
  • 通过将代理关闭消息置于较旧格式。

使用代理 down-conversion 会给代理带来额外的负载,因此在较长时间内依赖所有主题并不理想。要使代理以最佳方式运行,绝对不应是向下转换消息。

代理 down-conversion 可通过两种方式进行配置:

  • 主题级别 message.format.version 为单个主题配置它。
  • 代理级 log.message.format.version 是未配置主题级别 message.format.version 的主题的默认设置。

以新版本格式发布到主题的消息对消费者可见,因为代理在从生产者接收消息时执行 down-conversion,而不是当它们发送到消费者时。

您可以使用多个策略来升级客户端:

消费者第一
  1. 升级所有使用的应用程序。
  2. 将代理级别的 log.message.format.version 更改为新版本。
  3. 升级所有生成的应用程序。

    此策略非常简单,可避免任何代理停机转换。但是,它假定贵组织中的所有消费者可以协调升级,而且不适用于消费者和生产者的应用程序。如果升级的客户端出现问题,新格式消息可能会添加到消息日志中,因此您无法恢复到以前的使用者版本。

每个主题消费者首先

对于每个主题:

  1. 升级所有使用的应用程序。
  2. 将主题级 message.format.version 更改为新版本。
  3. 升级所有生成的应用程序。

    此策略可避免任何代理 down-conversion,并且意味着您可以逐个主题地进行。它不适用于同时作为同一主题的消费者和制作者的应用。再强调一下,如果升级的客户端出现问题,新格式消息可能会添加到消息日志中。

首先每个主题消费者,进行向下转换

对于每个主题:

  1. 将主题级 message.format.version 更改为旧版本(或依赖主题默认到代理级别的 log.message.format.version)。
  2. 升级所有使用和生产的应用程序。
  3. 验证升级的应用是否正常工作。
  4. 将主题级 message.format.version 更改为新版本。

    这个策略需要代理 down-conversion,但代理的负载会最小化,因为一次只需要单个主题(或小组主题)需要它。它还适用于同时是同一主题的消费者和制作者的应用。这种方法可确保升级的生产者和消费者在提交使用新的消息格式版本之前正常工作。

    这种方法的主要缺点是,在含有许多主题和应用的集群中进行管理可能比较复杂。

还可以通过其他策略来升级客户端应用。

注意

也可以应用多个策略。例如,在前几个应用程序和主题中,"每个主题消费者首先使用",可以使用向下转换"策略"。如果这已被证明是成功的,那么更高效的策略可被视为可以接受采用。