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

Amazon Kinesis vs AWS Manage Service Kafka (MSK) - (Connect from on-prem)

我正在评估 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/秒,什么是具有成本效益的解决方案?

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

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

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

回答您的实际问题:

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

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

  3. 的 AWS vpc
  4. 这是可能的,但不太可能有任何交钥匙解决方案。您将不得不从 Kafka -> Other systems

  5. 编写某种桥接软件
  6. 您可以使用 Lambda,只要您满足故障、超时和其他故障模式。老实说,一个独立的消费者 运行 作为 vpc 或本地服务中的服务是一个更好的主意。

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