选择 Pub/Sub 或 Cloud Managed Service for Apache Kafka

本文档将指导您在 Pub/Sub 和 Google Cloud Managed Service for Apache Kafka 之间进行选择。Pub/Sub 和 Managed Service for Apache Kafka 都是可横向伸缩代管式消息传递服务,能够处理高工作负载。

本文档面向寻求用于处理流式数据和消息传递工作负载的代管式服务的开发者、架构师或决策者。

运行 Apache Kafka 有多种方式,包括合作伙伴服务和自行管理的开源软件。本文档不涵盖这些选项。

如需简要了解 Pub/Sub 概念,请参阅 Pub/Sub 服务概览

如需简要了解 Managed Service for Apache Kafka 的概念,请参阅 Managed Service for Apache Kafka 概览

易于操作与可移植性

在 Pub/Sub 和 Managed Service for Apache Kafka 之间进行选择,需要在操作简单性可移植性之间进行权衡。

Pub/Sub 的简单运维

Pub/Sub 是一项完全托管式、无服务器且全球分布式服务,使用 Google Cloud 基础架构。它会自动扩缩以处理您的工作负载,因此您无需担心管理基础架构。Pub/Sub 会动态调整各个主题和订阅的容量。发布者和订阅者可以独立扩缩,不仅可以跨不同的主题和订阅进行扩缩,还可以在同一主题和订阅中进行扩缩。

Pub/Sub 还可跨多个区域无缝移动数据。这意味着发布方和订阅方可以连接到距离最近的区域,而该服务会处理其余事宜。

Managed Service for Apache Kafka 还可以处理大量数据。不过,您必须根据主题的伸缩需求管理集群大小并配置其他一些属性。最重要的是,您必须考虑要为主题分配的分区数量。分区过多可能会浪费资源。分区过少可能会导致 Kafka 集群中的代理过载。此外,您还必须根据延迟时间和消费者扇出要求考虑每个分区必须配置的副本数。

由于 Kafka 部署绑定到指定区域,因此如果您要跨区域移动数据,则必须在服务之外进行数据移动。确保数据传输的持续正常运行并满足 Kafka 集群中主题的需求,会增加您的运维工作量。

Managed Service for Apache Kafka 的可移植性

虽然 Pub/Sub 的自适应扩缩和全球数据分发功能使其更易于操作,但 Apache Kafka API 的采用范围更广。

如果您计划在不同的本地或云服务提供商环境中使用独立的消息传递系统,则可以通过 Apache Kafka 托管服务为您的应用提供更一致的体验。这是因为您可以采用 Kafka 标准,并使用相同的 API 在每个环境中与 Kafka 服务进行通信。

虽然您当然可以将 Pub/Sub 用作所有环境中的中央消息传递系统,但请务必注意,它是一项具有自己 API 的独立服务。如果您需要与特定环境的消息传递系统进行交互,使用 Managed Service for Apache Kafka 可能会提供更统一的开发体验。

哪种服务适合您

如果在各种环境中提供一致的体验至关重要,请选择 Managed Service for Apache Kafka。如果您侧重于通过最少的配置来伸缩工作负载或实现跨区域数据传输,Pub/Sub 具有强大的优势。

如果您的要求符合以下因素,请选择 Pub/Sub:

  • 您会优先考虑在 Google Cloud中简化运维。

  • 您需要可伸缩且无服务器的解决方案,并且管理开销要尽可能低。

  • 您的工作负载大小不可预测或会发生变化。当工作负载吞吐量稳定时,Pub/Sub 也非常适用。

  • 您需要按消息进行处理跟踪,以最大限度地减少因单个错误消息而导致的流水线影响。Pub/Sub 内置了死信队列 (DLQ),并支持处理无序消息,因此即使遇到有问题的消息,您的系统也能保持正常运行。

  • 您需要进行区域间数据汇总。

  • 您需要独立伸缩发布端和订阅端。

如果您的要求符合以下条件,请选择 Managed Service for Apache Kafka:

  • 跨多个云服务提供商或本地环境的可移植性至关重要。

  • 您有现有的 Kafka 工作负载,想要将其迁移到Google Cloud。如需了解详情,请参阅根据现有 Kafka 设置进行选择

  • 您的流量稳定,没有太大变化。

  • 您愿意自行管理容量。

  • 您需要实现按键高吞吐量的消息排序。

  • 您希望使用事件日志作为可信来源的事件溯源模式。

根据现有的 Kafka 设置进行选择

如果您已在使用 Kafka,并且希望在 Google Cloud上获得安全可靠的托管解决方案,建议您选择 Managed Service for Apache Kafka。

如果您已经在运行 Kafka,并且愿意重写应用以获享可伸缩、可自动伸缩的全球服务的好处,我们建议您使用 Pub/Sub。如需从 Kafka 迁移到 Pub/Sub,请参阅从 Kafka 迁移到 Pub/Sub

对于新的工作负载或刚开始在 Google Cloud上进行流式传输的用户,建议使用 Pub/Sub,因为它易于使用。如果您希望尽可能减少代码更改,将现有 Kafka 工作负载迁移到云端,Managed Service for Apache Kafka 是理想之选。

与 Cloud 产品集成

Google Cloud Managed Service for Apache Kafka 和 Pub/Sub 均可与各种 Google Cloud 服务(例如 Dataflow、BigQuery、Cloud Storage 等)集成。

如果您需要制定多云端策略,并优先考虑跨不同云服务商实现可移植性,则 Managed Service for Apache Kafka 可为您提供更大的灵活性。这是因为与 Pub/Sub 相比,Kafka 可与 Google Cloud 之外的更多系统集成。

特性比较

如果前面几部分中的这些高级决策标准没有帮助,您可以根据特定功能支持做出选择。如需详细比较这两款产品,请参阅下表。

功能 Pub/Sub Managed Service for Apache Kafka
易用性 更易于设置和维护 需要更多运营工作
费用模型 按用量付费 按容量付费的计算

按使用量付费的网络和存储空间。

“正好一次”处理 支持单次同时传送和强确认语义。 支持从一个主题读取并向另一个主题写入时实现“正好一次”的副作用。
扩缩 可从每秒 KB 到每秒 GB 无缝自动伸缩每个主题,甚至适用于不可预测的工作负载。 需要手动配置
有序传送

在键中提供排序。

每个精细排序键的吞吐量为 1 MBps

在分区内提供排序功能。

每个分区的排序次数不超过分区的吞吐量容量。
数据保留 31 天 无限期保留
端到端延迟时间 端到端延迟时间通常为 100 毫秒左右 对于行为良好的订阅者,通常为 10 毫秒左右。
支持“提取并迁移”的开源 Kafka 兼容性
Identity and Access Management 及安全
自动网络配置
多云:在各个云中相同
正常运行时间服务等级协议 (SLA)
数据平面 SLA 目前不行
日志记录和监控
跨代理重新平衡分区 不适用
自动容量 Pub/Sub 会根据传入消息速率和订阅方需求动态调整容量。 该服务会管理底层基础架构,例如虚拟机和存储空间。您可以控制分区数和复制因子等方面。
存储空间自动管理
自动软件升级
客户服务
Kafka Connect 服务 不适用 使用用户提供的 Connect 服务
架构支持 使用用户提供的架构注册表
与 ks qIDB、KSQL 兼容
支持 OSS 连接器 适用于 Kafka 和 Flink 连接器
与数据湖和数据仓库集成