本文从稳定性、内核能力、治理能力以及使用习惯等方面,对比阿里云消息队列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版控制台
  • 消息队列Kafka版OpenAPI
  • Kafka CLI(默认不开启)
  • Kafka Manager(默认不开启)
  • 服务端自动创建(默认不开启)
  • Kafka CLI
  • Kafka Manager
  • 服务端自动创建
消息队列Kafka版默认通过阿里云控制台和OpenAPI管理Topic数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。
说明 如需开源方式创建Topic,需要提交工单申请开启。
命名规范 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在3~64个字符。 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在249个字符。 过长的资源命名可能导致在其他系统传输过程中受限制,因此消息队列Kafka版限制Topic长度。
删除方式
  • 消息队列Kafka版控制台
  • 消息队列Kafka版OpenAPI
  • Kafka CLI
  • Kafka Manager
消息队列Kafka版默认通过阿里云控制台和OpenAPI管理Topic数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。
说明 消息队列Kafka版暂不支持通过开源方式删除Topic。
Consumer Group
创建方式
  • 消息队列Kafka版控制台
  • 消息队列Kafka版OpenAPI
服务端自动创建 消息队列Kafka版默认通过阿里云控制台和OpenAPI管理Consumer Group数据,以实现细粒度的权限管控、资源操作审计、订阅组堆积告警监控等能力。
注意 如需开源方式创建Topic,需要提交工单申请开启。开启后则无法再使用上述功能。
命名规范 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在3~64个字符。 支持大小写字母、数字、下划线(_)、短划线(-)和英文句号(.),限定在249个字符。 过长的资源命名可能导致在其他系统传输过程中受限制,因此消息队列Kafka版限制Consumer Group的长度。
删除方式
  • 消息队列Kafka版控制台
  • 消息队列Kafka版OpenAPI
Kafka CLI 消息队列Kafka版默认通过阿里云控制台和OpenAPI管理Consumer Group数据,以实现细粒度的权限管控、资源操作审计等安全管控能力。
说明 消息队列Kafka版暂不支持通过开源方式删除Consumer Group。