亚马逊AWS官方博客

Amazon Managed Streaming for Apache Kafka (MSK) 迎来通用版本

Original URL: https://amazonaws-china.com/cn/blogs/aws/amazon-managed-streaming-for-apache-kafka-msk-now-generally-available/

 

AWS客户对于流式数据的使用方式,一直令我钦佩而惊讶。以全球最受企业及专业人士依赖的新闻机构之一Thomson Reuters(路透社)为例,他们构建起一套解决方案,用于对数据进行捕捉、分析与可视化,借此帮助产品团队不断改善用户体验。而先后推出《卡通农场》、《部落冲突》以及《海岛奇兵》等游戏大作的社交游戏厂商Supercell则着眼于游戏内实时数据,日均处理多达450亿个事件。

自从在re: Inent 2013大会上正式推出Amazon Kiensis以来,我们一直在不断扩展客户在AWS上处理流式数据的方式。目前提供的相关工具包括:

  • Kinesis Data Streams,用于配合用户自己的应用程序捕捉、存储及处理数据流。
  • Kinesis Data Firehose,用于将数据转换并收集至指定的目的地,例如Amazon S3、Amazon Elasticsearch Service以及Amazon Redshift。
  • Kinesis Data Analytics,使用SQL或Java(通过Apache Flink应用程序)持续分析数据,借此实现异常检测或时间序列聚合等目标。
  • Kinesis Video Streams,用于简化媒体流的处理工作。

在re: Invent 2018大会上,我们又发布了Amazon Managed Streaming for Apache Kafka (MSK)的开放预览版,这项全托管服务能够帮助用户轻松构建并运行起各类由Apache Kafka负责流式数据处理的应用程序。

现在,我们兴奋地宣布,Amazon MSK终于迎来其通用版本!

如何运作

Apache Kafka (Kafka)是一套开源平台,能够帮助客户捕捉流式数据,例如单击流事件、事务、物联网事件、应用程序与机器日志等,且能够执行实时分析、运行连续转换、并将数据实时分发至各数据湖与数据库当中。大家可以使用Kafka作为流式数据存储方案,将生产流式数据的应用程序(生产程序)与消费这些流式数据的应用程序(消费程序)剥离开来。

Kafka本身已经成为一套流行的企业级数据流与消息传递框架,但其在生产环境中的设置、扩展与管理仍然较为困难。Amazkn MSK能够帮助我们执行这些管理任务,并结合高可用性与安全性监管要求通过最佳实践将Kafka轻松与Apache ZooKeeper配合起来,共同进行置备与配置。

您的MSK集群将始终运行在由MSK服务托管的Amazon VPC当中。通过弹性网络接口(ENI),您的MSK资源将可供各指定的VPC、子网以及安全组使用,具体如下图所示:

客户能够在几分钟之内创建集群,使用AWS身份与访问管理(AWS Identity and Access Management,简称IAM)控制集群操作,使用由AWS Certificate Manager(ACM)全面托管的TLS私有证书颁发机构进行客户端授权,使用TLS加密传输数据,并使用AWS Key Management Service(KMS)密钥实现静态数据加密。

Amazon MSK能够持续监控服务器运行状况,并在服务器出现故障时自动更换服务器、自动执行服务器修复,并将高可用性ZooKeeper节点纳入服务运营体系、且无需支付任何额外费用。Kafka的各项关键性能指标则发布在控制台与Amazon CloudWatch当中。Amazon MSK与Kafka 1.1.1及2.1.0版本完全兼容,因此大家无需更改任何代码,即可使用Kafka管理员工具及其他Kafka兼容型工具及框架保持应用程序的正常运行。

根据客户们对于开放预览版提出的反馈,我们在Amazon MSK的通用版本中添加了以下功能:

  • 在客户端与代理间,以及在各代理间通过TLS实现传输数据加密。
  • 使用ACM私有证书颁发机构进行TLS双向验证。
  • 支持Kafka 2.1.0版本。
  • 99.9%可用性SLA。
  • 符合HIPAA要求。
  • 集群范围存储纵向拓展。
  • 与AWS CloudTrail for MSK API的日志记录功能相集成。
  • 集群标记以及基于标记的IAM策略应用。
  • 为主题与代理定制集群范围内配置。

AWS CloudFormation支持功能也将在未来几周内上线。

创建集群

下面,我们使用AWS管理控制台创建一个集群。在这里需要为集群命名,选择集群运行所在的VPC以及Kafka版本。

接下来,我们选择可用区(AZ)以及VPC中所使用的子网。在下一步中,我们需要选择在每个可用区内部署多少个Kafka代理。代理越多,我们就能为其分配更多分区,从而扩展集群的总体吞吐量。

我们还可以添加标签来搜索并过滤现有资源,在Amazon MSK API中应用IAM策略,并实时跟踪资源使用成本。在存储方面,这里直接使用各个代理的默认存储卷大小。

我们选择在集群内使用加密,并允许客户端与代理之间进行TLS与明文通信。对于静态数据,我们使用AWS管理的客户主密钥(CMK)实现加密;当然,大家可以使用KMS在账户内选定一个CMK以实现进一步控制。如果必要,大家也可以使用私有TLS证书对接入集群的客户端进行身份验证。但这项功能需要使用ACM的私有证书颁发机构(CA),在本文的示例中就不使用此选项了。

在高级设置中,我们保留默认值。例如,我们可以在这里为代理选择其他实例类型。其中某些设置可以通过AWS CLI进行更新。

我们需要监控所创建集群的运行状态,例如在通过CLI或SDK进行交互时需要使用的Amazon资源名称(ARN)。

当状态显示为active时,客户端信息部分将显示用于接入目标集群的更多详细内容,例如:

  • 可配合Kafka工具接入集群的各引导服务器。
  • Zookeeper的主机与端口连接清单。

我们可以使用AWS CLI获取相关信息:

  • aws kafka list-clusters,用于查看特定区域内集群的ARN。
  • aws kafka get-bootstrap-brokers --cluster-arn <ClusterArn>,用于获取Kafka引导服务器。
  • aws kafka describe-cluster --cluster-arn <ClusterArn>,用于查看关于集群的更多详细信息,包括ZooKeeper连接字符串。

Kafka快速使用演示

要开始使用Kafka,我们在同一VPC中创建两个EC2实例,其一为生产实例,其二为消费实例。要将它们设置为客户端设备,我们可以从Apache网站或者其他镜像中下载并提取Kafka工具。Kafka需要配合Java 8才能正常运行,因此这里我们安装Amazon Corretto 8

在生产实例上的Kafka目录中,我们创建一个主题,用于将数据从生产实例发送至消费实例:

bin/kafka-topics.sh --create --zookeeper <ZookeeperConnectString> \
--replication-factor 3 --partitions 1 --topic MyTopic

接下来,我们启动一个基于控制台的生产程序:

bin/kafka-console-producer.sh --broker-list <BootstrapBrokerString> \
--topic MyTopic

在消费实例上的Kafka目录中,启动一个基于控制台的消费程序:

bin/kafka-console-consumer.sh --bootstrap-server <BootstrapBrokerString> \
--topic MyTopic --from-beginning

这就是我们的快速演示流程,我们首先创建主题、而后将消息从生产程序(图上)发送至该主题的消费程序(图下):

计费标准与可用区域

计费以每Kafka代理-小时与每预配置存储-小时为单位。集群中使用的ZooKeeper节点不会带来任何费用。AWS数据传输费率也适用于出入MSK集群的数据。大家无需为区域内各集群之间的数据传输付费,其中包括代理间的数据传输以及代理与ZooKeeper节点之间的数据传输。

大家可以使用MirrorMaker(开源Kafka随附)等工具将现有Kafka集群迁移至MSK,并借此将集群中的数据复制至MSK集群当中。

Amazon MSK一直以良好的上游兼容性作为核心宗旨。我们对Kafka平台做出的代码变更,皆已发布回开源项目本体。

Amazon MSK目前在美国东部(北弗吉尼亚州)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、亚太地区(东京)、亚太地区(新加坡)、亚太地区(悉尼)、欧盟(法兰克福)、欧盟(爱尔兰)、欧盟(巴黎)以及欧盟(伦敦)等区域正式上线。

期待Amazon MSK,能够切实帮助大家简化流式应用程序的构建与云迁移工作!

 

本篇作者

Danilo Poccia

Danilo与不同规模的初创公司及企业合作,致力于支持各类创新活动。在担任Amazon Web Services公司首席布道师(欧洲、非洲与中东地区)期间,他运用自己的丰富经验帮助客户将想法转变为现实,专注于无服务器架构与事件驱动型编程,同时也积极关注机器学习与边缘计算对于技术及业务的影响。他还著有《AWS Lambda in Action from Manning》。