Apache kafka 我正在评估谷歌酒吧/酒吧与卡夫卡的竞争。有什么区别?
我对卡夫卡的研究不多,但想在GCE中建立数据管道。所以我们想知道Kafka和PUB/Sub的区别。基本上,我想知道Kafka和PUB/Sub是如何保持消息一致性、消息可用性和消息可靠性的Apache kafka 我正在评估谷歌酒吧/酒吧与卡夫卡的竞争。有什么区别?,apache-kafka,google-cloud-pubsub,Apache Kafka,Google Cloud Pubsub,我对卡夫卡的研究不多,但想在GCE中建立数据管道。所以我们想知道Kafka和PUB/Sub的区别。基本上,我想知道Kafka和PUB/Sub是如何保持消息一致性、消息可用性和消息可靠性的 谢谢卡夫卡和云发布/订阅之间的一大区别是云发布/订阅完全由您管理。您不必担心机器、设置集群、微调参数等问题。这意味着DevOps的大量工作都是为您处理的,这一点非常重要,尤其是当您需要扩展时。除了由Google管理的Google Pub/Sub和开源的Kafka,另一个区别是Google Pub/Sub是一个消
谢谢卡夫卡和云发布/订阅之间的一大区别是云发布/订阅完全由您管理。您不必担心机器、设置集群、微调参数等问题。这意味着DevOps的大量工作都是为您处理的,这一点非常重要,尤其是当您需要扩展时。除了由Google管理的Google Pub/Sub和开源的Kafka,另一个区别是Google Pub/Sub是一个消息队列(例如Rabbit MQ),其中as Kafka更像是一个流日志。您不能使用Pubsub“重读”或“重播”消息。(编辑-从2019年2月起,您可以重播消息,并根据下面的评论向后搜索到某个时间戳) 使用Google Pub/Sub,一旦从订阅中读取消息并确认,消息就消失了。为了让不同的读者能够阅读更多的邮件副本,您可以通过为该主题创建“订阅”来“扇出”该主题,其中每个订阅都将包含该主题中所有内容的完整副本。但这也增加了成本,因为谷歌根据从中读取的数据量向发布/订阅使用收费 使用Kafka,您可以设置一个保留期(我认为默认情况下是7天),消息将保留在Kafka中,而不管有多少消费者阅读它。您可以添加一个新的消费者(也称为订户),并让它在您想要的任何时候从主题的前面开始消费。您还可以将保留期设置为无限期,然后基本上可以将Kafka用作不可变的数据存储,如下所述: Amazon AWS Kinesis是Kafka的托管版本,而我认为Google Pubsub是Rabbit MQ的托管版本。
带有SQS的Amazon SNS也类似于Google Pubsub(SNS提供扇出,SQS提供排队)。我一直在阅读上面的答案,我想补充一下,因为我认为还有一些细节有待解决: 完全管理的系统两个系统都可以在云中拥有完全管理的版本。谷歌提供了Pubsub,有一些完全管理的卡夫卡版本,您可以在服务器上进行配置 云与On-prem我认为这是两者之间的真正区别,因为Pubsub仅作为GCP生态系统的一部分提供,而Apache Kafka可以同时用作云服务和On-prem服务(自己进行集群配置) 消息复制 -使用Kafka,您需要自己管理消息的偏移量,使用外部存储,例如ApacheZooKeeper。通过这种方式,您可以跟踪到目前为止消费者阅读的消息。Pubsub使用确认消息来工作,如果您的代码在截止日期之前没有确认消息,消息将再次发送,这样可以避免重复消息,或者另一种避免重复消息的方法是使用云数据流PubsubIO 保留策略卡夫卡和Pubsub都有配置最大保留时间的选项,默认情况下,我认为是7天 消费者组与订阅在两种系统中阅读邮件时都要小心。Pubsub使用订阅时,您创建一个订阅,然后开始从该订阅读取消息。一旦消息被读取并确认,该订阅的消息就消失了。Kafka使用“使用者组”和“分区”的概念,每个使用者进程都属于一个组,当从特定分区读取消息时,属于同一“使用者组”的任何其他使用者进程都将无法读取该消息(这是因为偏移量最终将增加)。您可以将偏移量视为一个指针,它告诉进程必须读取哪个消息 我认为你的问题没有一个正确的答案,这将取决于你需要什么和你有什么限制(下面是一些Escnarios的例子):
- 如果解决方案必须在GCP中,显然要使用Google Cloud Pubsub。您将避免所有设置工作,或为卡夫卡所需的全自动系统支付额外费用
- 如果解决方案需要以流方式处理数据,但也需要支持批处理(最终),那么最好使用CloudDataflow+Pubsub
- 如果解决方案需要使用一些Spark处理,您可以探索Spark流(您可以为流处理配置Kafka)