本文档将指导您在 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 的应用范围更广。
如果您计划在不同的本地或云提供商环境中独立使用消息传递系统,那么 Managed Service for 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:
跨多个云服务提供商或本地环境的可移植性至关重要。
您有想要迁移到Google Cloud的现有 Kafka 工作负载。如需了解详情,请参阅根据现有的 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 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 连接器 | 否 |
| 与数据湖和数据仓库集成 | 是 | 是 |