本文从稳定性、内核能力、治理能力以及使用习惯等方面,对比阿里云云消息队列 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。 |