本文从稳定性、内核能力、治理能力以及使用习惯等方面,对比阿里云云消息队列 Kafka 版与开源Apache Kafka。
稳定性
项目  | 云消息队列 Kafka 版  | Apache Kafka  | 
磁盘水位  | 磁盘写满删除旧数据。  | 磁盘写满直接宕机。  | 
线程池隔离  | 读冷数据仍可以保证写入基本正常。  | 读冷数据直接导致线程堵塞,数据写入大量失败。  | 
分区规模  | 万级分区仍然可以保证稳定写入。  | 千级分区就会出现大量抖动。  | 
巡检系统  | 针对死锁、宕机等问题进行自动发现和修复。  | 无。  | 
Bug修复  | 及时发现并修复。  | 只能等社区缓慢修复,且通常要等新版发布,周期长。  | 
内核能力
项目  | 云消息队列 Kafka 版  | Apache Kafka  | 
弹性能力  | 秒级弹缩,业务几乎无感知。  | 小时级弹缩,期间会因为复制流量加大,对集群造成影响。  | 
存储成本  | 专业版提供高可靠云存储,节省大量存储空间。  | 出于可用性和可靠性考虑,业界通常都是3副本存储,存储压力大。  | 
治理能力
项目  | 云消息队列 Kafka 版  | Apache Kafka  | 
版本升级  | 一键自助升级。  | 手工操作易出错。  | 
Metrics曲线  | 能看到完整Metrics曲线,追踪流量、排查问题必备。  | 只能看到实时Metrics,历史数据较难查看。  | 
堆积告警  | 告警及时发现问题。  | 无。  | 
订阅关系  | 完整的订阅关系。  | 比较简略。  | 
分区状态  | 可以看到完整的状态图。  | 比较简略。  | 
发送消息  | 控制台直接发送消息。  | 只能命令行操作,成本高。  | 
查询消息  | 控制台根据时间或者位点直接查看消息。  | 命令行可以消费,但无法根据位点或者时间直接定位到具体的消息。  | 
使用习惯
云消息队列 Kafka 版在客户端协议层面和开源Apache Kafka完全一致,因此基于开源版本开发的应用和代码可以无缝迁移到云消息队列 Kafka 版。在通信协议完全兼容的前提下,为了提供更丰富的消息管控和治理功能,云消息队列 Kafka 版会对使用习惯作出一些限制,具体说明如下。
项目  | 云消息队列 Kafka 版  | Apache Kafka  | 差异原因  | 
Topic  | |||
创建方式  | 
  | 
  | 云消息队列 Kafka 版默认通过阿里云控制台和OpenAPI管理Topic数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。 说明  
  | 
命名规范  | 
  | 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在3~249个字符。  | 过长的资源命名可能导致在其他系统传输过程中受限制,因此云消息队列 Kafka 版限制Topic长度。  | 
删除方式  | 
  | 
  | 云消息队列 Kafka 版默认通过阿里云控制台和OpenAPI管理Topic数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。 说明  云消息队列 Kafka 版暂不支持通过开源方式删除Topic。  | 
Group  | |||
创建方式  | 
  | 服务端自动创建  | 云消息队列 Kafka 版默认通过阿里云控制台和OpenAPI管理Group数据,以实现细粒度的权限管控、资源操作审计、订阅组堆积告警监控等能力。 重要  如需开源方式创建Group,请参见自由使用Group。开启后则无法再使用上述功能。  | 
命名规范  | 
  | 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在3~249个字符。  | 过长的资源命名可能导致在其他系统传输过程中受限制,因此云消息队列 Kafka 版限制Group的长度。  | 
删除方式  | 
  | Kafka CLI  | 云消息队列 Kafka 版默认通过阿里云控制台和OpenAPI管理Group数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。 说明  云消息队列 Kafka 版暂不支持通过Kafka CLI删除Group。  |