亚马逊AWS官方博客

Amazon MSK Serverless 现已正式推出–无需再为托管式 Kafka 集群进行容量规划

今天,我们正式推出 Amazon MSK Serverless,通过将容量规划和扩展工作转移给 AWS,帮助您进一步降低管理 Apache Kafka 集群的运营开销。

2019 年 5 月,我们推出了适用于 Apache Kafka 的 Amazon 托管流式传输,帮助我们的客户使用 Apache Kafka 流式传输数据。Apache Kafka 是一个开源平台,它使客户能够捕获点击流事件、交易和物联网事件等串流数据。Apache Kafka 是一种常见的解决方案,用于将产生串流数据的应用程序(生产者)与使用数据的应用程序(使用者)解耦。借助完全托管式 Apache Kafka 集群,Amazon MSK 可以轻松地实时摄取和处理串流数据。

Amazon MSK 减少了在生产环境中设置、扩展和管理 Apache Kafka 所需的工作量。借助 Amazon MSK,您可以在几分钟内创建集群并开始发送数据。Apache Kafka 作为一个集群在一个或多个代理上运行。代理是指具有给定计算和存储容量的实例,这些容量分布在多个 AWS 可用区中以创建高可用性。Apache Kafka 在用户定义的时间段内存储主题记录,对这些主题进行分区,然后在多个代理之间复制这些分区。数据生产者将记录写入主题,使用者从中读取记录。

创建新的 Amazon MSK 集群时,您需要决定代理的数量、实例的大小以及每个代理可用的存储。MSK 集群的性能取决于这些参数。如果已经知道工作负载,则可以很容易地提供这些设置。但是,您将如何为新的工作负载配置 Amazon MSK 集群呢? 或者如何为数据流量可变或不可预测的应用程序配置?

Amazon MSK Serverless
Amazon MSK Serverless 会自动预置和管理所需的资源,以便为您的应用程序提供按需流式处理容量和存储。对于开始使用新的 Apache Kafka 工作负载来说,这是一个完美的解决方案,在这种工作负载中,您不知道自己需要多少容量或者您的应用程序是否产生了不可预测的或高度可变的吞吐量,而且您不想为闲置容量付费。此外,如果您想避免预置、扩展和管理集群的资源利用率,那就太好了。

Amazon MSK Serverless 附带了许多开箱即用的安全功能,例如私有连接。这意味着流量不会将 AWS 骨干网络、AWS Identity and Access Management (IAM) 访问控制以及数据加密保持静态和传输状态,这可确保数据安全。

Amazon MSK Serverless 集群可根据应用程序要求即时扩缩容量。当 Apache Kafka 集群横向扩展(即添加更多代理)时,您还需要将分区移动到这些新代理以利用增加的容量。借助 Amazon MSK Serverless,您无需扩展代理或进行分区移动。

每个 Amazon MSK Serverless 集群提供高达 200 MBps 的写入吞吐量和 400 MBps 的读取吞吐量。它还为每个分区分配高达 5 MBps 的写入吞吐量和 10 MBps 的读取吞吐量。

Amazon MSK Serverless 定价基于吞吐量。您可以在 MSK 的定价页面上了解更多信息。

我们来看看它的实际操作
想象您是一家移动游戏工作室的架构师,您即将推出一款新游戏。您投资了游戏的营销,预计会有很多新玩家。您的游戏会将点击流数据发送到您的后端应用程序。对数据进行实时分析,以预测玩家的行为。通过这些预测,您的游戏可以根据当前玩家的行为提供实时优惠,从而鼓励他们在游戏中停留更长的时间。

您的游戏会将点击流数据发送到 Apache Kafka 集群。由于您使用的是 Amazon MSK Serverless 集群,因此您无需担心在新游戏发布时扩展集群,因为它会根据吞吐量调整容量。

在下图中,您可以看到新游戏发布当天的图表。它以橙色显示集群正在消耗的指标 MessageInPerSec。您可以看到,每秒的消息数量先从 100 条开始增加,这是我们在发布之前的基数。然后,随着越来越多的玩家下载和玩我们的游戏,会增加到每秒 300、600 和 1,000 条消息。您可以确信记录量会不断增加。只要您的应用程序吞吐量保持在服务限制范围内,Amazon MSK Serverless 就能够提取所有记录。

每秒发送到集群的消息数图表

如何开始使用 Amazon MSK Serverless
创建 Amazon MSK Serverless 集群非常简单,因为您无需为服务提供任何容量配置。您可以在 Amazon MSK 控制台页面上创建新集群。

选择“快速创建”集群创建方法。此方法将为您提供创建初始集群和输入集群名称的最佳实践设置。

创建集群

然后,在常规集群属性中,选择集群类型。选择“无服务器”选项以创建 Amazon MSK Serverless 集群。

常规集群属性

最后,它显示了默认情况下将配置的所有集群设置。集群创建后,您无法更改其中的大多数设置。如果这些设置需要不同的值,则可能需要使用“自定义创建”方法创建集群。如果默认设置适合您,则创建集群。

集群设置页面

创建集群需要几分钟时间,之后,您将在集群摘要页面上看到“活动”状态。

集群信息页面

现在您已经有了集群,就可以开始使用 Amazon Elastic Compute Cloud (Amaaon EC2) 实例发送和接收记录了。为此,第一步是创建新的 IAM 策略和 IAM 角色。实例需要使用 IAM 进行身份验证,才能从实例访问集群。

Amazon MSK Serverless 与 IAM 集成,为您的 Apache Kafka 工作负载提供精细的访问控制。您可以使用 IAM 策略授予对 Apache Kafka 客户端的最低权限访问权限。

创建 IAM 策略
使用以下 JSON 创建新的 IAM 策略。此策略将授予连接到集群、创建主题、发送数据和使用主题数据的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect"
            ],
            "Resource": "arn:aws:kafka:<REGION>:<ACCOUNTID>:cluster/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:DescribeTopic",
                "kafka-cluster:CreateTopic",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData"
            ],
            "Resource": "arn:aws:kafka:<REGION>:<ACCOUNTID>:topic/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3/msk-serverless-tutorial"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": "arn:aws:kafka:<REGION>:<ACCOUNTID>:group/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3/*"
        }
    ]
}

请务必将区域和账户 ID 替换为您自己的信息。此外,您需要替换集群、主题和组 ARN。要获取这些 ARN,您可以转到集群摘要页面并获取集群 ARN。主题 ARN 和组 ARN 基于集群 ARN。在这里,集群和主题被命名为 msk-serverless-turorial。

"arn:aws:kafka:<REGION>:<ACCOUNTID>:cluster/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3"
"arn:aws:kafka:<REGION>:<ACCOUNTID>:topic/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3/msk-serverless-tutorial"
"arn:aws:kafka:<REGION>:<ACCOUNTID>:group/msk-serverless-tutorial/cfeffa15-431c-4af4-8725-42636fab9937-s3/*"

然后用使用案例 EC2 创建一个新角色并将此策略附加到该角色。

创建新角色

创建新的 EC2 实例
现在您已拥有集群和角色,请创建一个新的 Amazon EC2 实例。将实例添加到与集群相同的 VPC、子网和安全组。您可以在集群属性页面的联网设置中找到该信息。此外,在配置实例时,请附加您在上一步中刚刚创建的角色。

集群联网配置

准备就绪后,启动实例。您将使用同一个实例来生成和使用消息。要做到这一点,需要在实例中设置 Apache Kafka 客户端工具。您可以按照 Amazon MSK 开发人员指南为实例做好准备。

生成和使用记录
现在,您已配置完所有内容,可以开始使用 Amazon MSK Serverless 发送和接收记录了。首先,需要创建主题。从您的 EC2 实例中,转到安装了 Apache Kafka 工具的目录,然后导出引导程序服务器端点。

cd kafka_2.13-3.1.0/bin/
export BS=boot-abc1234.c3.kafka-serverless.us-east-2.amazonaws.com:9098

在使用 Amazon MSK Serverless 时,此服务器只有一个地址,您可以在集群页面的客户端信息中找到该地址。

查看客户端信息

运行以下命令以创建名为 msk-serverless-tutorial 的主题。

./kafka-topics.sh --bootstrap-server $BS \
--command-config client.properties \
--create --topic msk-serverless-tutorial --partitions 6

现在可以开始发送记录。如果想看到服务在高吞吐量下工作,可以使用 Apache Kafka 生产者性能测试工具。此工具允许您同时向具有定义吞吐量和特定大小的 MSK 集群发送许多消息。尝试使用此性能测试工具,更改每秒的消息数和记录大小,并查看集群的行为和调整其容量的方式。

./kafka-topics.sh --bootstrap-server $BS \
--command-config client.properties \
--create --topic msk-serverless-tutorial --partitions 6

最后,如果想接收消息,请打开一个新终端,连接到同一个 EC2 实例,然后使用 Apache Kafka 使用者工具接收消息。

cd kafka_2.13-3.1.0/bin/
export BS=boot-abc1234.c3.kafka-serverless.us-east-2.amazonaws.com:9098
./kafka-console-consumer.sh \
--bootstrap-server $BS \
--consumer.config client.properties \
--topic msk-serverless-tutorial --from-beginning

可以在 Amazon MSK Serverless 集群的监控页面上查看集群的运行情况。

集群指标页面

可用性
Amazon MSK Serverless 现已在美国东部(俄亥俄)、美国东部(弗吉尼亚北部)、美国西部(俄勒冈)、欧洲(法兰克福)、欧洲(爱尔兰)、欧洲(斯德哥尔摩)、亚太地区(新加坡)、亚太地区(悉尼)和亚太地区(东京)发布。
Amazon MSK Serverless 功能页面上了解有关此服务及其定价的更多信息。

Marcia