亚马逊Kinesis与AWS管理服务Kafka(MSK)-(从本地连接)的比较

12

我正在评估 AWS Kinesis 和托管服务 Kafka (MSK)。我们的需求是将一些消息(JSON)从本地系统(使用C++开发的系统)发送到 AWS,然后需要将上述消息持久化到关系型数据库中,例如 PostgreSQL,并同时将上述数据流式传输到托管在 AWS 中的其他微服务(Java)。

我有以下问题:

i)如何从本地系统访问(连接并发送消息)AWS Kinesis?是否支持任何 C++ API?(有Java客户端API,但我们的本地系统使用C++编写)

ii)如何从本地系统访问(连接并发送消息)AWS MSK?

iii)是否可能将 MSK 与其他 AWS 服务集成(例如 Lambda、Redshift、EMR 等)?

iv)为了将数据持久化到数据库中,我们可以使用 AWS Lambda 吗?(AWS Kinesis 支持该功能,那 AWS MSK 呢?)

v)我们的消息速率为每秒 50 条,有哪些具有成本效益的解决方案?


对于iii:考虑使用汇聚复制器将本地代理/主题镜像到云集群。 - bunkerdive
1个回答

16
直白地说,您的使用情况听起来很简单,每秒50个消息是非常低的速率。
Kinesis就像一个大火箭筒,而您只需要一根吸管。Kinesis旨在摄取、转换和处理数千兆字节的流动数据。
您是否考虑过查看SQS或Amazon MQ?它们都比Kafka或Kinesis容易使用和管理得多。从您的问题中可以清楚地看出,您根本没有接触过Kafka,因此您将面临一个陡峭的学习曲线。SQS是一个简单的基于API的队列系统——您发布到SQS队列,并从队列中消耗。如果您不需要关注排序、路由等方面,那么它是一种持久且可靠(虽然有些笨重)的技术,许多人都使用它取得了巨大的成功。
回答您实际的问题:
1.亚马逊发布了一个C++ SDK用于他们的服务——我会惊讶地发现其中没有Kinesis客户端。您需要一个公共的Kinesis端点,或者一个通过您的本地网络和AWS vpc之间的某种隧道或网关访问的私有Kinesis端点。
2.MSK是Kafka。您需要一个Apache Kafka C++客户端,与上述类似,您需要从您的本地网络到您已经在AWS vpc中准备好的MSK之间的某种隧道或网关。
3.这是可能的,但不太可能有任何现成的解决方案。您将需要编写一些桥接软件,从Kafka->其他系统。
  • 只要您考虑到失败、超时和其他故障模式,就可以可能使用Lambda。老实说,在您的VPC或本地运行的独立消费者作为服务是一个更好的想法。

  • 如先前提到的,SQS或Amazon MQ可能比MSK更简单、更具成本效益,并且几乎肯定比Kinesis更便宜。


  • 1
    非常正确:很棒的答案。关于MSK和Amazon MQ,还有两点需要提及:它们都是开源工具的AWS集成实现。AWS的主要意图是为现有实施提供迁移路径。Kinesis、SQS(以及实际上的SNS)则是完整的AWS实现。随着时间的推移,我们期望它们会获得更新、更多支持、更充分的集成等。 - Tom Harrison

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接