Google Cloud平台上类似于Kafka/AWS Kinesis Stream的替代方案

24
我正在开发一个应用程序,该程序不断向缓冲区添加内容,同时许多读取器独立地从这个缓冲区消费内容(写入一次,多次读取)。起初,我考虑使用Apache Kafka,但由于我更喜欢作为服务的选择,因此开始调查AWS Kinesis Streams + KCL,并且似乎可以使用它们完成这项任务。
基本上,我需要两个功能:排序(所有读取器必须按相同顺序读取事件),并且能够选择从哪个偏移量开始读取缓冲区中的内容。
现在我也在评估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的这样的文档或功能。它们可能有些远。 - Kannaiyan
这篇文章(https://cloud.google.com/blog/big-data/2016/09/apache-kafka-for-gcp-users-connectors-for-pubsub-dataflow-and-bigquery)让我更加困惑了。它含蓄地暗示PubSub是Kafka的替代品,但我仍然没有看到相同的功能。 - Renan
1
使用Pub/Sub时,您需要在消息有效负载中添加排序信息。这可能会影响您的应用程序,也可能不会。 - gdahlm
2个回答

10

方案比较复杂,但可能会有所帮助:

  • 使用发布/订阅功能将事件推送到单个主题。此时它们将是无序的。
  • 创建一个云数据流实时处理管道,从发布/订阅主题读取数据。使其进行流式写入到云大数据查询(BigQuery)中,并为每个表项添加时间戳。
  • 让读取者对BQ表进行查询,按时间戳排序以获得一致的顺序。您可以使用ROW_NUMBER作为偏移量。

希望这能有所帮助。


可能可以工作,但正如你所说,那是很多工作。此时此刻,我宁愿在计算实例上安装Kafka。但还是谢谢你的建议。 - Renan
2
@Renan 如果您不想实现Pub/Sub中推荐的消息排序方法之一,那么您在Compute Engine上托管Kafka的方法确实是最佳选择。请注意,Pub/Sub工程师一直在努力实现消息排序,但目前尚无此功能的预计发布时间。 - Jordan
2
@Jordan 我可以尝试实现其中一种排序方法。但我最需要的是能够从已知的先前偏移量(受最大可用性限制,如果我没记错的话,为7天)开始读取缓冲区的能力。据我所知,在PubSub中,我只能接收订阅后发布的消息,无法读取先前的消息。如果您认为提供更多背景信息有助于阐述100%的Google Cloud解决方案,我可能会更新我的问题。谢谢! - Renan
2
@Renan 寻找以前的消息也即将发布!您可以在此旧版Google Groups表单中看到alpha测试已经完成。我没有这些新功能的预计发布时间,但它们确实非常接近发布到Pub/Sub生产环境中! - Jordan
@Jordan,太好了!期待着它的到来。感谢您的更新! - Renan

8
Pub/Sub现在原生支持排序。就订阅(Kafka中的消费者组)存在于消费之前的要求而言,这很少是用户的问题。如果没有其他办法,您可以创建快照,它允许您将新订阅重置为任何其他现有订阅的状态。
这有点晚了,但是如果@Renan仍在关注,我们很想听听您最终是如何构建您的系统的。

2
感谢分享有关本地排序的信息,这是一个不错的功能!最终,我最初使用了AWS Kinesis,然后迁移到了Kafka(由于与此帖子无关的其他原因)。 - Renan

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