等效于 Google Cloud Platform 上的 Kafka / AWS Kinesis Stream

Posted

技术标签:

【中文标题】等效于 Google Cloud Platform 上的 Kafka / AWS Kinesis Stream【英文标题】:Equivalent for Kafka / AWS Kinesis Stream on Google Cloud Platform 【发布时间】:2018-02-20 04:16:51 【问题描述】:

我正在构建一个应用程序,该应用程序不断地附加到缓冲区,而许多读者独立地从该缓冲区中消费(一次写入多次读取 / WORM)。起初我想使用 Apache Kafka,但由于我更喜欢​​即服务选项,因此我开始研究 AWS Kinesis Streams + KCL,看来我可以用它们完成这项任务。

基本上我需要 2 个功能:排序(所有读取器必须以相同的顺序读取事件)以及选择缓冲区中从读取器开始消费的偏移量的能力。

现在我也在评估 Google Cloud Platform。在我阅读文档时,似乎建议将 Google Pub/Sub 等同于 AWS Kinesis Stream,但在更详细的层面上,这些产品似乎有很大不同:

Kinesis 保证在分片内进行排序,而在 Pub/Sub 上的排序是在尽力而为的基础上进行的; Kinesis 拥有可供读者使用的所有缓冲区(最多 7 天),读者可以使用偏移量来选择开始阅读位置,而在 PubSub 上,只有订阅后的消息可供使用。

如果我没记错的话,PubSub 不能被视为 Kinesis 等价物。也许如果与 Google Dataflow 一起使用?我必须承认我仍然看不到怎么做。

那么,PubSub 是 Kinesis 的替代品吗?如果没有,是否有可以满足我要求的 Google Cloud 产品?

谢谢!

【问题讨论】:

这也是我能看到的。 PubSub+DataFlow(大约)不等同于 Kinesis。虽然我广泛使用了 Kinesis,但我没有看到有关 pubsub 和 Dataflow 的此类文档或功能。他们可能有点远。 cloud.google.com/blog/big-data/2016/09/… 的帖子让我更加困惑。它(巧妙地)暗示 PubSub 是 Kafka 的替代品,但我仍然看不到相同的功能。 使用 Pub/Sub,您需要在消息负载中添加订购信息。这可能是您的应用程序的问题,也可能不是。 【参考方案1】:

Pub/Sub 现在支持ordering natively。至于在消费之前存在订阅(Kafka 中的~consumer group)的要求,这对用户来说很少是问题。如果没有别的,您可以创建snapshots,它允许您将新订阅重置为任何其他现有订阅的状态。

这有点晚了,但是@Renan,如果你还在看,很想听听你最终是如何构建系统的。

【讨论】:

感谢您分享有关本地订购的信息,这是一个不错的功能!最后我最初使用了 AWS Kinesis,然后迁移到了 Kafka(由于其他与本文无关的原因)。【参考方案2】:

一个相当复杂的解决方案,但它可能会有所帮助:

使用 pub/sub 将您的事件推送到单个主题。此时它们将是无序的。 创建从发布/订阅主题读取的云数据流流式传输管道。让它对云 bigquery 进行流式写入,为每个表条目添加时间戳。 有没有读者对bq表做查询,按时间戳排序,顺序一致。您可以使用 ROW_NUMBER 作为您的偏移量。

希望对您有所帮助。

【讨论】:

可能有效,但正如您所说,这是很多工作。在这一点上,我宁愿在计算实例上安装 Kafka。不过谢谢你的建议。 @Renan 如果您不准备实施recommended approaches for ordering messages in Pub/Sub 之一,那么托管Kafka on Compute Engine 的方法确实是您的最佳选择。请注意,Pub/Sub 工程师一直在努力实现消息排序,但目前还没有此功能的 ETA。 @Jordan 我可以尝试实现其中一种排序方法。但我最怀念的是从已知的、pior 的偏移量开始读取缓冲区的能力(如果我没记错的话,受最大可用性的限制,即 7 天)。据我了解,在 PubSub 中,我只能收到订阅后发布的消息,我无法阅读之前的消息。如果您认为这有助于详细说明 100% 的 Google Cloud 解决方案,我可能会更新我的问题以提供更多背景信息。谢谢! @Renan 求上一条消息也快要发布了!你可以看到 alpha 测试发生在这个old Google Groups form 中。我没有这些新功能的预计时间,但它们确实非常接近发布到 Pub/Sub 生产中! @Jordan 这是个好消息!期待它。感谢您的更新!

以上是关于等效于 Google Cloud Platform 上的 Kafka / AWS Kinesis Stream的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Python 和 AWS Lambda 的 Google Cloud Platform API 不兼容:无法导入名称“cygrpc”

在Google Cloud Platform上为其他帐户创建SSH密钥

Ingress-Nginx-Controller未能找到部署在Google Cloud Platform上的第二项服务

如何从 Python 运行时云函数访问 Google Cloud Platform Firestore 触发器

google-cloud-platform:外部 DNS 配置不起作用

使用新的 Google Cloud 日志记录 jar 时,日志未显示在 Google Cloud Platform Stackdriver 中