关闭。这个问题需要更加突出重点。它目前不接受答案。**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
去年关门了。改进这个问题我没有在Kafka工作太多,但想建立数据管道在gce。所以我们想知道kafka和pub/sub,基本上我想知道kafka和pub/sub是如何保持消息一致性、消息可用性和消息可靠性的谢谢
xe55xuns1#
我一直在阅读上述答案,我想补充一下,因为我认为还有一些细节有待解决:完全管理的系统这两个系统在云中都可以有完全管理的版本。google提供了pubsub,还有一些完全托管的kafka版本,你可以在云端和prem上进行配置。cloud和on prem我认为这是它们之间真正的区别,因为pubsub只是作为gcp生态系统的一部分提供的,而apachekafka可以同时用作cloud服务和on prem服务(自己进行集群配置)消息复制-使用kafka,您需要自己管理消息的偏移量,使用外部存储,例如apachezookeeper。这样,您就可以跟踪消费者迄今为止阅读的消息。pubsub使用确认消息来工作,如果您的代码在截止日期之前没有确认消息,消息将再次发送,这样您可以避免重复消息,或者另一种避免的方法是使用cloud dataflow pubsubio。保留策略kafka和pubsub都有配置最大保留时间的选项,默认情况下,我认为是7天。用户组与订阅请注意如何在两个系统中读取消息。pubsub使用订阅,创建订阅,然后开始从该订阅中读取消息。一旦消息被读取并确认,该订阅的消息就消失了。kafka使用“使用者组”和“分区”的概念,每个使用者进程都属于一个组,当从特定分区读取消息时,属于同一“使用者组”的任何其他使用者进程都将无法读取该消息(这是因为偏移量最终将增加)。您可以将偏移量看作一个指针,它告诉进程必须读取哪个消息。我认为你的问题没有一个正确的答案,这将真正取决于你需要什么和你有什么限制(下面是一些escenarios的例子):如果解决方案必须在gcp中,显然要使用googlecloud pubsub。你将避免所有的设置工作或支付额外的全自动系统,Kafka需要。如果解决方案需要以流方式处理数据,但也需要支持批处理(最终),那么最好使用clouddataflow+pubsub。如果解决方案需要使用一些spark处理,您可以探索spark流(您可以为流处理配置kafka)一般来说,两者都是非常稳定的流处理系统。造成巨大差异的一点是pubsub是一个连接到gcp的云服务,而apachekafka可以在cloud和on-prem中使用。
lawou6xi2#
除了google管理的google pub/sub和开源的kafka之外,另一个区别是google pub/sub是一个消息队列(例如rabbit mq),其中as kafka更像是一个流日志。你不能用pubsub“重读”或“重放”消息(编辑-从2019年2月起,您可以重播消息,并根据下面的评论向后搜索到某个时间戳)使用google pub/sub,一旦从订阅中读取消息并确认,它就消失了。为了让不同的读者能够阅读更多的邮件副本,您可以通过为该主题创建“订阅”来“扇出”该主题,其中每个订阅都有一个主题中所有内容的完整副本。但这也增加了成本,因为google根据从中读取的数据量来收取pub/sub使用费。使用kafka,您可以设置一个保留期(我认为默认情况下是7天),消息将保留在kafka中,而不管有多少消费者阅读它。您可以添加一个新的使用者(aka subscriber),并随时让它从主题的前面开始消费。您还可以将保留期设置为无限期,然后基本上可以将kafka用作不可变的数据存储,如下所述:http://stackoverflow.com/a/22597637/304262amazon aws kinesis是kafka的托管版本,而我认为google pubsub是rabbit mq的托管版本。带有sqs的amazon sns也类似于google pubsub(sns提供扇出,sqs提供排队)。
du7egjpx3#
kafka和cloud pub/sub的一大区别是,cloud pub/sub完全由您管理。您不必担心机器、设置集群、微调参数等问题,这意味着许多devops工作是为您处理的,这一点很重要,尤其是当您需要扩展时。
3条答案
按热度按时间xe55xuns1#
我一直在阅读上述答案,我想补充一下,因为我认为还有一些细节有待解决:
完全管理的系统这两个系统在云中都可以有完全管理的版本。google提供了pubsub,还有一些完全托管的kafka版本,你可以在云端和prem上进行配置。
cloud和on prem我认为这是它们之间真正的区别,因为pubsub只是作为gcp生态系统的一部分提供的,而apachekafka可以同时用作cloud服务和on prem服务(自己进行集群配置)
消息复制-使用kafka,您需要自己管理消息的偏移量,使用外部存储,例如apachezookeeper。这样,您就可以跟踪消费者迄今为止阅读的消息。pubsub使用确认消息来工作,如果您的代码在截止日期之前没有确认消息,消息将再次发送,这样您可以避免重复消息,或者另一种避免的方法是使用cloud dataflow pubsubio。
保留策略kafka和pubsub都有配置最大保留时间的选项,默认情况下,我认为是7天。
用户组与订阅请注意如何在两个系统中读取消息。pubsub使用订阅,创建订阅,然后开始从该订阅中读取消息。一旦消息被读取并确认,该订阅的消息就消失了。kafka使用“使用者组”和“分区”的概念,每个使用者进程都属于一个组,当从特定分区读取消息时,属于同一“使用者组”的任何其他使用者进程都将无法读取该消息(这是因为偏移量最终将增加)。您可以将偏移量看作一个指针,它告诉进程必须读取哪个消息。
我认为你的问题没有一个正确的答案,这将真正取决于你需要什么和你有什么限制(下面是一些escenarios的例子):
如果解决方案必须在gcp中,显然要使用googlecloud pubsub。你将避免所有的设置工作或支付额外的全自动系统,Kafka需要。
如果解决方案需要以流方式处理数据,但也需要支持批处理(最终),那么最好使用clouddataflow+pubsub。
如果解决方案需要使用一些spark处理,您可以探索spark流(您可以为流处理配置kafka)
一般来说,两者都是非常稳定的流处理系统。造成巨大差异的一点是pubsub是一个连接到gcp的云服务,而apachekafka可以在cloud和on-prem中使用。
lawou6xi2#
除了google管理的google pub/sub和开源的kafka之外,另一个区别是google pub/sub是一个消息队列(例如rabbit mq),其中as kafka更像是一个流日志。你不能用pubsub“重读”或“重放”消息(编辑-从2019年2月起,您可以重播消息,并根据下面的评论向后搜索到某个时间戳)
使用google pub/sub,一旦从订阅中读取消息并确认,它就消失了。为了让不同的读者能够阅读更多的邮件副本,您可以通过为该主题创建“订阅”来“扇出”该主题,其中每个订阅都有一个主题中所有内容的完整副本。但这也增加了成本,因为google根据从中读取的数据量来收取pub/sub使用费。
使用kafka,您可以设置一个保留期(我认为默认情况下是7天),消息将保留在kafka中,而不管有多少消费者阅读它。您可以添加一个新的使用者(aka subscriber),并随时让它从主题的前面开始消费。您还可以将保留期设置为无限期,然后基本上可以将kafka用作不可变的数据存储,如下所述:http://stackoverflow.com/a/22597637/304262
amazon aws kinesis是kafka的托管版本,而我认为google pubsub是rabbit mq的托管版本。带有sqs的amazon sns也类似于google pubsub(sns提供扇出,sqs提供排队)。
du7egjpx3#
kafka和cloud pub/sub的一大区别是,cloud pub/sub完全由您管理。您不必担心机器、设置集群、微调参数等问题,这意味着许多devops工作是为您处理的,这一点很重要,尤其是当您需要扩展时。