-
Kafka单机实例的存储空间估算参考 Kafka实例支持多副本存储,存储空间用于存储消息(包括副本中的消息)、日志和元数据。您在创建Kafka实例,选择初始存储空间时,建议根据业务消息体积预估、副本数量以及预留磁盘大小选择合适的存储空间。每个Kafka代理会预留33GB的磁盘空间,用于存储日志和元数据。 例如:业务消息体积预估100GB,副本数为2,Kafka实例的代理数为1,则磁盘容量最少应为100GB*2+33GB*1=233GB。
-
Kafka单机实例规格 Kafka单机实例由一个代理组成,兼容开源Kafka 2.7版本,适用于测试场景,不建议用于生产业务。 TPS(Transaction per second),在Kafka场景中,指每秒能写入到Kafka实例的最大消息数量。下表中TPS性能,是指以1KB大小的消息为例的每秒处理消息条数。测试场景为连接内网访问明文接入、磁盘类型为超高I/O的实例。 表1 Kafka单机实例规格 规格名称 代理个数 单个代理TPS 单个代理分区上限 单个代理建议消费组数 单个代理客户端总连接数上限 存储空间范围(GB) 单个代理流量规格(MB/s) kafka.2u4g.single.small 1 20000 100 15 2000 100~10000 40 kafka.2u4g.single 1 30000 250 20 2000 100~10000 100
-
Kafka单机实例Topic数量计算 Kafka实例对Topic分区数之和设置了上限,当达到上限之后,用户无法继续创建Topic。 所以,Topic数量和实例分区数上限、每个Topic的分区数有关,其中,每个Topic分区数可在创建Topic时设置,实例分区数上限参考表1。 kafka.2u4g.single实例的分区数上限为250。 如果该实例下每个Topic的分区个数都为2,则Topic个数为250/2=125个。 如果该实例下每个Topic的分区个数都为1,则Topic个数为250/1=250个。
-
细粒度授权 使用自定义细粒度策略,请使用管理员用户登录
IAM 控制台,按需选择DMS的细粒度权限进行授权操作。DMS for Kafka细粒度权限依赖说明请参见表3。 表3 DMS for Kafka细粒度权限依赖说明 权限名称 权限描述 权限依赖 dms:instance:list 查看实例列表 无 dms:instance:get 查看实例详情信息 无 dms:instance:create 创建实例 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update vpc:ports:delete dms:instance:getBackgroundTask 查看实例后台任务详情 无 dms:instance:deleteBackgroundTask 删除实例后台任务 无 dms:instance:modifyStatus 重启实例 无 dms:instance:resetAuthInfo 重置实例访问密码 无 dms:instance:modifyAuthInfo 修改实例访问密码 无 dms:instance:modify 修改实例 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update vpc:ports:delete dms:instance:scale 实例开启扩容功能 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update dms:instance:delete 删除实例 无 dms:instance:connector 实例开启转储功能 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update vpc:ports:delete dms:instance:createConnectorSinkTask 创建转储任务 无 dms:instance:getConnectorSinkTask 查看转储任务详情 无 dms:instance:listConnectorSinkTask 查看转储任务列表 无 dms:instance:deleteConnectorSinkTask 删除转储任务 无
-
DMS for Kafka权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 DMS for Kafka部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问DMS for Kafka时,需要先切换至授权区域。 权限根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对DMS for Kafka服务,管理员能够控制IAM用户仅能对实例进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,DMS for Kafka支持的API授权项请参见细粒度策略支持的授权项。 如表1所示,包括了DMS for Kafka的所有系统权限。 表1 DMS for Kafka系统权限 系统角色/策略名称 描述 类别 依赖关系 DMS FullAccess 分布式消息服务管理员权限,拥有该权限的用户可以操作所有分布式消息服务的功能。 系统策略 无 DMS UserAccess 分布式消息服务普通用户权限(没有实例创建、修改、删除、扩容、转储)。 系统策略 无 DMS ReadOnlyAccess 分布式消息服务的只读权限,拥有该权限的用户仅能查看分布式消息服务数据。 系统策略 无 DMS VPCAccess 分布式消息服务租户委托时需要授权的VPC操作权限。 系统策略 无 DMS KMSAccess 分布式消息服务租户委托时需要授权的KMS操作权限。 系统策略 无 DMS ELBAccess 分布式消息服务租户委托时需要授权的ELB操作权限。 系统策略 无 DMS VPCEndpointAccess 分布式消息服务租户委托时需要授权的VPCEndpoint操作权限。 系统策略 无 DMSAgencyCheckAccessPolicy 分布式消息服务检查租户委托权限需要授权的IAM操作权限。 系统策略 无 DMS Administrator 分布式消息服务的管理员权限。 系统角色 依赖Tenant Guest和VPC Administrator。 系统策略有包含OBS授权项,由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的系统策略后,大概需要等待5分钟系统策略才能生效。 表2列出了DMS for Kafka常用操作与系统策略的授权关系,您可以参照该表选择合适的系统策略。 表2 常用操作与系统策略的关系 操作 DMS FullAccess DMS UserAccess DMS ReadOnlyAccess DMS VPCAccess DMS KMSAccess DMS ELBAccess DMS VPCEndpointAccess DMSAgencyCheckAccessPolicy 创建实例 √ × × × × × × × 修改实例 √ × × × × × × × 删除实例 √ × × × × × × × 变更实例规格 √ × × × × × × × 开启Smart Connect √ × × × × × × × 创建Smart Connect任务 √ √ × × × × × × 重启实例 √ √ × × × × × × 查询实例信息 √ √ √ × × × × ×
-
与RabbitMQ、RocketMQ的差异 表1 功能差异 功能项 RocketMQ Kafka RabbitMQ 优先级队列 不支持 不支持 3.x.x版本:支持。建议优先级大小设置在0-10之间。 AMQP-0-9-1版本:支持。优先级大小设置在1-9之间。 延迟队列 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 死信队列 支持 不支持 支持 消息重试 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 消费模式 支持客户端主动拉取和服务端推送两种方式。 客户端主动拉取。 支持客户端主动拉取和服务端推送两种模式。 广播消费 支持 支持 支持 消息回溯 支持 支持。Kafka支持按照offset和timestamp两种维度进行消息回溯。 3.x.x版本:不支持。RabbitMQ中消息一旦被确认消费就会被标记删除。 AMQP-0-9-1版本:支持。 消息堆积 支持 支持。考虑吞吐因素,Kafka的堆积效率比RabbitMQ总体上要高。 支持 持久化 支持 支持 支持 消息追踪 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 消息过滤 支持 支持 3.x.x版本:不支持,但可以自行封装。 AMQP-0-9-1版本:支持。 多租户 支持 支持 支持 多协议支持 兼容RocketMQ协议。 只支持Kafka自定义协议。 RabbitMQ基于AMQP协议实现。 跨语言支持 支持多语言的客户端。 采用Scala和Java编写,支持多种语言的客户端。 支持多种语言的客户端。 流量控制 RocketMQ 5.x支持基于实例规格的流量控制。 支持client、user和Topic级别,通过主动设置可将流控作用于生产者或消费者。 RabbitMQ的流控基于Credit-Based算法,是内部被动触发的保护机制,作用于生产者层面。 消息顺序性 单队列(queue)内有序。 支持单分区(partition)级别的顺序性。 单线程发送、单线程消费并且不采用延迟队列、优先级队列等一些高级功能时,才能实现消息有序。 安全机制 支持SSL认证。 支持SSL、SASL身份认证和读写权限控制。 3.x.x版本:支持SSL认证。 AMQP-0-9-1版本:支持ACL访问控制。 事务性消息 支持 支持 支持
-
Kafka实例规格参考 kafka.2u4g.cluster.small,三个代理 Kafka客户端连接数在6000以内,消费组个数在45个以内,业务TPS为60000以内时推荐选用。 kafka.2u4g.cluster,三个代理 Kafka客户端连接数在6000以内,消费组个数在60个以内,业务TPS为90000以内时推荐选用。 kafka.4u8g.cluster,三个代理 Kafka客户端连接数在12000以内,消费组个数在300个以内,业务TPS为300000以内时推荐选用。 kafka.8u16g.cluster,三个代理 Kafka客户端连接数在12000以内,消费组个数在450个以内,业务TPS为450000以内时推荐选用。 kafka.12u24g.cluster,三个代理 Kafka客户端连接数在12000以内,消费组个数在600个以内,业务TPS为600000以内时推荐选用。 kafka.16u32g.cluster,三个代理 Kafka客户端连接数在12000以内,消费组个数在600个以内,业务TPS为750000以内时推荐选用。
-
Kafka实例的存储空间估算参考 Kafka实例支持多副本存储,存储空间用于存储消息(包括副本中的消息)、日志和元数据。您在创建Kafka实例,选择初始存储空间时,建议根据业务消息体积预估、副本数量以及预留磁盘大小选择合适的存储空间。每个Kafka代理会预留33GB的磁盘空间,用于存储日志和元数据。 例如:业务消息体积预估100GB,副本数为2,Kafka实例的代理数为3,则磁盘容量最少应为100GB*2+33GB*3=299GB。 Kafka实例支持对存储进行扩容,根据业务增长,随时扩容,节约成本。
-
Kafka实例Topic数量计算 Kafka实例对Topic分区数之和设置了上限,当达到上限之后,用户无法继续创建Topic。 所以,Topic数量和实例分区数上限、每个Topic的分区数有关,其中,每个Topic分区数可在创建Topic时设置,实例分区数上限参考表1。 kafka.2u4g.cluster * 3 broker实例的分区数上限为750。 如果该实例下每个Topic的分区个数都为3,则Topic个数为750/3=250个。 如果该实例下每个Topic的分区个数都为1,则Topic个数为750/1=750个。
-
新老规格对应关系 2种Kafka实例规格对比,新老规格的对应关系如表2所示。 表2 Kafka实例新老规格对应关系 老规格 对应的新规格 规格类型 实例网络总流量 规格类型 实例网络总流量 100MB/s 100MB/s kafka.2u4g.cluster.small * 3 120MB/s 300MB/s 300MB/s kafka.2u4g.cluster * 3 300MB/s 600MB/s 600MB/s kafka.4u8g.cluster * 3 600MB/s 1200MB/s 1200MB/s kafka.4u8g.cluster * 6 1250MB/s 新老规格区别如下: 老规格使用的非独享资源,在高负载情况下容易出现资源抢占情况。新规格(kafka.2u4g.cluster.small除外)使用的独占资源,性能更优,性价比更高。 新规格支持最新的功能,例如:分区平衡、动态开启SSL、重平衡日志可观测等。 新规格支持规格灵活变更,例如:Broker规格的扩缩容。 新规格的磁盘大小选择更加灵活,磁盘大小不与实例规格进行绑定,仅与Broker数量相关。 新规格选择粒度更细,根据Broker规格和数量进行灵活的规格选择,并且最大规格可以达到10000MB/s以上。 新规格除了原有的磁盘类型,还支持通用型SSD、极速型SSD等多种磁盘类型,客户选择更加灵活。
-
Kafka集群实例规格 Kafka集群实例由三个及以上代理组成,兼容开源Kafka 1.1.0、2.7和3.x。 TPS(Transaction per second),在Kafka场景中,指每秒能写入到Kafka实例的最大消息数量。下表中TPS性能,是指以1KB大小的消息为例的每秒处理消息条数。测试场景为连接内网访问明文接入、磁盘类型为超高I/O的实例。如果您想要了解更多关于TPS的性能,请参考测试Kafka实例TPS。 表1 Kafka集群实例规格 规格名称 代理个数范围 单个代理TPS 单个代理分区上限 单个代理建议消费组数 单个代理客户端总连接数上限 存储空间范围(GB) 单个代理流量规格(MB/s) kafka.2u4g.cluster.small 3~30 20000 100 15 2000 300~300000 40 kafka.2u4g.cluster 3~30 30000 250 20 2000 300~300000 100 kafka.4u8g.cluster 3~30 100000 500 100 4000 300~600000 200 kafka.8u16g.cluster 3~50 150000 1000 150 4000 300~1500000 375 kafka.12u24g.cluster 3~50 200000 1500 200 4000 300~1500000 625 kafka.16u32g.cluster 3~50 250000 2000 200 4000 300~1500000 750
-
实例规格和网络带宽说明 Kafka实例的网络带宽主要由以下两个部分组成: 实例Broker对应的网络带宽 实例Broker的磁盘所对应的带宽值(不同类型的磁盘对应的带宽值不同,具体参考:如何选择磁盘类型) 注意事项: Kafka默认情况下测试均为尾读场景(即仅消费最新生产的数据),而不是冷读场景(即从头开始消费历史数据的场景)。 老规格实例(即实例规格为100MB/s等)的带宽指的是实例所有Broker对应的网络带宽总和 新规格实例(即实例规格为kafka.2u4g.cluster等)的流量规格测算模型说明如下: 测试模型读写比例为1:1 默认Topic的副本数为3 实例网络总流量 = 单个代理流量规格 * 代理数量 实例整体流量 = 业务流量 + 代理节点间数据复制流量 参考上述测算模型说明,假如当前规格为kafka.2u4g.cluster,单个代理流量规格为100MB/s,代理数量为3,实例网络总流量、最大读流量和最大写流量分别为多少? 实例网络总流量 = 单个代理流量规格 * 代理数量 = 100MB/s * 3 = 300MB/s 最大读流量 = 实例网络总流量 / 默认副本数 / 2 = 300MB/s / 3 / 2 = 50MB/s 最大写流量 = 实例网络总流量 / 默认副本数 / 2 = 300MB/s / 3 / 2 = 50MB/s
-
Topic 表2 Topic约束与限制 限制项 约束与限制 Topic总分区数 Topic总分区数和实例规格有关,具体请参考Kafka集群实例。 Kafka以分区为粒度管理消息,分区多导致生产、存储、消费都碎片化,影响性能稳定性。在使用过程中,当Topic的总分区数达到上限后,用户无法继续创建Topic。 单个Topic分区数 按照开源Kafka现有逻辑,单个Topic分区数只支持增加,不支持减少。 出于性能考虑,建议单个Topic的分区数设置为200以内。 Topic数量 Topic数量和Topic总分区数、每个Topic的分区数有关,具体请参考Kafka集群实例。 是否支持自动创建Topic 支持。开启自动创建Topic表示生产或消费一个未创建的Topic时,系统会自动创建此Topic,此Topic的默认参数值如下: 单机实例分区数为1,集群实例分区数为3。 单机实例副本数为1,集群实例副本数为3。 老化时间为72小时。 不开启同步复制和同步落盘。 消息时间戳类型为CreateTime。 批处理消息最大值为10485760字节。 集群实例如果在“配置参数”中修改“log.retention.hours”(老化时间)、“default.replication.factor”(副本数)或“num.partitions”(分区数)的参数值,此后自动创建的Topic参数值为修改后的参数值。单机实例不支持修改配置参数。 例如:“num.partitions”修改为“5”,自动创建的Topic参数值如下: 分区数为5。 副本数为3。 老化时间为72小时。 不开启同步复制和同步落盘。 消息时间戳类型为CreateTime。 批处理消息最大值为10485760字节。 同步复制 Topic副本数为1时,不能选择同步复制功能。 副本数 集群实例不建议使用单副本。实例节点出现故障的情况下,单副本Topic查询消息时可能会报“内部服务错误”,因此不建议使用单副本Topic。 老化时间 如果Topic已经设置了老化时间,此时“配置参数”中的log.retention.hours值将不对此Topic生效。仅在Topic中未设置老化时间时,“配置参数”中的log.retention.hours值才会对此Topic生效。 例如:Topic01设置的老化时间为60小时,“配置参数”中的log.retention.hours值为72小时,此时Topic01实际的老化时间为60小时。 批量导入/导出Topic 支持批量导出,不支持批量导入。 Topic名称 Topic名称开头包含特殊字符,例如#号“#”,会导致监控数据无法展示。 是否支持延迟队列 不支持 代理故障场景 实例中部分代理故障时,无法创建、修改和删除Topic,只能查询Topic。
-
消费组 表3 消费组约束与限制 限制项 约束与限制 是否需要创建消费组、消费者、生产者 “auto.create.groups.enable”为“true”时,不需要单独创建消费组、生产者和消费者,在使用时自动生成,实例创建后,直接使用即可。 “auto.create.groups.enable”为“false”时,需要手动创建消费组,不需要单独创建生产者和消费者。 重置消费进度 重置消费进度可能会导致重复消费。 消费组名称 消费组名称开头包含特殊字符,例如#号“#”,会导致监控数据无法展示。 代理故障场景 实例中部分代理故障时,无法创建、修改和删除消费组,以及重置消费进度,只能查询消费组。
-
实例 表1 实例约束与限制 限制项 约束与限制 Kafka ZooKeeper Kafka集群依赖ZooKeeper进行管理,开放ZooKeeper可能引发误操作导致业务受损,当前仅Kafka内部使用,不对外提供服务。 版本 当前服务端版本为1.1.0、2.7、3.x。实例创建后,服务端版本不支持升级。 兼容0.10以上的客户端版本,推荐使用和服务端一致的版本。 登录Kafka节点所在机器 不能登录。 存储空间 集群实例只支持扩大存储空间,不支持减小存储空间。 扩容存储空间有次数限制,最多扩容20次。 单机实例不支持修改存储空间。 基准带宽/代理数量 集群实例只支持增加基准带宽/代理数量,不支持减小基准带宽/代理数量。 单机实例不支持修改代理数量。 代理规格 集群实例支持扩容/缩容代理规格。 若Topic为单副本,扩容/缩容期间无法对该Topic生产消息或消费消息,会造成业务中断。 若Topic为多副本,扩容/缩容代理规格不会造成服务中断,但可能会导致消费的分区消息发生乱序,请谨慎评估业务影响,建议您在业务低峰期扩容/缩容。 扩容/缩容代理规格的过程中,节点滚动重启造成分区Leader切换,会发生秒级连接闪断,在用户网络环境稳定的前提下,Leader切换时长一般为1分钟以内。多副本的Topic需要在生产客户端配置重试机制。 若集群实例已创建的分区数总和大于待缩容规格的实例分区数上限,此时无法缩容。 单机实例不支持修改代理规格。 修改VPC/子网/可用区 实例创建后,不支持修改VPC/子网/可用区。 是否支持Kerberos认证 不支持 客户端单IP连接数 2020年7月以及之后购买的实例,Kafka实例的每个代理允许客户端单IP连接的个数默认为1000个,在此之前购买的实例,Kafka实例的每个代理允许客户端单IP连接的个数默认为200个,如果超过了,会出现连接失败问题。