操作场景
Topic(主题)是某一种分类的名字,用于存储消息,生产者往 Topic 中写消息,消费者从 Topic 中读消息。为了做到水平扩展,一个 Topic 实际是由多个 Partition(分区)组成,遇到瓶颈时,可以通过增加 Partition 的数量进行横向扩容。
约束与限制
当实例下所有 Topic(包含手动和自动创建的 Topic)的总分区数达到 Partition 数量上限后,将无法继续创建 Topic,您可以通过扩容 Partition 数量来增加 Topic 额度。
前提条件
操作步骤
1. 登录 CKafka 控制台。
2. 左侧导航栏选择实例列表,选择好实例后,单击目标实例的“ID/名称”,进入实例详情页。
3. 在实例详情页,选择页面左侧的 Topic 列表页签,单击新建。
4. 在编辑 Topic 窗口中,设置 Topic 分区数和副本数等信息。
参数 | 是否必选 | 说明 |
名称 | 是 | 填写 Topic 名称,名称需符合命名规则:只能包含字母、数字、下划线、“-”和“.”,不支持以“双下划线”开头。Topic 创建成功后名称无法更改。 |
备注 | 否 | 填写 Topic 说明信息,不超过64个字符。 |
分区数 | 是 | 一个物理上分区的概念,一个 Topic 可以包含一个或者多个 partition,CKafka 以 partition 作为分配单位。部署架构默认至少3节点,分区数起步建议为3,数据分布更均衡。分区数配置参考文档 参数配置说明。 |
副本数 | 是 | Partition 的副本个数,用于保障 Partition 的高可用。为保障数据可靠性,默认开启2副本。副本数也算分区个数,例如客户创建了1个 Topic、6个分区、2个副本,那么分区额度一共用了1 × 6 × 2 = 12个。 说明: 设置为单副本会导致可用性无法保证,请谨慎操作。 |
标签 | 否 | |
retention.ms | 是 | Topic 维度的消息保留时间,默认为3天,范围1分钟到90天。超出设置的保留时长后,消息将被删除以保留足够的磁盘空间。 |
5. (可选)单击展开高级配置,设置如下参数:
参数名 | 默认值 | 说明 |
消息时间戳类型 | LogAppendTime(推荐) | 定义消息中的时间戳类型: CreateTime:生产者创建这条消息的时间,由于客户端的时间可能和服务器时间存在偏差,需要检查写入的时间是否是正确的时间。 LogAppendTime:服务端 Broker 接收到消息的时间。 |
预设 ACL 策略 | 关闭 | |
cleanup.policy | delete | Topic 日志的清理策略: delete:日志按保存时间删除,根据配置的消息保留时间保存消息,在磁盘容量不足时会自动清理旧数据以保证服务可用性,适合普通消息队列场景。 compact:日志按 Key 压缩,确保相同 Key 的消息只保留最新的 Value。适用于系统宕机后恢复状态,系统重启后重新加载缓存等场景。例如使用 Kafka Connect 或 Confluent Schema Registry时,需要使用 Kafka Compact Topic 存储系统状态信息或配置信息。 delete.compact:组合策略,先压缩 Key 保留最新值,再删除过期数据。适用于混合型数据如社交消息流。 |
min.insync.replicas | 1 | 指定生产者发送消息时必须成功写入的最少同步副本(ISR)数量。范围在1到 Topic 最大副本数之间。值越高,数据安全性越强(容忍更多节点故障),但会降低可用性(当 ISR 不足时服务不可写)。 当 producer 设置 request.required.acks 为1时,min.insync.replicas 指定为 replicas 的最小数目。 |
unclean.leader.election.enable | true | 是否允许从非同步副本(Out-of-Sync Replicas, OSR)中选举新的 Leader。 true(默认):允许从 OSR 选举 Leader,优先保证可用性。 false:仅允许从同步副本(ISR)中选举 Leader,优先保证数据一致性。 |
segment.ms | - | Segment 分片滚动的时长,范围1 到90 天,最小单位为 ms。 |
retention.bytes | 默认为实例的消息保留大小 | 分区维度的消息保留大小,范围1 到1024 GB。 分区数 * retention.bytes = 当前 Topic 的消息保留大小,对于一个 Topic,如果同时设置了消息保留时间和消息保留大小,实际保留消息时会以先达到的阈值为准。(Serverless实例暂不支持配置此参数) |
max.message.bytes | - | 单条消息最大允许大小,范围 1KB 到 12MB。客户端发送数据时,会将发往同一个分区的数据聚合起来,统一发送,服务端会比较每一批次的消息大小。 |
6. 单击提交,完成创建。
“自动创建 Topic”表示客户端向一个 Topic 生产或消费消息时,会自动检测该 Topic 是否存在,若 Topic 不存在,且 Topic 名称符合命名规则(只能包含字母、数字、下划线、“-”和“.”,不支持以“双下划线”开头),系统会自动创建此 Topic,此 Topic 的默认参数值如下表。
参数 | 默认值 |
分区数 | 开启自动创建 Topic 时设置,默认至少3节点。 |
副本数 | 开启自动创建 Topic 时设置,默认2副本。 |
默认消息保留时长 | |
默认最大消息大小 | |
UncleanLeaderElectionEnable | |
消息时间戳类型 | 默认为 LogAppendTime,代表服务端 Broker 接收到消息的时间。 |
cleanup.policy | 默认为 delete,日志按保存时间删除。 |
min.insync.replicas | 默认为 1,用于指定生产者发送消息时必须成功写入的最少同步副本(ISR)数量。 |
开启自动创建 Topic
1. 登录 CKafka 控制台。
2. 左侧导航栏选择实例列表,选择好实例后,单击目标实例的“ID/名称”,进入实例详情页。
3. 在自动创建 Topic 模块,点击右上角的配置按钮,开启自动创建 Topic。
4. 设置好 Topic 分区数和副本数后,单击提交,完成配置。
该实例下的自动创建的 Topic 的配置都会继承您所配置的分区数和副本数的值。
分区数:一个物理上分区的概念,一个 Topic 可以包含一个或者多个 partition,CKafka 以 partition 作为分配单位。部署架构默认至少3节点,分区数起步建议为3,数据分布更均衡。分区数配置参考文档 参数配置说明。
副本数:Partition 的副本个数,用于保障 Partition 的高可用。为保障数据可靠性,默认开启2副本。副本数也算分区个数,例如客户创建了1个 Topic、6个分区、2个副本,那么分区额度一共用了1 × 6 × 2 = 12个。
说明:
设置为单副本会导致可用性无法保证,请谨慎操作。
修改 Topic 配置