Amazon Kinesis 与 AWS Manage Service Kafka (MSK) -(从本地连接)

Posted

技术标签:

【中文标题】Amazon Kinesis 与 AWS Manage Service Kafka (MSK) -(从本地连接)【英文标题】:Amazon Kinesis vs AWS Manage Service Kafka (MSK) - (Connect from on-prem) 【发布时间】:2020-06-17 23:17:25 【问题描述】:

我正在评估 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) 我们的消息速率是 50msg/秒,什么是高性价比的解决方案?

【问题讨论】:

对于 iii:考虑使用融合复制器将本地代理/主题镜像到云集群。 【参考方案1】:

坦率地说,您的用例听起来很简单,每秒 50 条消息的速率非常低。

Kinesis 是一根需要吸管的消防水管。 Kinesis 旨在摄取、转换和处理数 TB 的移动数据。 ]

您是否考虑过关注 SQS 或 Amazon MQ?两者都比 Kafka 或 Kinesis 更易于使用和管理。仅从您的问题来看,很明显您根本没有与 Kafka 进行过互动,因此您将有一个陡峭的学习曲线。 SQS 是一个简单的基于 api 的队列系统 - 您发布到 SQS 队列,然后从队列中消费。如果您不需要担心排序、路由等问题,那么它是一种持久且可靠(如果笨重)的技术,很多人使用它取得了巨大的成功。

回答您的实际问题:

    Amazon 为其服务发布了 C++ SDK - 如果其中没有 Kinesis 客户端,我会感到震惊。您需要一个公共 Kinesis 端点,或者一个私有 Kinesis 端点,可通过您的本地网络和 AWS vpc 之间的某种隧道或网关访问。

    MSK 是 Kafka。您需要一个 Apache Kafka C++ 客户端,并且与上面的 kinesis 类似,您需要某种隧道或网关从您的本地网络到您已配置 MSK 的 AWS vpc

    这是可能的,但不太可能有任何交钥匙解决方案。您将不得不从 Kafka 编写某种桥接软件 -> 其他系统

    您可以使用 Lambda,只要您能够应对故障、超时和其他故障模式。老实说,在您的 vpc 或本地作为服务运行的独立使用者是一个更好的主意。

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

【讨论】:

绝对正确:很好的答案。与 MSK 和 Amazon MQ 相关的另外两点:它们都是开源工具的 AWS 集成实施。 AWS 的主要目的是为现有实施​​提供迁移路径。 Kinesis 和 SQS(实际上是 SNS)是完整的 AWS 实施。我们希望他们随着时间的推移获得更新、更多支持、更全面的集成等。

以上是关于Amazon Kinesis 与 AWS Manage Service Kafka (MSK) -(从本地连接)的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Kinesis:在同步 Kinesis 分片和租约时捕获异常

将 AWS Kinesis Firehose 回填到 Elasticsearch Service 失败记录

将AWS Kinesis Firehose回填到Elasticsearch Service失败的记录

Amazon Kinesis + 集成测试

Amazon Kinesis Data Firehose

Kinesis Firehose HTTP_Endpoint 目标响应格式