最佳实践 - Amazon Managed Streaming for Apache Kafka
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

本主题概述了使用 Amazon MSK 时应遵循的一些最佳实践。

将集群设置为正确大小

创建 MSK 集群时,可以指定代理节点的类型和数量。

每个代理的分区数

下表显示每个经纪人推荐的最大分区(包括领导者和跟随器副本)的最大数量。但是,每个代理的分区数受用例和配置的影响。我们还建议您自己执行测试,以确定适合您的代理的实例类型。有关不同实例类型的更多信息,请参阅代理实例类型

代理实例类型 每个经纪人的最大分区数(包括领导者和跟随者副本)
t3.small 300
m5.largem5.xlarge 1000*
m5.2xlarge 2000 美元
m5.4xlargem5.8xlargem5.12xlargem5.16xlarge,或 m5.24xlarge 4000 美元

有关选择分区数的指导,请参阅 Apache Kafka 支持每个集群 20 万个分区

每个集群的代理数

要确定 MSK 集群的适当代理数量并了解成本,请参阅 MSK 大小和定价电子表格。此电子表格提供了与类似的、自我管理的基于EC2 的 Apache Kafka 集群相比,估计的 MSK 集群 大小和相关 Amazon MSK 成本。有关电子表格中的输入参数的更多信息,请将鼠标指针悬停在参数描述的上方。此电子表格是由三个生成器和三个使用器运行测试工作负载并确保 P99 写入延迟少于 100 毫秒来生成的。这可能不会反映您的工作负载或性能预期。因此,我们建议您在预置集群后测试工作负载。

构建高度可用的集群

使用以下建议,以便 MSK 集群在更新期间或 Amazon MSK 更换代理时可以高度可用。

  • 确保双可用区集群的重复因子 (RF) 至少为 2,三可用区集群的 RF 至少为 3。在滚动更新期间,RF 为 1 可能会导致脱机分区。

  • 将最小同步副本数 (minISR) 设置为最多 RF - 1。minISR 等于 RF 可能会阻止在滚动更新期间生成到集群。当一个副本处于脱机状态时,minISR 为 2 使三向复制主题可用。

  • 确保客户端连接字符串包含多个代理。在客户端的连接字符串中具有多个代理允许在特定代理脱机进行更新时进行故障转移。有关如何获取具有多个代理的连接字符串的信息,请参阅获取 Amazon MSK 集群的引导代理

监控磁盘空间

要避免出现因磁盘空间不足而无法保存消息的情况,您可以创建一个用于监视 KafkaDataLogsDiskUsed 指标的 CloudWatch 警报。当此指标的值达到或超过 85% 时,请执行下列一项或多项操作:

  • 增大代理存储空间。有关如何执行此操作的信息,请参阅 提升代理存储空间

  • 缩短消息保留期或减小日志大小。有关如何做到这一点的信息,请参阅调整数据保留参数

  • 删除未使用的主题。

有关如何设置和使用警报的信息,请参阅使用 Amazon CloudWatch Alarms。有关 Amazon MSK 指标的完整列表,请参阅监控 Amazon MSK 集群

调整数据保留参数

使用消息不会将其从日志中删除。要定期释放磁盘空间,您可以明确指定一个保留时间段,即消息在日志中保留的时间。您也可以指定保留日志大小。当达到保留时间段或保留日志大小时,Apache Kafka 会开始从日志中删除非活动段。

要在群集级别指定保留策略,请设置以下参数中的一个或多个: log.retention.hourslog.retention.minuteslog.retention.ms,或 log.retention.bytes。有关详细信息,请参阅 自定义 MSK 配置.

您也可以在主题级别指定保留参数:

  • 要为每个主题指定一个保留时间段,请使用以下命令。

    kafka-configs.sh --zookeeper ZooKeeperConnectionString --alter --entity-type topics --entity-name TopicName --add-config retention.ms=DesiredRetentionTimePeriod
  • 要为每个主题指定一个保留日志大小,请使用以下命令。

    kafka-configs.sh --zookeeper ZooKeeperConnectionString --alter --entity-type topics --entity-name TopicName --add-config retention.bytes=DesiredRetentionLogSize

您在主题级别指定的保留参数优先于集群级别参数。

请勿添加非 MSK 代理

如果您使用 Apache ZooKeeper 命令添加代理,这些代理将不会被添加到您的 MSK 集群,并且您的 Apache ZooKeeper 将包含有关集群的错误信息。这可能会导致丢失数据。有关受支持的集群操作,请参阅Amazon MSK:工作方式

启用传输中加密

有关传输中加密以及如何启用此加密的信息,请参阅传输中加密

重新分配分区

要将分区移动到同一群集上的不同经纪人,可以使用名为“分区重新分配”的工具 kafka-reassign-partitions.sh。例如,在添加新经纪人以扩展群集之后,您可以通过将分区重新分配给新经纪人,来重新平衡该群集。有关如何向集群添加代理的信息,请参阅扩展 Amazon MSK 集群。有关分区重新分配工具的信息,请参阅 Apache Kafka 文档中的扩展集群