创建 Topic

最近更新时间:2025-08-07 11:57:12

我的收藏

操作场景

Topic(主题)是某一种分类的名字,用于存储消息,生产者往 Topic 中写消息,消费者从 Topic 中读消息。为了做到水平扩展,一个 Topic 实际是由多个 Partition(分区)组成,遇到瓶颈时,可以通过增加 Partition 的数量进行横向扩容。

约束与限制

当实例下所有 Topic(包含手动和自动创建的 Topic)的总分区数达到 Partition 数量上限后,将无法继续创建 Topic,您可以通过扩容 Partition 数量来增加 Topic 额度。

前提条件

已提前创建好 CKafka 实例,详细操作请参考创建实例

操作步骤

通过控制台手动创建 Topic
通过客户端自动创建 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 策略
关闭
开启后可以在下拉框中勾选提前设置好的 ACL 策略,详细介绍请参考 配置 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副本。
默认消息保留时长
默认3天,默认值可通过设置 Topic 全局属性进行修改。具体操作请参考配置 Topic 全局属性
默认最大消息大小
默认8MB,默认值可通过设置 Topic 全局属性进行修改。具体操作请参考配置 Topic 全局属性
UncleanLeaderElectionEnable
默认为 true,用于控制是否允许未同步的副本选为 Leader。默认值可通过设置 Topic 全局属性进行修改。具体操作请参考配置 Topic 全局属性
消息时间戳类型
默认为 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 配置

针对自动创建的 Topic,如果默认配置的参数值不满足您的业务需求,您可以手动修改 Topic 配置,具体操作请参考修改 Topic 配置