Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 我正在评估谷歌酒吧/酒吧与卡夫卡的竞争。有什么区别?_Apache Kafka_Google Cloud Pubsub - Fatal编程技术网

Apache kafka 我正在评估谷歌酒吧/酒吧与卡夫卡的竞争。有什么区别?

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是一个消

我对卡夫卡的研究不多,但想在GCE中建立数据管道。所以我们想知道Kafka和PUB/Sub的区别。基本上,我想知道Kafka和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)

一般来说,这两种系统都是非常可靠的流处理系统。造成巨大差异的一点是,Pubsub是一个连接到GCP的云服务,而apachekafka可以在云和On-prem中使用。

更新(2021年4月6日)


这不完全是您想要的,但可能对您来说是一本有趣的读物-这并不是真正的区别,因为有多家供应商也将Kafka作为完全管理的服务提供给您。区别可能在于Google PubSub仅在Google云中作为一项服务提供,因此在AWS或Azure等其他云提供商中既没有prem版本,也没有托管服务。“Google PubSub仅在Google云中作为一项服务提供”这是不正确的…您的应用程序未绑定到部署在Google App Engine中。您可以“从任何客户端”连接并发布到Google Pub/Sub,只要您通过“服务帐户”安全地连接到它@JerylCook我想他的意思是你不能在premReplay上安装google的pub/sub,这是大多数面向事件架构的关键功能。此外,卡夫卡在消息中添加了一个序列号,因此成为