我希望在安装安全补丁期间保持 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 集群的高可用性。
简短描述
在安装补丁期间,Amazon Managed Streaming for Apache Kafka (Amazon MSK) 使用滚动更新来保持高可用性和支持集群 I/O。Amazon MSK 会逐一重启代理,等待上一个重启代理上的分区完全同步之后,然后再重启下一个代理。在此更新过程中,您可能会在客户端上看到暂时的连接断开错误。
为防止在安装安全补丁期间出现停机,请构建高可用集群。
解决方法
设置三可用区集群
为防止可用区出现故障时发生停机,请设置三可用区集群。
**注意:**默认情况下,express 代理会将数据分布在三个可用区。
为实现机架感知复制分配以提供容错能力,Amazon MSK 会在可用区级别设置 broker.rack 代理属性。当您使用复制因子 (RF) 为 3 的三可用区集群时,三个分区副本中的每一个都位于不同的可用区中。
**注意:**RF 为 3 的双可用区集群无法将三个分区副本中的每一个都放置在不同的可用区中。Amazon MSK 不允许您在单个可用区中创建集群。
将复制因子设置为等于可用区数量
在安装安全补丁期间重启代理,领导者将变得不可用。在这种情况下,集群会选择其中一个追随者副本作为新的领导者,以便集群继续为客户端提供服务。
在滚动更新期间,RF 为 1 可能会导致分区离线,因为集群没有任何副本可以提升为新的领导者。当 RF 为 2 且最少同步副本 (miniSR) 为 1时,即使生产者的确认参数 (acks) 设置为 all,也可能会导致数据丢失。当 minISR 为 1 时,只需要领导者确认写入,系统即认为写入已成功。如果领导者副本的代理在确认写入后立即关闭,而此时追随者副本还没来得及同步,则会发生数据丢失。有关 minISR 的更多信息,请参阅 Apache Kafka 网站上的 min.insync.replicas。
注意: 如果您使用 Express 代理,则默认情况下复制因子设置为 3。
将 minISR 设置为 RF-1 或更低
如果您将 minlSR 设置为 RF 的值,则当一个代理停止服务时,您可能会收到生产者故障。如果该副本没有发送确认让生产者写入,则生产者会引发一个异常。例如,如果可用区数量为 3 且 RF 为 3,则生产者将等待所有三个分区副本(包括领导者)都确认消息。当其中一个代理停止服务时,三个分区中只有两个返回确认,这样就会导致生产者异常。
**注意:**如果您使用 Express 代理,则默认情况下 minISR 设置为 2。
当您将生产者的 acks 参数设置为 all 时,只要有一个处于同步状态的副本保持在线,记录就不会丢失。有关生产者的 acks 参数的更多详细信息,请参阅 Apache Kafka 网站上的 acks。
注意:minISR 具有主题级别设置和代理级别设置。主题级别的设置始终会覆盖代理级别的设置。
在客户端连接字符串中包含来自每个可用区的至少一个代理
客户端使用单个代理的端点来引导与集群的连接。在初始化客户端连接期间,此代理会发送元数据,其中包含该客户端必须访问的代理的信息。
当代理不可用时,相关连接将失败。例如,您的客户端连接字符串中只有一个代理。在安装补丁期间,当您重新启动代理时,客户端无法初始化与集群的连接。
或者,您的客户端连接字符串中包含多个代理。在这种情况下,当您用于建立连接的代理脱机时,客户端的连接字符串允许进行失效转移。有关如何设置包含多个代理的连接字符串的更多信息,请参阅获取 Amazon MSK 集群的引导代理。
允许重试
当您重新启动代理时,该代理上的领导者分区将变为不可用。在这种情况下,Apache Kafka 将另一个代理上的副本分区提升为新的领导者。此时客户端需要请求更新元数据以定位新的领导者分区。在此更改期间,您的客户端可能会遇到暂时性错误。
默认情况下,客户端内置了重试功能来处理此类暂时性错误。请确认您的客户端已配置了重试。有关如何配置重试的更多信息,请参阅 Apache Kafka 网站上的 retries(重试)。
相关信息
在 MSK 预置集群上安装补丁