如何确保我的客户端 I/O 不会因为安全补丁而中断?

1 分钟阅读
0

我想知道在安装安全补丁期间保持 MSK 集群高可用性的一些最佳实践。

简述

在安装补丁期间,Amazon Managed Streaming for Apache Kafka (Amazon MSK) 使用滚动更新来保持高可用性和支持集群 I/O。在此过程中,代理会逐个重启,只有当前重启的代理上的分区完全同步后,下一个代理才会重启。在此更新过程中,在您的客户端上会看到短暂的连接断开错误,这是正常的。

为防止客户端在安装安全补丁期间停机,请采用以下最佳做法来保持集群的高可用性

解决方案

创建一个三可用区集群

如果一个可用区出现故障,三可用区集群可防止出现停机。

Amazon MSK 设置 broker.rack 代理属性以实现机架感知复制分配,以实现可用区级别的容错。这意味着,当您使用复制因子 (RF) 为 3 的三可用区集群时,三个分区副本中的每一个都位于一个不同的可用区中。

**请注意:**使用复制因子为 3 的双可用区集群时,无法让三个分区副本中的每一个都位于一个不同的可用区中。Amazon MSK 不允许您在单个可用区中创建集群。

请确保复制因子等于可用区总数

在安装安全补丁期间,如果重启代理,领导者将变得不可用。在这种情况下,追随者副本中将有一个会被选为新的领导者,这样集群就可以继续为客户端提供服务。

当复制因子为 1 时,因为集群没有任何副本可以升级为新的领导者,可能会在滚动更新期间导致分区不可用。当复制因子为 2 时,如果最少同步副本 (miniSR) 为 1,则可能会导致数据丢失。此时即使生产者的确认参数 (acks) 设置为“全部”,也可能会导致数据丢失。 当最少同步副本 (miniSR) 为 1 时,只需要领导者确认写入,系统即认为写入已成功。如果领导者副本的代理在确认写入后立即关闭,而此时追随者副本还没来得及同步,则会丢失数据。有关 min.insync.replicas 的更多信息,请参阅 Apache Kafka 文档

将最少同步副本 (miniSR) 设置为复制因子减 1 或更小的数值

将最少同步副本 (miniSR) 设置为复制因子值时,如果一个代理由于滚动更新而停止服务时,此时可能会导致生产者故障。如果该副本没有发送确认让生产者写入,则生产者会引发一个异常。例如,如果可用区等于 3 且复制因子也等于 3,则生产者将等待所有三个分区副本(包括领导者)都确认消息。当其中一个代理停止服务时,三个分区中只有两个返回确认,这样就会导致生产者异常。

在这个场景中,假设生产者的 acks 参数设置为“全部”。 如果您把生产者的 acks 参数设置为“全部”,那么只要有一个处于“同步”状态的副本保持在线,记录就不会丢失。有关生产者的 acks 参数的更多详细信息,请参阅Apache Kafka 文档

在客户端的连接字符串中,应包含每个可用区的至少一个代理

客户端使用单个代理的端点来引导与集群的连接。在初始化客户端连接期间,此代理会发送元数据,其中包含该客户端必须访问的代理的信息。

当代理不可用时,相关连接将失败。例如,您的客户端连接字符串中只有一个代理。在安装补丁期间,当您重新启动代理时,客户端无法初始化与集群的连接。

或者,您的客户端连接字符串中包含多个代理。在这种情况下,当用于建立连接的代理脱机时,客户端连接字符串的这种设置将允许系统进行失效转移。有关如何设置包含多个代理的连接字符串的更多信息,请参阅获取 Amazon MSK 集群的引导代理

允许重试

当您重新启动代理时,该代理上的领导者分区将变为不可用。在这种情况下,Apache Kafka 将另一个代理上的副本分区升级为新的领导者。客户端现在请求一次元数据更新,以定位新的领导者分区。在此更改期间,您的客户端会短暂显示错误,这是正常的。

默认情况下,客户端内置了重试功能,以处理这些类型的短暂错误。请确认您的客户端已配置了重试。有关配置重试的更多信息,请参阅Apache Kafka 文档

AWS 官方
AWS 官方已更新 1 年前