跳转到主要内容
Chinese, Simplified

AWS刚刚在Re-Invent 2018上发布了一个托管Apache Kafka服务。我跳过它来弄清楚产品。炒作值得吗?你应该用吗?其他供应商应该担心吗?这是我的评论!

TLDR:虽然我认为亚马逊MSK是一个公开的预览,并且它表现出良好的性能,但截至今天我发现它缺乏主要功能,包括适当的安全性,这使得MSK目前无法推荐。

我应该开心......但我不是


对我来说,使用Apache Kafka的人越多,我获得的业务就越多。当我在Udemy上在线教Apache Kafka时(https://kafka-tutorials.com/上的链接),从AWS获得想要学习Apache Kafka的整个用户群的前景令人兴奋!作为Apache Kafka顾问,花费时间部署数据管道比部署基础架构总是更有趣。

不幸的是,今天发布的AWS错过了这个标志。我认为它让人联想到AWS整体上的开源软件托管服务:它们早期发布,缺乏我认为应该是MVP的功能。在我看来,这将阻止未来的用户。

你得到什么


让我们开始谈论积极的方面。只需几次点击和15到30分钟的等待时间,您就可以获得完全复制的多AZ Kafka群集。它还配备了Zookeeper管理,数据存储由EBS卷支持。您为EC2实例支付双倍的价格,但这是托管服务的价格。 EBS成本与您自己使用EBS卷的成本相同。

 

注意:你只能拥有一个经纪人,这个经纪人是你要部署的AZ数量的倍数......这是件好事!

从那里,您将获得一个引导服务器URL和一个Zookeeper DNS名称,您可以点击并开始使用Kafka。 要获取URL,您必须使用CLI ...

$ aws kafka list-clusters
{
    "ClusterInfoList": [
        {
            "BrokerNodeGroupInfo": {
                "BrokerAZDistribution": "DEFAULT",
                "ClientSubnets": [
                    "subnet-c69251b1",
                    "subnet-07816c5e",
                    "subnet-fc512699"
                ],
                "InstanceType": "kafka.m5.large",
                "StorageInfo": {
                    "EbsStorageInfo": {
                        "VolumeSize": 1000
                    }
                }
            },
            "ClusterArn": "arn:aws:kafka:us-east-1:160803060715:cluster/test/9d2be72e-0d3b-4a2a-abbd-d8708ec4dca8-3",
            "ClusterName": "test",
            "CreationTime": "2018-11-30T08:21:36.824Z",
            "CurrentBrokerSoftwareInfo": {
                "KafkaVersion": "1.1.1"
            },
            "CurrentVersion": "K13V1IB3VIYZZH",
            "EncryptionInfo": {
                "EncryptionAtRest": {
                    "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:160803060715:key/c8a78efb-4daa-48ee-9fe8-26d40c274aaf"
                }
            },
            "EnhancedMonitoring": "DEFAULT",
            "NumberOfBrokerNodes": 3,
            "State": "ACTIVE",
            "ZookeeperConnectString": "172.31.31.89:2181,172.31.9.136:2181,172.31.73.166:2181"
        }
    ]
}
$ aws kafka get-bootstrap-brokers --cluster-arn arn:aws:kafka:us-east-1:160803060715:cluster/test/9d2be72e-0d3b-4a2a-abbd-d8708ec4dca8-3
{
    "BootstrapBrokerString": "172.31.72.155:9092,172.31.10.218:9092,172.31.18.106:9092"
}

 

就卡夫卡版而言,你得到...... 1.1.1。它真的很旧,我们现在有2.1和2.0.1可用......哦。您已经拥有的所有Kafka客户都应该工作,包括Kafka Connect,Kafka Streams,连接Kafka的监控解决方案等。

监控明智,我们可以在CloudWatch中查看指标,我想这是一个值得欢迎的补充。 “默认”监控级别是免费的,您必须为“每个经纪人”和“每个经纪人的每个主题”支付额外费用。这有点荒谬,因为每个经纪人都需要“每个主题”。只需将其纳入经纪人的成本,并让所有人免费......呃。指标列表虽然很好,但我很高兴他们揭露了一些最重要的指标:https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html#metrics-details

最后,因为您购买了EC2实例,所以您可以自由使用您喜欢的任何网络带宽。与其他管理的Kafka提供商相比,我认为这是AWS产品的一个重要区别。

我创建了一个集群,我用3个代理m5.large和一个机器m5a.large作为客户端进行了快速性能测试。性能方面,集群看起来很稳固,我能够以70MB /秒的速度获得峰值吞吐量。

 

$ kafka-topics.sh — zookeeper 172.31.31.89:2181,172.31.9.136:2181,172.31.73.166:2181 — create — topic test — replication-factor 3 — partitions 12
Created topic “test”.
$ kafka-producer-perf-test.sh — topic test — throughput 10000 — num-records 10000000000 — producer-props acks=all linger.ms=10 batch.size=65536 bootstrap.servers=172.31.72.155:9092,172.31.10.218:9092,172.31.18.106:9092 — record-size 1000
49912 records sent, 9968.4 records/sec (9.51 MB/sec), 17.4 ms avg latency, 236.0 max latency.
50076 records sent, 10011.2 records/sec (9.55 MB/sec), 10.6 ms avg latency, 35.0 max latency.
49994 records sent, 9994.8 records/sec (9.53 MB/sec), 10.0 ms avg latency, 29.0 max latency.
50074 records sent, 10014.8 records/sec (9.55 MB/sec), 9.9 ms avg latency, 33.0 max latency.
$ kafka-producer-perf-test.sh — topic test — throughput 50000 — num-records 10000000000 — producer-props acks=all linger.ms=10 batch.size=65536 bootstrap.servers=172.31.72.155:9092,172.31.10.218:9092,172.31.18.106:9092 — record-size 1000
249251 records sent, 49820.3 records/sec (47.51 MB/sec), 26.0 ms avg latency, 226.0 max latency.
250275 records sent, 50055.0 records/sec (47.74 MB/sec), 13.7 ms avg latency, 34.0 max latency.
250079 records sent, 49985.8 records/sec (47.67 MB/sec), 13.6 ms avg latency, 35.0 max latency.
$ kafka-producer-perf-test.sh — topic test — throughput 100000 — num-records 10000000000 — producer-props acks=all linger.ms=10 batch.size=65536 bootstrap.servers=172.31.72.155:9092,172.31.10.218:9092,172.31.18.106:9092 — record-size 1000
369975 records sent, 73906.3 records/sec (70.48 MB/sec), 343.9 ms avg latency, 1112.0 max latency.
351592 records sent, 70290.3 records/sec (67.03 MB/sec), 444.9 ms avg latency, 1402.0 max latency.
351236 records sent, 70233.2 records/sec (66.98 MB/sec), 453.6 ms avg latency, 1359.0 max latency.
354300 records sent, 70845.8 records/sec (67.56 MB/sec), 447.4 ms avg latency, 1365.0 max latency.

 

我们没有得到什么


首先,我想在房间里找到大象:安全。

 

对我来说,MSK并不安全

 


我认为任何人使用MSK的主要原因是为了安全。好的,我在自己的云中有一个Apache Kafka集群,所以我是唯一可以访问它的人,这是一个很大的优势。 AWS做了什么?好吧,它由KMS支持加密EBS卷,而且你没有SSH访问你的数据,这是好的。这为您的数据提供了“静态加密”功能。

但是,自从3岁以上的Kafka v0.9起,我们就拥有了适当的Kafka安全性。在每个Kafka版本中,它都在使用新的安全机制进行改进。今天我们在Kafka Security中有两个组件:

  • 飞行中的SSL加密:你没有得到MSK(现在)。 https://aws.amazon.com/msk/faqs/。这意味着您的网络周围的所有数据都完全未加密。 Route53和ACM的整合有望在以后出现......但是现在你已经暴露了。
  • 身份验证和授权:所以这是我最大的问题:您创建了一个MSK群集,并且您认为它是安全的,因为营销登录页面告诉您它是安全的。好吧,一点也不。它绝对使用NO安全机制,因此任何人都可以创建/读取/写入/删除任何主题的数据。哦,任何人都可以改变Zookeeper。我的意思是,每个受管理的Kafka提供商都提供安全保障。它有多种形式:SASL / GSSAPI,SASL / OAUTH,SASL / PLAIN,SASL / SCRAM和AWS没有实现任何这些。实际上,当您考虑AWS和安全性时,您认为是IAM。 SASL / IAM将成为杀手锏。 AWS IAM内部的身份验证和授权,梦想。嗯......不会很快发生的。

因此,当您获得所有奇特的网络和服务控制安全性时,您的实际Kafka群集将尽可能地打开。这意味着您在当前系统中如此难以处理的数据的任何安全控制在MSK中完全丢失。对我来说,这对我所有咨询客户来说都是一个破坏性的交易。

让我细微一点:这是MSK的预览,我确信在积压的某个地方,AWS确实有一张大卡可以实现并释放某种真正的安全性。但是,当您发布服务时,您只有一次机会给人留下印象,而且您发布的内容有点完整。 AWS在这里错过了标记,很长一段时间,我认为MSK是不安全的。即使有一天它变得“安全”,它也表明AWS缺乏支持安全第一卡夫卡的承诺,这反映了产品的思维方式:营销能力。

我们没有得到的其他东西


除了安全性,这里还有我想念的衣物清单:

  • 托管的结构模式注册表
  • 能够放入Kafka的jar(适用于度量报告者,特定类,Java代理)
  • 指向并单击镜像制造商/复制
  • 指向并单击备份到S3
  • 点击并点击Kinesis与Kafka的链接
  • 管理Kafka Connect
  • 控制Kafka配置(虽然你可以使用kafka-configs命令破解它...你欢迎AWS)
  • 扩展集群
  • 来自控制台的主题管理
  • 通过控制台管理几乎所有内容
  • 您的群集支持 - 对于我来说,这是一个很大的未知,因为AWS支持是否能够支持您的Kafka群集。根据我的经验,支持Kafka集群并不容易,这是其他管理的Kafka供应商可能真正擅长的。另一个区别

 

AWS和开源世界


AWS喜欢从开源世界中获取产品并将其作为服务付费。 Elastic Search和Envoy是两个例子,现在我们有Apache Kafka。问题在于,从历史上看,AWS并没有给予它带来大量现金的项目。这对于这些项目来说是个大问题,因为他们生活在社区支持之下。

请证明我错了AWS:

Embedded video
公平地说,AWS已经开始开源今年非常大的FireCracker,这可能预示着思维方式的转变......时间会证明。

结束思考


我认为管理卡夫卡空间的竞争越来越激烈。它充满了伟大的演员,如Confluent,Aiven,CloudKarafka,Instaclustr,Landoop,Heroku以及其他我可能缺少的演员。 AWS肯定会增加很多压力,但是现在亚马逊MSK非常小,我不推荐它。你最终还是会管理很多,这不是你首先注册的,是吗?

原文:https://medium.com/@stephane.maarek/an-honest-review-of-aws-managed-apache-kafka-amazon-msk-94b1ff9459d8

本文 :http://pub.intelligentx.net/node/367

讨论:请加入知识星球【首席架构师圈】

Article
知识星球
 
微信公众号
 
视频号