Kafka实例的Topic数量是否有限制?
Topic数量和Topic总分区数、每个Topic的分区数有关,Kafka实例对Topic总分区数设置了上限,当达到上限后,会导致用户无法继续创建Topic。
不同规格配置的Topic总分区数不同,如下表所示。
表 Kafka实例规格
实例规格 | 代理个数范围 | 单个代理TPS | 单个代理分区上限 | 单个代理Consumer Group上限 | 单个代理客户端总连接数上限 | 存储空间范围 |
---|---|---|---|---|---|---|
kafka.2u4g.cluster | 3~30 | 30000 | 250 | 20 | 2000 | 300GB~300000GB |
kafka.4u8g.cluster | 3~30 | 100000 | 500 | 100 | 4000 | 300GB~600000GB |
kafka.8u16g.cluster | 3~30 | 150000 | 1000 | 150 | 4000 | 300GB~900000GB |
kafka.12u24g.cluster | 3~30 | 200000 | 1500 | 200 | 4000 | 300GB~900000GB |
kafka.16u32g.cluster | 3~30 | 250000 | 2000 | 200 | 4000 | 300GB~900000GB |
为什么限制Topic的总分区数?
Kafka以分区为粒度管理消息,分区多导致生产、存储、消费都碎片化,影响性能稳定性。在使用过程中,当Topic的总分区数达到上限后,用户就无法继续创建Topic。
不同规格配置的Topic总分区数不同,如下表所示。
表 Kafka实例规格
实例规格 | 代理个数范围 | 单个代理TPS | 单个代理分区上限 | 单个代理Consumer Group上限 | 单个代理客户端总连接数上限 | 存储空间范围 |
---|---|---|---|---|---|---|
kafka.2u4g.cluster | 3~30 | 30000 | 250 | 20 | 2000 | 300GB~300000GB |
kafka.4u8g.cluster | 3~30 | 100000 | 500 | 100 | 4000 | 300GB~600000GB |
kafka.8u16g.cluster | 3~30 | 150000 | 1000 | 150 | 4000 | 300GB~900000GB |
kafka.12u24g.cluster | 3~30 | 200000 | 1500 | 200 | 4000 | 300GB~900000GB |
kafka.16u32g.cluster | 3~30 | 250000 | 2000 | 200 | 4000 | 300GB~900000GB |
Kafka支持减少分区数吗?
Kafka不支持减少分区数,您可以通过删除原先的Topic,然后创建新Topic,重新设置分区数。
Kafka实例创建Topic失败
可能原因:已创建的Topic,分区数之和达到实例规格的分区数上限。不同规格实例配置的分区数上限不同,具体请参考产品规格。
解决方案:对Kafka实例扩容,或者删除不需要的Topic。
Kafka实例支持批量导入Topic功能么?或者是自动生成Topic功能?
支持自动生成Topic功能,但不支持Topic批量导入功能,仅支持批量导出Topic功能。
通过以下任意一种方法,开启自动生成Topic功能:
- 创建实例时,开启Kafka自动创建Topic。
- 创建实例后,在实例详情页开启Kafka自动创建Topic。
为什么删除Topic不生效?删除后该Topic仍然存在
可能原因:您开启了自动创建Topic功能,且有消费者正在连接该Topic。所以,如果没有停止您的业务,删除了Topic后,还会有消息生产行为,并自动创建Topic。
解决办法:需要关闭自动创建Topic功能,才可以正常删除Topic。
Kafka实例是否支持查看单个Topic占用磁盘空间?
支持。通过以下任意一种方法,查看单个Topic占用磁盘空间大小。
- 在Kafka实例名称后,单击,跳转到云监控页面。在“队列”页签中,“队列”选择待查看磁盘空间大小的Topic名称,“监控类型”选择“基本监控”,查看“队列数据容量”,该指标表示该队列当前的消息数据大小。
- 单击Kafka实例名称,进入实例详情页。在左侧导航栏单击“监控”,进入监控页面。在“主题”页签中,“主题”选择待查看磁盘空间大小的Topic名称,“监控类型”选择“基本监控”,查看“队列数据容量”,该指标表示该队列当前的消息数据大小。
Topic是否支持ACL权限配置?
Kafka实例已开启Kafka SASL_SSL功能,此时Topic支持配置ACL权限。在Kafka控制台的“Topic管理”页面,在需要设置用户权限的Topic所在行,单击“设置用户权限”,为用户设置不同的权限。
具体操作请参考设置Topic权限。
消息被消费后,没有删除,导致Kafka存储空间占满?
消息被消费后,并不会被删除,只有超过老化时间,才会被删除。
您可以通过减小老化时间或者扩容存储空间,解决此问题。
如何扩总分区?
增加基准带宽/代理数量,可以扩大总分区数。
在Kafka控制台的实例所在行,单击“更多 > 变更规格”,进入变更规格页面,根据实际情况扩容基准带宽/代理数量。具体操作请参考变更实例规格。
修改自动创建Topic的配置,会触发重启吗?
开启或者关闭“Kafka自动创建Topic”,会导致Kafka重启。
如何关闭自动创建Topic功能?
- 在Kafka控制台,单击实例名称,进入实例详情页面。
- 在“基本信息”页面的“实例信息”区域,单击“Kafka自动创建Topic”后的,关闭自动创建Topic功能。
您可以在“后台任务管理”页签,查看关闭任务执行状态。
Kafka可以删除消费组下不用的Topic吗?
可以删除。在Kafka客户端取消订阅该Topic,即可达到在消费组下删除该Topic的效果。
消费者消费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”的报错。
图消费者访问权限
处理方法:
- 如果业务要求所有消费者在同一个消费组内,即group.id相同,解决方法:为所有消费者授权相同的Topic访问权限。
- 如果消费者不需要在同一个消费组内,解决方法:修改group.id,让每个消费者单独在一个消费组内。
为什么实例中存在默认名为__trace和__consumer_offsets的Topic?
问题现象: Kafka Manager中存在默认名为__trace和__consumer_offsets的Topic。
处理方法: __trace和__consumer_offsets是Kafka实例内部预留的Topic,不建议删除这两个Topic,删除后可能导致实例无法使用。