Nar*_*esh 52 apache-kafka google-cloud-pubsub
我没有在kafka上工作过多,但想在GCE中构建数据管道.所以我们想知道Kafka vs PUB/Sub.基本上我想知道如何在Kafka和Pub/sub中维护消息一致性,消息可用性,消息可靠性
谢谢
gun*_*nit 66
除了由Google管理的Google Pub/Sub和Kafka是开源之外,另一个区别是Google Pub/Sub是一个消息队列(例如Rabbit MQ),而Kafka更像是一个流日志.您无法使用Pubsub"重新读取"或"重播"消息.(编辑 - 截至2019年2月,您可以重播消息并及时向后查找某个时间戳,每条评论如下)
使用Google Pub/Sub,一旦从订阅中读出消息并确认消息,它就消失了.为了让不同的读者能够阅读更多的消息副本,您可以通过为该主题创建"订阅"来"扇出"该主题,其中每个订阅将包含进入该主题的所有内容的完整副本.但这也增加了成本,因为Google根据从中读取的数据量来收取Pub/Sub使用费.
使用Kafka,您可以设置保留期(我认为默认情况下为7天),无论有多少消费者阅读,都会留在Kafka中.您可以添加新的消费者(也称为订阅者),并随时从主题的前面开始消费.您还可以将保留期设置为无限期,然后您基本上可以将Kafka用作不可变数据存储区,如下所述:http://stackoverflow.com/a/22597637/304262
亚马逊AWS Kinesis是Kafka的托管版本,而我认为Google Pubsub是Rabbit MQ的托管版本.带有SQS的Amazon SNS也类似于Google Pubsub(SNS提供了扇出和SQS提供的排队).
dbu*_*osp 24
我一直在阅读上面的答案,我想补充它们,因为我认为还有一些细节待定:
完全托管的系统两个系统都可以在云中拥有完全托管的版本。Google 提供了 Pubsub 并且有一些完全托管的 Kafka 版本,您可以在云端和本地配置。
Cloud vs On-prem我认为这是它们之间真正的区别,因为 Pubsub 仅作为 GCP 生态系统的一部分提供,而 Apache Kafka 您可以用作云服务和本地服务(自己进行集群配置)
消息复制 - 使用 Kafka,您需要自己管理消息的偏移量,使用外部存储,例如 Apache Zookeeper。通过这种方式,您可以跟踪到目前为止消费者读取的消息。Pubsub 使用确认消息来工作,如果您的代码在截止日期之前没有确认消息,则会再次发送消息,这样您就可以避免重复消息,或者另一种避免的方法是使用 Cloud Dataflow PubsubIO。
保留策略Kafka 和 Pubsub 都有配置最长保留时间的选项,默认情况下,我认为是 7 天。
消费者组 vs 订阅请注意在两个系统中阅读消息的方式。Pubsub 使用订阅,您创建一个订阅,然后您开始阅读来自该订阅的消息。一旦消息被读取并确认,该订阅的消息就消失了。Kafka使用“消费者组”和“分区”的概念,每个消费者进程都属于一个组,当从特定分区读取消息时,属于同一个“消费者组”的任何其他消费者进程将无法读取该消息(这是因为偏移量最终会增加)。您可以将偏移量视为一个指针,它告诉进程必须读取哪些消息。
我认为您的问题没有正确答案,这实际上取决于您的需求和限制(以下是一些场景示例):
如果解决方案必须在 GCP 中,显然使用 Google Cloud Pubsub。您将避免所有设置工作或为 Kafka 所需的全自动系统支付额外费用。
如果解决方案需要以 Streaming 方式处理数据,但还需要支持 Batch 处理(最终),那么使用 Cloud Dataflow + Pubsub 是个好主意。
如果解决方案需要使用一些 Spark 处理,您可以探索 Spark Streaming(您可以为流处理配置 Kafka)
一般来说,两者都是非常可靠的流处理系统。产生巨大差异的一点是 Pubsub 是附加到 GCP 的云服务,而 Apache Kafka 可以在云和本地使用。
更新(2021 年 4 月 6 日):
Kafka与Cloud Pub/Sub之间的一个重要区别是Cloud Pub/Sub完全由您管理.您不必担心机器,设置群集,微调参数等等,这意味着您需要处理大量DevOps工作,这一点很重要,尤其是当您需要扩展时.
| 归档时间: |
|
| 查看次数: |
22235 次 |
| 最近记录: |