云服务器内容精选

  • 计费示例 以包年/包月计费模式为例,假设您于2023/03/08 15:50:04在“华北-北京四”区域购买了一个包年/包月Kafka实例(规格:kafka.2u4g.cluster*3,总存储空间:超高I/O 300GB),计费资源包括实例费用(代理规格和代理数量),以及存储空间费用(超高I/O 300GB)。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59 图1给出了上述示例配置的费用计算过程。图中价格仅供参考,实际计算请以分布式消息服务Kafka版价格详情中的价格为准。 图1 包年/包月Kafka实例费用计算示例(华北-北京四区域) 按需计费模式下,各计费项的计费示例请参见计费示例。
  • 计费说明 分布式消息服务Kafka版的计费项由实例费用和存储空间费用组成。具体内容如表1所示。 如您需要快速了解分布式消息服务Kafka版的具体价格,请参见分布式消息服务Kafka版价格详情。 表1 分布式消息服务Kafka版计费项 计费项 计费项说明 适用的计费模式 计费公式 实例费用 计费因子:代理规格和代理数量 如果开启Smart Connect,实例需要另外收取用于Smart Connect的代理费用。 说明: 实例费用在账单中显示的产品名称为“分布式消息服务专享版”。 包年/包月、按需计费 实例规格单价 * 购买时长 实例规格单价请参见分布式消息服务Kafka版价格详情中的“实例价格”。 存储空间费用 计费因子:云硬盘类型、容量 说明: 存储空间费用在账单中显示的产品名称为“分布式消息服务物理多租存储”。 包年/包月、按需计费 云硬盘单价 * 购买时长 云硬盘单价请参见分布式消息服务Kafka版价格详情中的“存储价格”。
  • Kafka扩容/缩容会影响业务吗? 扩容/缩容Kafka实例的影响如表1所示。 表1 变更实例规格的影响 变更配置类型 影响 基准带宽/代理数量 扩容基准带宽/代理数量不会影响原来的代理,业务也不受影响。 扩容基准带宽/代理数量时,系统会根据当前磁盘大小进行相应比例的存储空间扩容。例如扩容前实例的代理数为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,此时无法缩容。 变更代理规格的时长和代理数量有关,单个代理的变更时长一般在5~10分钟,代理数量越多,规格变更时间越长。 父主题: 实例规格变更问题
  • 消费者消费Topic失败,提示没有权限? 问题现象:同一个消费组内有多个消费者,为每个消费者授权不同的Topic访问权限,某一消费者消费其中一个Topic时,提示消费失败,报错信息如下:Not authorized to access topics。 问题原因:消费组的leader在进行分区分配时,不会考虑某一个消费者的授权和订阅信息,只会根据消费组整体的订阅情况进行分区分配,此种情况下可能会给消费者分配到未授权的Topic,从而导致了上述问题的出现。 例如:消费组中有消费者A、B、C,A订阅并授权Topic 0、Topic 1、Topic 2,B订阅并授权Topic 3、Topic 4、Topic 5,C订阅并授权Topic 6、Topic 7、Topic 8,假设以上Topic都只有一个分区,消费组的leader会根据策略进行分区分配,分配的结果可能变成:A消费Topic 0、Topic 3、Topic 6,B消费Topic 1、Topic 4、Topic 7,C消费Topic 2、Topic 5、Topic 8。此时A对Topic 3和Topic 6是没有授权的,因此会出现“Not authorized to access topics”的报错。 图1 消费者访问权限 处理方法: 如果业务要求所有消费者在同一个消费组内,即group.id相同,解决方法:为所有消费者授权相同的Topic访问权限。 如果消费者不需要在同一个消费组内,解决方法:修改group.id,让每个消费者单独在一个消费组内。 父主题: Topic和分区问题
  • 步骤四:修改客户端配置文件 开启SSL双向认证后,需要在客户端的“consumer.properties”和“producer.properties”文件中,分别修改服务端证书配置,并增加客户端证书配置。 security.protocol=SSL ssl.truststore.location=/opt/kafka_2.12-2.7.2/config/client.truststore.jks ssl.truststore.password=dms@kafka ssl.endpoint.identification.algorithm= #增加以下的客户端证书配置 ssl.keystore.location=/var/private/ssl/kafka/client.keystore.jks ssl.keystore.password=txxx3 ssl.key.password=txxx3 security.protocol配置证书协议类型,开启SSL双向认证时,必须设置为SSL。 ssl.truststore.location配置为client.truststore.jks证书的存放路径。 ssl.truststore.password为client.truststore.jks的密码。 ssl.endpoint.identification.algorithm为证书 域名 校验开关,为空则表示关闭。这里需要保持关闭状态,必须设置为空。 ssl.keystore.location配置为client.keystore.jks证书的存放路径。 ssl.keystore.password配置为client.keystore.jks的密码。 ssl.key.password配置为client.keystore.jks的密码。
  • 约束与限制 如果“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同时设置了“默认用户”权限和单个用户权限,取两者的并集。 单机实例不支持设置Topic权限。
  • 维度 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任务
  • Smart Connect监控指标 仅集群实例支持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分钟 使用Smart Connect监控指标时,请注意如下几点: Kafka双向数据复制的Smart Connect任务在监控中会被拆分为2个任务,分别为“Smart Connect任务名_source_0”和“Smart Connect任务名_source_1”。 如果Topic中的消息在进行下一次数据同步前,已经全部老化,此时实际是没有待同步的Kafka数据,但是Kafka数据同步监控指标使用的是包含老化数据的offset值,“待同步Kafka数据量”会显示老化的消息数。
  • 消费组监控指标 表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分钟
  • 实例监控指标 表1 实例支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) current_partitions 分区数 该指标用于统计Kafka实例中已经使用的分区数量。 单位:个 0~100000 Kafka实例 1分钟 current_topics 主题数 该指标用于统计Kafka实例中已经创建的主题数量。 单位:个 0~100000 Kafka实例 1分钟 group_msgs 消息堆积数 该指标用于统计Kafka实例中所有消费组中总堆积消息数。 单位:个 0~1000000000 Kafka实例 1分钟 instance_bytes_in_rate 生产流量 统计实例中每秒生产的字节数。 单位:Byte/s、KiB/s、MiB/s、GiB/s、TiB/s、PiB/s 部分存量实例不支持此监控,具体以控制台为准。 0~1000000 Kafka实例 1分钟 instance_bytes_out_rate 消费流量 统计实例中每秒消费的字节数。 单位:Byte/s、KiB/s、MiB/s、GiB/s、TiB/s、PiB/s 部分存量实例不支持此监控,具体以控制台为准。 0~1000000 Kafka实例 1分钟 current_partitions_usage 分区使用率 该指标用于统计分区使用率。 单位:% 部分存量实例不支持此监控,具体以控制台为准。 0~100% Kafka实例 1分钟
  • 约束与限制 Kafka单机/集群实例对Topic的总分区数设置了上限,当Topic的总分区数达到上限后,用户就无法继续创建Topic。不同规格配置的Topic总分区数不同,具体请参考Kafka集群实例和Kafka单机实例。 2023年5月17日及以后创建的实例不提供Kafka Manager功能,不支持在Kafka Manager中创建Topic。 已开启密文接入的实例,“allow.everyone.if.no.acl.found”设置为“false”时,无法通过客户端创建Topic。 Topic名称开头包含特殊字符,例如“#”号时,监控数据无法展示。 由于Kafka内核限制,无法区分句点和下划线,因此无法创建名称中只有句点和下划线不同的Topic。例如,已创建Topic_1,在新创建Topic.1时,报错如下:Topic 'topic.1' collides with existing topics: topic_1。
  • 约束与限制 分区数只支持增加,不支持减少。 2023年5月17日及以后创建的实例不提供Kafka Manager功能,不支持在Kafka Manager中修改Topic分区数。 Kafka单机/集群实例对Topic的总分区数设置了上限,当Topic的总分区数达到上限后,用户就无法继续创建Topic。不同规格配置的Topic总分区数不同,具体请参考Kafka集群实例和Kafka单机实例。 已开启密文接入的实例,“allow.everyone.if.no.acl.found”设置为“false”时,无法通过客户端修改Topic分区数。
  • 约束与限制 若“auto.create.groups.enable”设置为“true”,当消费组的状态为“EMPTY”且从未提交过offset,系统将在十分钟后自动删除该消费组。 若“auto.create.groups.enable”设置为“false”,系统不会自动删除消费组。如果需要删除消费组,需要您手动删除。 若消费组从未提交过offset,当Kafka实例重启后,该消费组会被删除。 删除消费组会导致消费进度丢失,造成重新消费或重复消费等情况。
  • producer使用建议 同步复制客户端需要配合使用:acks=all 配置发送失败重试:retries=3 发送优化:对于时延敏感的信息,设置linger.ms=0。对于时延不敏感的信息,设置linger.ms在100~1000之间。 生产端的JVM内存要足够,避免内存不足导致发送阻塞。 时间戳设置为与当地时间一致,避免时间戳为未来时间导致消息无法老化。 尽量复用producer,不要频繁创建producer。当producer开启幂等时(生产者客户端3.0及之后的版本默认开启幂等),生产消息会在服务端创建生产者状态对象,若频繁创建producer,会导致服务端创建大量生产者状态对象后无法及时回收,服务端内存占用飙升,进而导致服务端性能急剧下降。如果不需要使用幂等功能,请将“enable.idempotence”设置为“false”。