消息类问题 消息超过老化时间,消息仍存在的原因 问题现象: 消息超过设置的老化时间(如果Topic已经设置了老化时间,此时“配置参数”中的log.retention.hours值将不对此Topic生效。仅在Topic中未设置老化时间时,“配置参数”中的log.retention.hours值才会对此Topic生效。),消息仍存在。 可能原因1: Topic的每个分区都是由多个大小相同的segment文件组成,每个segment文件的大小为500MB,当segment文件存储的消息大小到达500MB后,才会新建下一个segment文件。Kafka删除消息是删除segment文件,而不是删除一条消息。Kafka要求至少保留一个segment文件用来存储消息,如果正在使用的segment文件中包含超过老化时间的消息,由于此时segment文件不会被删除,所以超过老化时间的消息也不会被删除。 处理方法: 等待segment文件被使用完,或者删除超过老化时间的消息所在的Topic。 可能原因2: Topic中存在一条create time为未来时间的消息(例如当前时间为1月1日,create time设置成了2月1日),此消息在72小时后,并不会被老化,导致在此消息后创建的其他消息都不会被老化。 处理方法: 删除create time为未来时间的消息所在的Topic。 Kafka实例是否支持延迟消息? 不支持延迟消息。 如何查看堆积消息数? 通过以下任意一种方法,查看堆积消息数。 在Kafka控制台的“消费组管理”页面,单击待查看堆积消息的消费组名称,进入消费组详情页。在“消费进度”页签,查看消费组中每个Topic的总堆积数。具体步骤,请参考查询消费组信息。 在Kafka控制台的“监控”页面的“消费组”页签中,“消费组”选择待查看堆积消息数的消费组名称,“队列”选择“全部队列”,“消费组可消费消息数”表示此消费组中所有Topic的堆积消息数之和。查看监控数据的具体步骤,请参考查看监控数据。 在云监控页面的“消费组”页签中,“消费组”选择待查看堆积消息数的消费组名称,“队列”选择“全部队列”,“消费组可消费消息数”表示此消费组中所有Topic的堆积消息数之和。查看监控数据的具体步骤,请参考查看监控数据。 在Kafka客户端,在“/{命令行工具所在目录}/kafka{version}/bin/”目录下,通过 kafkaconsumergroups.sh bootstrapserver {kafka连接地址} describe group {消费组} 命令查看消费组中每个Topic的堆积消息数。“LAG”表示每个Topic的总堆积数。 图 查看每个Topic的总堆积数 说明 如果Kafka实例开启SASL认证,则以上命令还需要增加SASL认证的“consumer.properties”配置文件参数: commandconfig {SASL认证的consumer.properties配置文件} ,“consumer.properties”配置文件参考开启SASL认证的Kafka命令行连接说明。