云服务器内容精选

  • 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
  • 测试脚本 ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=${连接地址} acks=1 batch.size=16384 linger.ms=10 --topic ${Topic名称} --num-records 10000000 --record-size 1024 --throughput -1 --producer.config ../config/producer.properties bootstrap.servers:购买Kafka实例后,获取的Kafka实例的地址。 acks:消息主从同步策略,acks=1表示异步复制消息,acks=-1表示同步复制消息。 batch.size:每次批量发送消息的大小(单位为字节)。 linger.ms:两次发送时间间隔。 topic:创建Topic中设置的Topic名称。 num-records:总共需要发送的消息数。 record-size:每条消息的大小。 throughput:每秒发送的消息数。
  • 测试环境 进行TPS测试前,您需要先构建如下的测试环境: 购买如表1所示实例,购买步骤请参考购买Kafka实例。 表1 实例参数 名称 代理数量 规格 是否开启SASL 磁盘类型 kafka-01 3 kafka.2u4g.cluster 是 超高I/O kafka-02 3 kafka.4u8g.cluster 是 超高I/O kafka-03 3 kafka.8u16g.cluster 是 超高I/O kafka-04 3 kafka.12u24g.cluster 是 超高I/O kafka-05 3 kafka.16u32g.cluster 是 超高I/O kafka-06 3 kafka.2u4g.cluster 否 超高I/O kafka-07 3 kafka.4u8g.cluster 否 超高I/O kafka-08 3 kafka.8u16g.cluster 否 超高I/O kafka-09 3 kafka.12u24g.cluster 否 超高I/O kafka-10 3 kafka.16u32g.cluster 否 超高I/O kafka-11 3 kafka.2u4g.cluster 否 高I/O kafka-12 3 kafka.4u8g.cluster 否 高I/O kafka-13 3 kafka.8u16g.cluster 否 高I/O kafka-14 3 kafka.12u24g.cluster 否 高I/O kafka-15 3 kafka.16u32g.cluster 否 高I/O 购买完成后,在实例详情页获取Kafka实例的内网明文连接地址。 购买实例后,创建如表2所示Topic,创建步骤请参考创建Kafka Topic。 表2 Topic参数 名称 是否同步复制 是否同步落盘 副本数 分区数 topic-01 否 否 3 30 topic-02 是 否 3 30 topic-03 否 是 3 30 topic-04 否 否 3 3 topic-05 否 否 3 12 topic-06 否 否 3 100 获取测试工具。 获取Kafka命令行工具2.7.2版本。 购买客户端服务器。 购买1台E CS 服务器(区域、可用区、虚拟私有云、子网、安全组与Kafka实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。 购买完成ECS后,需要在ECS中完成以下配置: 安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载Kafka命令行工具2.7.2版本,并解压。 tar -zxf kafka_2.12-2.7.2.tgz
  • 准备实例依赖资源 创建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。
  • 连接Kafka网络要求 客户端可以通过公网连接Kafka实例,也可以通过内网连接Kafka实例。使用内网连接时,注意以下几点: 如果客户端和Kafka实例部署在同一个VPC内,网络默认互通。 如果客户端和Kafka实例部署在不同VPC中,由于VPC之间逻辑隔离,客户端和Kafka实例不能直接通信,需要打通VPC之间的网络。 客户端连接Kafka实例的方式如表1所示。 表1 连接方式说明 连接方式 实现方式 参考文档 公网连接 客户端通过IPv4地址访问Kafka实例:在Kafka控制台开启公网访问,配置弹性公网IP,客户端通过弹性公网IP访问Kafka实例。 客户端通过IPv6地址访问Kafka实例:在Kafka控制台开启IPv6功能,将IPv6地址加入到共享带宽中,实现客户端通过公网访问Kafka实例。 配置Kafka实例的公网访问 使用DNAT通过端口映射方式,实现客户端通过公网连接Kafka实例。 使用DNAT实现公网访问Kafka 内网连接 客户端和Kafka实例部署在同一个VPC中,此时网络默认互通。 - 客户端和Kafka实例部署在同一个Region的不同VPC中,利用 VPC终端节点 在不同VPC间建立跨VPC的连接通道,实现跨VPC访问。 使用VPCEP实现跨VPC访问Kafka 客户端和Kafka实例部署在同一个Region的不同VPC中,利用VPC对等连接将两个VPC间的网络打通,实现跨VPC访问。 对等连接 客户端连接Kafka实例前,需要放通如下安全组,否则会连接失败。 创建安全组后,系统默认添加入方向“允许安全组内的弹性云服务器彼此通信”规则和出方向“放通全部流量”规则,此时使用内网通过同一个VPC访问Kafka实例,无需添加表2的规则。 表2 安全组规则 方向 协议 类型 端口 源地址 说明 入方向 TCP IPv4 9094 0.0.0.0/0 通过公网访问Kafka实例(明文接入)。 入方向 TCP IPv4 9092 0.0.0.0/0 使用内网通过同一个VPC访问Kafka实例(明文接入)。 使用对等连接跨VPC访问Kafka实例(明文接入)。 入方向 TCP IPv6 9192 ::/0 通过IPv6地址访问Kafka实例(关闭SSL加密)(内网和公网都适用)。 入方向 TCP IPv4 9095 0.0.0.0/0 通过公网访问Kafka实例(密文接入)。 入方向 TCP IPv4 9093 0.0.0.0/0 使用内网通过同一个VPC访问Kafka实例(密文接入)。 使用对等连接跨VPC访问Kafka实例(密文接入)。 入方向 TCP IPv6 9193 ::/0 通过IPv6地址访问Kafka实例(开启SSL加密)(内网和公网都适用)。 入方向 TCP IPv4 9011 198.19.128.0/17 通过VPC终端节点实现跨VPC访问Kafka实例(密文接入和明文接入都适用)。 入方向 TCP IPv4 9011 0.0.0.0/0 使用DNAT访问Kafka实例(密文接入和明文接入都适用)。 父主题: 配置Kafka网络连接
  • 步骤五:验证接口连通性 参考使用客户端连接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终端节点需要放通此网段。
  • 带宽限制值估算方法 带宽限制值受分区平衡任务执行时间、分区副本Leader/Follower分布情况以及消息生产速率等因素影响,具体分析如下。 带宽限制值作用范围为整个Broker,对该Broker内所有副本同步的分区进行带宽限流。 带宽限制会将分区平衡后新增的副本视为Follower副本限流,分区平衡前的Leader副本视为Leader副本限流,Leader副本的限流和Follower副本限流分开计算。 带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,因此两者的流量都会被限流统计。 假设分区平衡任务需要在200s内完成,每个副本的数据量为100MB,在以下几种场景中,估算带宽限制值。 场景一:Topic1有2分区2副本,Topic2有1分区1副本,所有Leader副本在同一个Broker上,Topic1和Topic2分别需要新增1个副本 表3 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1 Topic1 1 0 0,2 Topic2 0 0 0 表4 分区平衡后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上,Topic1和Topic2分别需要新增1个副本 表5 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0 Topic1 1 1 1 Topic2 0 1 1 Topic2 1 2 2 表6 分区平衡后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实例规格对比当前实例负载情况,评估是否可以进行分区平衡,建议预留足够的带宽进行分区平衡,CPU使用率在90%以上时,不建议进行分区平衡。Topic的数据量和CPU使用率可以通过监控页面的“队列数据容量”和“CPU使用率”查看,具体步骤请参考查看Kafka监控数据。 带宽限制是指设定Topic进行副本同步的带宽上限,确保不会对该实例上的其他Topic造成流量冲击。但需要注意,带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,如果带宽限制设定过小,可能会影响正常的生产消息,且可能会造成分区平衡一直无法结束。如果分区平衡一直无法结束,请联系客服处理。 分区平衡任务启动后,不能删除正在进行分区平衡的Topic,否则会导致分区平衡任务无法结束。 分区平衡任务启动后,无法修改Topic的分区数。 分区平衡任务启动后,无法手动停止任务,需要等到任务完成。 已设置了一个定时分区平衡任务,在此任务未执行前,无法对本实例内的任何Topic执行其他分区平衡任务。 分区平衡后Topic的metadata会改变,如果生产者不支持重试机制,会有少量的请求失败,导致部分消息生产失败。 数据量大的Topic进行分区平衡的时间会比较长,建议根据Topic的消费情况,适当调小Topic老化时间,使得Topic的部分历史数据被及时清理,加快迁移速度。Topic的数据量可以通过监控页面的“队列数据容量”查看,具体步骤请参考查看Kafka监控数据。
  • 修改定时分区平衡任务 在“后台任务管理”页面的“定时任务”页签中,单击页面左上角下拉框,选择时间段,在搜索对话框中输入待修改定时分区平衡任务的Topic名称,按“Enter”,实现快速查找定时分区平衡任务。 图5 查找定时分区平衡任务 在待修改的定时分区平衡任务后,单击“修改”。 在弹出的“修改定时任务”对话框中,您可以修改定时分区平衡任务的时间,还可以取消定时分区平衡任务,具体操作如下。 修改定时分区平衡任务的时间:修改时间,单击“确定”。 取消定时分区平衡任务:选择“取消”,如图6所示,单击“确定”。 图6 取消定时分区平衡任务
  • 分区平衡前的准备工作 在不影响业务的前提下,适当调小Topic老化时间并等待消息老化,减少迁移数据,加快迁移速度,分区平衡任务结束后可重新调整为初始值。修改Topic老化时间的步骤,请参考修改Kafka消息老化时间。 确保分区平衡的目标Broker磁盘容量充足,在磁盘存储统计中查看每个Broker的可用磁盘容量。如果目标Broker磁盘剩余容量接近分区平衡迁移到该Broker上的数据量,为了给目标Broker上的消息生产预留存储空间,应先进行磁盘扩容,再进行分区平衡。