You need to enable JavaScript to run this app.
文档中心
消息队列 Kafka版

消息队列 Kafka版

复制全文
下载 pdf
常见问题
消息收发与存储FAQ
复制全文
下载 pdf
消息收发与存储FAQ
本文汇总消息生产、消费、查询与存储相关的常见问题。​
如何确定消息是否发送成功?​
客户端发送消息到 Kafka 实例之后,您可以通过以下方式确认消息是否发送成功。​
​
方式​
说明​
查询消息​
在控制台消息查询页面,按位点或时间查询消息。如果可以正常查询到消息,表示消息发送成功。​
查看 Topic 的存储消息数量​
在控制台的Topic管理页面单击指定 Topic 的名称,单击分区信息页签,在分区列表的存储消息数量一列查看消息数量,如果和发送的消息数量一致,则表示消息发送成功。​
查看回调​
通常情况下,Kafka 客户端发送消息后,会通过回调方式返回 Callback 或 Future。如果成功收到正常的回调,表示消息发送成功。​
​
Producer 建立的 Broker 连接数量是多少?​
通常情况下,每个 Producer 会建立 2 个到 Broker 的 TCP 连接,分别用于更新元数据和发送消息。​
如何查看正在消费消息的 IP 地址?​
您可以参考以下步骤查看消费中的客户端 IP 地址:​
  1. 在顶部菜单栏中选择地域,并在选择左侧导航栏中单击实例列表。​
  1. 找到目标实例,单击实例名称。​
  1. 在顶部页签栏中单击Group管理,页签中展示当前实例下的 Group 列表。​
  1. 单击 Group ID,查看指定 Group 的消费状态。​
  • 在消费状态区域中,展开 Topic,其中消费者信息一列即为正在消费消息的客户端 IP 地址。​
  • 当消费者信息为空时,说明当前无客户端正在消费该分区,或者消费者使用的是第三方的 Kafka 客户端。​
为什么查询不到消息?​
通过控制台查询消息时,如果出现消息成功发送,但查询不到的现象,通常由以下原因造成。​
​
可能原因​
说明​
消息已过期删除​
Kakfa 实例的 Topic 可设置消息保留时长,超出保留时长的消息将被后台自动删除。​
开启了自动删除消息,且磁盘占用率高​
如果实例开启了自动删除消息功能,且磁盘容量达到磁盘清理水位时,后端服务会自动删除旧消息以释放磁盘空间,保障实例的可用性。此时未到期的消息可能会被自动删除,导致查询不到此消息。​
消息的时间戳设置错误​
通过时间范围查询消息时,消息队列 Kafka版根据消息的时间戳判断消息时间,消息的时间戳属性(createTime)由客户端配置。如果发送消息时设置的时间戳错误,则可能造成查询不到消息的现象。常见场景如下:​
  • 时间戳配置错误,此消息无法被查询。例如时间戳设置为 0 或者 -1。​
  • 时间戳配置为过去某个时刻,此时间戳错误的消息及其前后的几条消息,都无法被查询。​
  • 时间戳配置为未来某个时刻,则当下到此未来时刻期间的所有消息,即使时间戳配置正确,也无法被查询到。​
​
消息的保留时间是多久?​
火山引擎消息队列 Kafka版支持自定义实例和 Topic 粒度的消息保留时长,磁盘容量充足时,超出指定保留时长的消息将被过期清理。消息保留时长(LogRetentionHours)默认为 72 小时,支持设置为 1~2160 小时。​
调整消息保留时长的方式如下:​
​
设置方式​
说明​
修改实例的消息保留时长参数​
实例级别的消息保留时长设置对后续此实例中新创建的 Topic 生效,新 Topic 的消息保留时长默认沿用实例的配置。详细说明请参考修改实例的的参数配置。​
实例的消息保留时长调整不会对已创建的 Topic 生效,若有业务需求,建议手动修改已创建的 Topic 参数配置。​
修改 Topic 的消息保留时长参数​
Topic 级别的的消息保留时长设置仅对当前 Topic 生效。详细说明请参考修改 Topic 的参数配置。​
如果缩短了 Topic 的消息保留时长,后端服务会根据新的配置重新检查存量数据的保存时间,部分消息可能会被判定为已过期,继而被删除。​
​
另外,消息队列 Kafka版通过参数磁盘清理水位提供磁盘容量阈值策略,在磁盘容量达到一定水位阈值后,消息队列 Kafka版会根据已设定的磁盘容量阈值策略,删除旧消息或暂停实例的数据写入,避免磁盘使用率达到 100% 而导致 Kafka 实例异常。在这种场景下,消息可能在未超过保留时长的情况下被提前删除,请定期关注实例的磁盘容量,在容量不足时及时升级实例规格。关于磁盘容量阈值策略的详细说明请参考磁盘容量阈值策略。​
​
为什么消息被消费后仍保存在 Topic 中?​
消息被删除的时间与消息是否已被消费无关。在磁盘容量充足的情况下,消息只有超过了已设置的消息保留时长,才会被后端服务判定为老化,并删除该消息。​
建议根据业务数据量合理设置消息保留时长与实例存储空间,以免造成未老化的消息过多、大量占用磁盘空间的情况。设置消息保留时长的方式请参考修改参数配置。​
消息超过保留时长之后,仍能被查询到​
Topic 中的消息在服务端保存的时间已超过了指定的消息保留时长,但查询消息时,仍然能查询到此消息,说明该消息尚未被删除。​
说明​
  • 消息保留时长指在磁盘容量充足的情况下,消息的最长保留时间。默认值为 72 小时,取值范围为 1 小时~2160 小时。磁盘容量不足时,将根据实例的是否删除旧消息参数配置,确定是否提前删除旧的消息,以确保服务可用性。​
  • 为了避免 Topic 中存储文件的碎片化现象,Topic 的分区由多个指定大小的 Segment 文件组成,每个 Segment 文件用于存放消息。默认情况下,每个 Segment 文件大小为 1GB。当 Segment 文件存储的消息大小到达 1GB 后,后台服务才会创建下一个 Segment 文件,继续存储新的消息。此外,Kafka 要求至少保留一个 Segment 文件用来存储消息。​
该现象的主要原因如下:​
  • 服务端根据消息保留时长删除旧消息时,以 Segment 为单位进行删除,但不会删除未达 1GB 大小的 Segment 文件。即如果消息所保存的 Segment 片段大小未超过 1GB,此 Segment 文件和其中的消息不会被删除,无论其中的消息是否已超过消息存储时长。​
  • 若 Segment 片段中存在未过期的消息,即 Segment 中最大时间戳对应的消息数据仍在消息保留时长内,Kafka 服务端不会删除这个 Segment 和其中的消息。​
  • 如果客户端写入消息时传入的消息时间戳(CreateTime)不合法,同样会影响 broker 服务端删除数据。例如 Topic 中存在一条 CreateTime 为一年后某个时间的消息,此消息在指定的消息保留时长后,并不会被老化删除,和此消息在同一个 Segment 文件中的消息同样不会被老化删除。​
修改实例的消息保留时长之后,为什么没有删除历史数据?​
问题现象:修改了实例的消息保留时长配置参数之后,Topic 的消息保留时长没有被自动同时修改,且 Topic 中已经超过新的消息保留时长的数据并没有被后台自动清理。​
问题原因:修改实例的消息保留时长,不会对修改前已创建的 Topic 生效,所以不会触发后端检验并删除过期的消息。Topic 中消息的保留时长以 Topic 的参数配置为准。创建 Topic 时,您可以设置 Topic 沿用实例的消息保留时长,或另行设置此 Topic 的消息保留时长。​
为什么消息的存储时间显示为 1970?​
根据位点查询消息时,可能存在部分消息的存储时间显示为 1970。​
可能原因如下:​
  • 客户端版本过低。建议升级客户端版本至 0.10.2 及后续版本。​
  • 客户端传递的时间戳(createTime)为 null。客户端应传递正确的时间戳,或选择使用服务端落盘时间。​
​
​
最近更新时间:2026.06.23 17:18:32
这个页面对您有帮助吗?
有用
有用
无用
无用