云服务器内容精选

  • 准备实例依赖资源 创建Kafka实例前,请提前准备好如表1所示资源。 表1 Kafka实例依赖资源 资源名称 要求 创建指导 VPC和子网 Kafka实例可以使用当前账号下已创建的VPC和子网,也可以使用新创建的VPC和子网,还可以使用共享VPC和子网,请根据实际需要进行配置。 共享VPC是基于 资源访问管理 (Resource Access Manager,简称 RAM )服务的机制,VPC的所有者可以将VPC内的子网共享给一个或者多个账号使用。通过共享VPC功能,可以简化网络配置,帮助您统一配置和运维多个账号下的资源,有助于提升资源的管控效率,降低运维成本。有关VPC子网共享的更多信息,请参见共享VPC。 在创建VPC和子网时应注意:创建的VPC与Kafka实例在相同的区域。 在创建VPC和子网时应注意: 创建的VPC与Kafka实例在相同的区域。 子网开启IPv6后,Kafka实例支持IPv6功能。Kafka实例开启IPv6后,客户端可以使用IPv6地址连接实例。 创建VPC和子网的操作指导请参考创建虚拟私有云和子网,若需要在已有VPC上创建和使用新的子网,请参考为虚拟私有云创建新的子网。 安全组 不同的Kafka实例可以重复使用相同的安全组,也可以使用不同的安全组,请根据实际需要进行配置。 连接Kafka实例前,请根据连接方式配置对应的安全组,具体请参考表2。 创建安全组的操作指导请参考创建安全组,为安全组添加规则的操作指导请参考添加安全组规则。 弹性IP地址 如果客户端使用公网连接Kafka实例,请提前创建弹性IP地址。 在创建弹性IP地址时,应注意如下要求: 创建的弹性IP地址与Kafka实例在相同的区域。 弹性IP地址的数量必须与Kafka实例的代理个数相同。 Kafka控制台无法识别开启IPv6转换功能的弹性IP地址。 创建弹性IP地址的操作指导请参考申请弹性公网IP。
  • 变更实例规格的影响 变更实例规格的时长和代理数量有关,单个代理的变更时长一般在5~10分钟,代理数量越多,规格变更时间越长。 表2 变更实例规格的影响 变更配置类型 影响 基准带宽/代理数量 扩容基准带宽/代理数量不会影响原来的代理,业务也不受影响。 扩容基准带宽/代理数量时,系统会根据当前磁盘大小进行相应比例的存储空间扩容。例如扩容前实例的代理数为3,每个代理的磁盘大小为200GB,扩容后实例的代理数为10,此时代理的磁盘大小依旧为200GB,但是总磁盘大小为2000GB。 新创建的Topic才会分布在新代理上,原有Topic还分布在原有代理上,造成分区分布不均匀。通过修改分区平衡,实现将原有Topic分区的副本迁移到新代理上。 存储空间 扩容存储空间有次数限制,只能扩容20次。 扩容存储空间不会影响业务。 代理规格 若Topic为单副本,扩容/缩容期间无法对该Topic生产消息或消费消息,会造成业务中断。 若Topic为多副本,扩容/缩容代理规格不会造成服务中断,但可能会导致消费的分区消息发生乱序,请谨慎评估业务影响,建议您在业务低峰期扩容/缩容。 扩容/缩容代理规格的过程中,节点滚动重启造成分区Leader切换,会发生秒级连接闪断,在用户网络环境稳定的前提下,Leader切换时长一般为1分钟以内。多副本的Topic需要在生产客户端配置重试机制,方法如下: 生产客户端为Kafka开源客户端时,检查是否配置retries参数,建议此参数值设置为3~5。 生产客户端为Flink客户端时,检查是否配置重启策略,配置重启策略可以参考如下代码。 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, Time.seconds(20))); 若实例已创建的分区数总和大于待缩容规格的实例分区数上限,此时无法缩容。不同规格配置的实例分区数上限不同,具体请参见产品规格。 例如:kafka.4u8g.cluster*3的实例,已创建800个分区,您想把此实例的规格缩容为kafka.2u4g.cluster*3,kafka.2u4g.cluster*3规格的实例分区数上限为750,此时无法缩容。
  • 操作影响 对数据量大的Topic进行分区平衡,会占用大量的网络和存储带宽,业务可能会出现请求超时或者时延增大,建议在业务低峰期时操作。对Topic进行分区平衡前,根据Kafka实例规格对比当前实例负载情况,评估是否可以进行分区平衡,建议预留足够的带宽进行分区平衡,CPU使用率在90%以上时,不建议进行分区平衡。Topic的数据量和CPU使用率可以通过监控页面的“队列数据容量”和“CPU使用率”查看,具体步骤请参考查看Kafka监控数据。 带宽限制是指设定Topic进行副本同步的带宽上限,确保不会对该实例上的其他Topic造成流量冲击。但需要注意,带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,如果带宽限制设定过小,可能会影响正常的生产消息,且可能会造成分区平衡一直无法结束。如果分区平衡一直无法结束,请联系客服处理。 分区平衡任务启动后,不能删除正在进行分区平衡的Topic,否则会导致分区平衡任务无法结束。 分区平衡任务启动后,无法修改Topic的分区数。 分区平衡任务启动后,无法手动停止任务,需要等到任务完成。 已设置了一个定时分区平衡任务,在此任务未执行前,无法对本实例内的任何Topic执行其他分区平衡任务。 分区平衡后Topic的metadata会改变,如果生产者不支持重试机制,会有少量的请求失败,导致部分消息生产失败。 数据量大的Topic进行分区平衡的时间会比较长,建议根据Topic的消费情况,适当调小Topic老化时间,使得Topic的部分历史数据被及时清理,加快迁移速度。Topic的数据量可以通过监控页面的“队列数据容量”查看,具体步骤请参考查看Kafka监控数据。
  • 修改定时分区平衡任务 在“后台任务管理”页面的“定时任务”页签中,单击页面左上角下拉框,选择时间段,在搜索对话框中输入待修改定时分区平衡任务的Topic名称,按“Enter”,实现快速查找定时分区平衡任务。 图5 查找定时分区平衡任务 在待修改的定时分区平衡任务后,单击“修改”。 在弹出的“修改定时任务”对话框中,您可以修改定时分区平衡任务的时间,还可以取消定时分区平衡任务,具体操作如下。 修改定时分区平衡任务的时间:修改时间,单击“确定”。 取消定时分区平衡任务:选择“取消”,如图6所示,单击“确定”。 图6 取消定时分区平衡任务
  • 带宽限制值估算方法 带宽限制值受分区平衡任务执行时间、分区副本Leader/Follower分布情况以及消息生产速率等因素影响,具体分析如下。 带宽限制值作用范围为整个Broker,对该Broker内所有副本同步的分区进行带宽限流。 带宽限制会将分区平衡后新增的副本视为Follower副本限流,分区平衡前的Leader副本视为Leader副本限流,Leader副本的限流和Follower副本限流分开计算。 带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,因此两者的流量都会被限流统计。 假设分区平衡任务需要在200s内完成,每个副本的数据量为100MB,在以下几种场景中,估算带宽限制值。 场景一:Topic1有2分区2副本,Topic2有1分区1副本,所有Leader副本在同一个Broker上,如表4所示,Topic1和Topic2分别需要新增1个副本,如表5所示。 表4 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1 Topic1 1 0 0,2 Topic2 0 0 0 表5 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1,2 Topic1 1 0 0,1,2 Topic2 0 0 0,2 图7 场景一分区平衡图 如图7所示,有3个副本需要从Broker 0拉取数据,Broker 0中每个副本的数据量为100MB,Broker 0中只有Leader副本,Broker 1和Broker 2中只有Follower副本,由此得出以下数据: Broker 0在200s内完成分区平衡所需的带宽限制值=(100+100+100)/200=1.5MB/s Broker 1在200s内完成分区平衡所需的带宽限制值=100/200=0.5MB/s Broker 2在200s内完成分区平衡所需的带宽限制值=(100+100)/200=1MB/s 综上所述,若想要在200s内完成分区平衡任务,带宽限制值应设为大于等于1.5MB/s。由于控制台的带宽限制只能是整数,因此带宽限制值应设为大于等于2MB/s。 场景二:Topic1有2分区1副本,Topic2有2分区1副本,Leader副本分布在不同Broker上,如表6所示,Topic1和Topic2分别需要新增1个副本,如表7所示。 表6 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0 Topic1 1 1 1 Topic2 0 1 1 Topic2 1 2 2 表7 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,2 Topic1 1 1 1,2 Topic2 0 1 1,2 Topic2 1 2 2,0 图8 场景二分区平衡图
  • 分区平衡前的准备工作 在不影响业务的前提下,适当调小Topic老化时间并等待消息老化,减少迁移数据,加快迁移速度,分区平衡任务结束后可重新调整为初始值。修改Topic老化时间的步骤,请参考修改Kafka消息老化时间。 确保分区平衡的目标Broker磁盘容量充足,在磁盘存储统计中查看每个Broker的可用磁盘容量。如果目标Broker磁盘剩余容量接近分区平衡迁移到该Broker上的数据量,为了给目标Broker上的消息生产预留存储空间,应先进行磁盘扩容,再进行分区平衡。
  • 查看消费者连接地址(Kafka Manager) 登录Kafka Manager。 单击“kafka_cluster”,进入集群详情页。 在顶部导航栏单击“Consumers”,进入消费组列表页面。 图2 导航栏 单击待查看消费者连接地址的消费组名称,进入消费组订阅的Topic列表页面。 图3 消费组列表页面 单击待查看消费者连接地址的Topic名称,进入Topic详情页。 图4 消费组订阅的Topic列表页面 在“Consumer Instance Owner”中,查看消费者连接地址。 图5 Topic详情页
  • 约束与限制 如果“allow.everyone.if.no.acl.found”设置为“true”,且Topic未授权任何用户,此时所有的用户都可以订阅/发布此Topic。如果Topic已授权某一个或多个用户,此时只有授权的用户可以订阅/发布此Topic,其他未授权的用户不能订阅/发布此Topic。“allow.everyone.if.no.acl.found”在配置参数中修改。 如果“allow.everyone.if.no.acl.found”设置为“false”,此时只有授权的用户可以订阅/发布此Topic,其他未授权的用户不能订阅/发布此Topic。“allow.everyone.if.no.acl.found”在配置参数中修改。 如果Topic同时设置了“默认用户”权限和单个用户权限,取两者的并集。
  • 步骤五:验证接口连通性 参考使用客户端连接Kafka(关闭SASL)或者使用客户端连接Kafka(开启SASL),测试是否可以生产和消费消息。 测试接口连通性时,注意以下几点: 连接Kafka实例的地址为“advertised.listeners IP:9011”,以图8为例,连接Kafka实例的地址为“192.168.0.71:9011,192.168.0.11:9011,192.168.0.21:9011”。 在Kafka实例安全组的入方向规则中放通9011端口,以及198.19.128.0/17网段的地址。 如果Kafka实例的子网配置了网络ACL功能,需要在网络ACL的入方向规则中放通198.19.128.0/17网段的地址,以及 VPC终端节点 涉及的子网。 198.19.128.0/17是为VPC终端节点分配的网段,使用VPC终端节点需要放通此网段。
  • Smart Connect监控指标 表5 Smart Connect支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) kafka_wait_synchronize_data 待同步Kafka数据量 Kafka任务的待同步数据量。 单位:Count ≥ 0 Kafka实例的Smart Connect任务 1分钟 kafka_synchronize_rate Kafka每分钟同步数据量 Kafka任务每分钟同步的数据量。 单位:Count ≥ 0 Kafka实例的Smart Connect任务 1分钟 task_status 任务状态 当前任务状态。 0:任务异常 1:任务正常 Kafka实例的Smart Connect任务 1分钟 message_delay 消息时延 消息到达源端的时间与到达目标端的时间之差。 单位:ms ≥ 0 Kafka实例的Smart Connect任务 1分钟 Kafka双向数据复制的Smart Connect任务在监控中会被拆分为2个任务,分别为“Smart Connect任务名_source_0”和“Smart Connect任务名_source_1”。 如果Topic中的消息在进行下一次数据同步前,已经全部老化,此时实际是没有待同步的Kafka数据,但是Kafka数据同步监控指标使用的是包含老化数据的offset值,“待同步Kafka数据量”会显示老化的消息数。
  • 维度 Key Value kafka_instance_id Kafka实例 kafka_broker Kafka实例节点 kafka_topics Kafka实例主题 kafka_partitions Kafka实例分区 kafka_groups-partitions Kafka实例分区的消费组 kafka_groups_topics Kafka实例队列的消费组 kafka_groups Kafka实例的消费组 connector_task Kafka实例的Smart Connect任务
  • 实例监控指标 表1 实例支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) current_partitions 分区数 该指标用于统计Kafka实例中已经使用的分区数量。 单位:Count 0~100000 Kafka实例 1分钟 current_topics 主题数 该指标用于统计Kafka实例中已经创建的主题数量。 单位:Count 0~100000 Kafka实例 1分钟 group_msgs 堆积消息数 该指标用于统计Kafka实例中所有消费组中总堆积消息数。 单位:Count 0~1000000000 Kafka实例 1分钟
  • 消费组监控指标 表4 消费组支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) messages_consumed 分区已消费消息数 该指标用于统计当前消费组已经消费的消息个数。 单位:Count 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“分区监控”时,才包含该指标。 ≥ 0 Kafka实例的消费组 1分钟 messages_remained 分区可消费消息数 该指标用于统计消费组可消费的消息个数。 单位:Count 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“分区监控”时,才包含该指标。 ≥ 0 Kafka实例的消费组 1分钟 topic_messages_remained 队列可消费消息数 该指标用于统计消费组指定队列可以消费的消息个数。 单位:个 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“基本监控”时,才包含该指标。 0~(263-1) Kafka实例的消费组 1分钟 topic_messages_consumed 队列已消费消息数 该指标用于统计消费组指定队列当前已经消费的消息数。 单位:个 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“基本监控”时,才包含该指标。 0~(263-1) Kafka实例的消费组 1分钟 consumer_messages_remained 消息堆积数(消费组可消费消息数) 该指标用于统计消费组剩余可以消费的消息个数。 单位:个 说明: 在“消费组”页签,“主题”为“全部队列”时,才包含该指标。 0~(263-1) Kafka实例的消费组 1分钟 consumer_messages_consumed 消费组已消费消息数 该指标用于统计消费组当前已经消费的消息数。 单位:个 说明: 在“消费组”页签,“主题”为“全部队列”时,才包含该指标。 0~(263-1) Kafka实例的消费组 1分钟 messages_consumed_per_min 分区消费速率 统计消费组指定队列分区每分钟的消费数。 单位:个/分钟 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“分区监控”时,才包含该指标。 部分存量实例不支持此监控,具体以控制台为准。 0~30000000 Kafka实例的消费组 1分钟 topic_messages_consumed_per_min 队列消费速率 统计消费组指定队列每分钟的消费数。 单位:个/分钟 说明: 在“消费组”页签,“主题”为指定的Topic名称,“监控类型”为“基本监控”时,才包含该指标。 部分存量实例不支持此监控,具体以控制台为准。 0~30000000 Kafka实例的消费组 1分钟 consumer_messages_consumed_per_min 消费组消费速率 统计消费组每分钟的消费数。 单位:个/分钟 说明: 在“消费组”页签,“主题”为“全部Topic”时,才包含该指标。 部分存量实例不支持此监控,具体以控制台为准。 0~30000000 Kafka实例的消费组 1分钟
  • 主题监控指标 表3 主题支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) topic_bytes_in_rate 生产流量 该指标用于统计每秒生产的字节数。 单位:Byte/s、KB/s、MB/s、GB/s 说明: 在“主题”页签,当“监控类型”为“基本监控”时,才包含该指标。 0~500000000 Kafka实例队列 1分钟 topic_bytes_out_rate 消费流量 该指标用于统计每秒消费的字节数。 单位:Byte/s、KB/s、MB/s、GB/s 说明: 在“主题”页签,当“监控类型”为“基本监控”时,才包含该指标。 0~500000000 Kafka实例队列 1分钟 topic_data_size 队列数据容量 该指标用于统计队列当前的消息数据大小。 单位:Byte、KB、MB、GB、TB、PB 说明: 在“主题”页签,当“监控类型”为“基本监控”时,才包含该指标。 0~5000000000000 Kafka实例队列 1分钟 topic_messages 队列消息总数 该指标用于统计队列当前的消息总数。 单位:Count 说明: 在“主题”页签,当“监控类型”为“基本监控”时,才包含该指标。 ≥ 0 Kafka实例队列 1分钟 topic_messages_in_rate 消息生产速率 该指标用于统计每秒生产的消息数量。 单位:Count/s 说明: 在“主题”页签,当“监控类型”为“基本监控”时,才包含该指标。 0~500000 Kafka实例队列 1分钟 partition_messages 分区消息数 该指标用于统计分区中当前的消息个数。 单位:Count 说明: 在“主题”页签,当“监控类型”为“分区监控”时,才包含该指标。 ≥ 0 Kafka实例队列 1分钟 produced_messages 生产消息数 该指标用于统计目前生产的消息总数。 单位:Count 说明: 在“主题”页签,当“监控类型”为“分区监控”时,才包含该指标。 ≥ 0 Kafka实例队列 1分钟
  • 测试结果 测试场景一(实例是否开启SASL):相同的Topic(30分区、3副本、异步复制、异步落盘),实例分为开启SASL和未开启SASL,测试结果如下: 表3 测试结果 实例规格 磁盘类型 代理数量 TPS(开启SASL) TPS(未开启SASL) kafka.2u4g.cluster 超高I/O 3 100000 280000 kafka.4u8g.cluster 超高I/O 3 170000 496000 kafka.8u16g.cluster 超高I/O 3 200000‬ 730000 kafka.12u24g.cluster 超高I/O 3 320000 790000 kafka.16u32g.cluster 超高I/O 3 360000 1000000 测试场景二(同步/异步复制):相同的实例(超高I/O、3个代理、未开启SASL),不同复制机制的Topic,生产者进程数为3时,测试结果如下: 表4 测试结果 实例规格 是否同步落盘 副本数 分区数 TPS(同步复制) TPS(异步复制) kafka.2u4g.cluster 否 3 30 100000 280000 kafka.4u8g.cluster 否 3 30 230000 496000 kafka.8u16g.cluster 否 3 30 342000 730000 kafka.12u24g.cluster 否 3 30 383000 790000 kafka.16u32g.cluster 否 3 30 485000 1000000 测试场景三(是否同步落盘):相同的实例(超高I/O、3个代理、未开启SASL),不同落盘机制的Topic,测试结果如下: 表5 测试结果 实例规格 是否同步复制 副本数 分区数 TPS(同步落盘) TPS(异步落盘) kafka.2u4g.cluster 否 3 30 30000 280000 kafka.4u8g.cluster 否 3 30 32500 496000 kafka.8u16g.cluster 否 3 30 36100 730000 kafka.12u24g.cluster 否 3 30 37400 790000 kafka.16u32g.cluster 否 3 30 40400 1000000 测试场景四(不同磁盘类型):相同的Topic(30分区、3副本、异步复制、异步落盘),不同磁盘类型的实例,测试结果如下: 表6 测试结果 实例规格 代理数量 是否开启SASL TPS(高I/O) TPS(超高I/O) kafka.2u4g.cluster 3 否 110000 250000 kafka.4u8g.cluster 3 否 135000 380000 kafka.8u16g.cluster 3 否 213000 480000 kafka.12u24g.cluster 3 否 240000 577000 kafka.16u32g.cluster 3 否 280000 840000 测试场景五(不同分区数):相同的实例(超高I/O、3个代理、未开启SASL),不同分区数的Topic,测试结果如下: 表7 测试结果 实例规格 是否同步落盘 是否同步复制 副本数 TPS(3分区) TPS(12分区) TPS(100分区) kafka.2u4g.cluster 否 否 3 250000 260000 250000 kafka.4u8g.cluster 否 否 3 330000 280000 260000 kafka.8u16g.cluster 否 否 3 480000 410000 340000 kafka.12u24g.cluster 否 否 3 570000 750000 520000 kafka.16u32g.cluster 否 否 3 840000 1000000 630000