腾讯云消息队列 CKafka - Topic 问题
文档简介:
如何选取 CKafka 副本数?
建议您创建 Topic 时选择2副本或3副本存储数据,保障数据可靠性。默认创建的 Topic 是2副本,如果业务需要更高的可用性,则可以指定选择3副本运行。如果 Topic 需要更多的副本数,可以 提交工单 进行处理。新建 Topic 时副本选择方式如下图所示。
如何选取 CKafka 副本数?
建议您创建 Topic 时选择2副本或3副本存储数据,保障数据可靠性。默认创建的 Topic 是2副本,如果业务需要更高的可用性,则可以指定选择3副本运行。如果 Topic 需要更多的副本数,可以 提交工单 进行处理。新建 Topic 时副本选择方式如下图所示。

为了提高数据的安全性,CKafka 不建议创建单副本的 Topic,如您账户下有单副本的 Topic,建议按如下步骤迁移:
1. 创建新的 Topic,选择相同的分区,选取双副本。
2. 生产消息到新的 Topic 中,存量的单副本 Topic 继续被消费。
3. 消费完毕后修改消费者配置,订阅新的 Topic 进行消费。
为什么设置了 Topic 消息保留的时间,在其设置的时间点之后仍然可以查询到消息?
1. 消息中增加了一个时间戳字段和时间戳类型。目前支持的时间戳类型有两种:CreateTime 和 LogAppendTime 前者表示生产者创建这条消息的时间; 后者表示broker接收到这条消息的时间。如果客户端生产消息时间的时间戳数据不合法,会影响 broker 服务端删除数据。
2. 主题中分区数过多,消息数据过少,且分区内只存在一个日志段文件,则不会删除消息。
3. 日志删除任务会检查当前日志的大小是否超过设定的阈值, 即每个分段1GB大小。若日志段中最大的时间戳数据在保留的时间内则不会删除消息。
为什么 Topic 数量(分区总数)存在限制?
Kafka 的 Topic 总数(分区总数)太多会使集群性能和稳定性下降。
因为单机可承载的分区数是有限度的,如果需要更多的分区那么就需要添加节点,需要更多的成本投入。Kafka的存储和协调机制是以分区为粒度的,分区数太多,会导致存储碎片化严重,单机层面的随机写增多,集群层面分区 Leader 切换效率降低,Controller 节点故障切换变慢等情况。导致集群性能和稳定性下降。
Topic 数量和分区数量有什么关系?
CKafka 以分区(partition)作为分配单位。
总分区数 = TopicA × 副本数 + TopicB × 副本数 + ...... + TopicN × 副本数。
即副本数也算在总分区个数里面,例如客户创建了1个 Topic、6个分区、2个副本,那么分区额度一共用了1 × 6 × 2 = 12个。
分区数:一个物理上分区的概念,一个 Topic 可以包含一个或者多个 partition。
副本数:partition 的副本个数,用于保障 partition 的高可用,为保障数据可靠性,当前不支持创建单副本 Topic,默认开启2副本。