如遇某个时刻的消息消费有问题,则可通过按时间查询的方式查询这个时刻具体发送了哪些消息以及这些消息的内容。消息队列 for Apache Kafka 控制台提供两种消息查询方式:按位点查询和按时间查询,帮助提高问题排查效率。

背景信息

您可根据具体情况按以下推荐方式查询消息:

  • 如果您可通过查询日志来获取消息发送至的分区 ID 以及消息位点,则推荐使用按位点查询

  • 如果不确定消息的位置,但确定消息发送的时间,则推荐使用按时间查询

注意
  • 查询到的每条消息在控制台上最多显示 1 KB 的内容,超过 1 KB 的部分将自动截断。如需查看完整的消息内容,请下载相应的消息。

    目前,仅有专业版实例支持下载,且下载的消息的最大大小为 10 MB。立即购买>>

  • 标准版实例最多查询到 256 KB 的消息、显示 10 条消息。

    • 如果 3 条消息的大小已经超过 256 KB,那么控制台上只显示 256 KB 以内的内容;

    • 如果 10 条消息的大小还不到 256 KB,在控制台上最多也只能看到 10 条消息。在这样的情况下,请以客户端的实际消费为准。

  • 专业版实例最多查询到 10 MB 的消息、显示 30 条消息。

    • 如果 3 条消息的大小已经超过 10 MB,那么控制台上只显示 10 MB 以内的内容;

    • 如果 30 条消息的大小还不到 10 MB,在控制台上最多也只能看到 30 条消息。在这样的情况下,请以客户端的实际消费为准。

    实例版本详情请参见计费说明

  • 所能查询的结果与消息队列 for Apache Kafka 的消息清除策略相关,清除策略如下:

    • 清除超过存储时长的消息,但会保留至少一个存储文件。例如,消息存储时长为 72 小时,那超过 72 小时的消息都会被清除,但会剩下最后一个存储文件,即使这里面的消息都超过 72 小时,仍可被查询;

    • 如果总的消息大小超过消息存储磁盘 85% 的使用率,则会从最早的消息开始清除,直至降到磁盘使用率 85% 以下。

按位点查询

消息队列 for Apache Kafka 中的一个位点指向一条消息,在确定需要查询的消息所在位置的情况下,可以指定位点查询相应的消息。

  1. 登录消息队列 for Apache Kafka 控制台。在顶部导航栏,选择所需查询的实例所在地域(Region)。
  2. 在左侧导航栏,单击消息查询。在消息查询页面,选择需查询的实例,并单击按位点查询页签。

  3. 在三个输入框中,分别输入需查询的 Topic 名称、选择需查询的分区、按提示输入位点,然后单击搜索

    按位点查询页签中展示该查询位点及以后连续的最多共 10 条消息,例如,指定的分区和位点都为 “5”,那么返回的结果从位点 “5” 开始,如下图所示。



    显示结果为 8 条消息,说明要么该分区的最大位点即为 12;要么返回的消息大小已超过 256 KB。

    对搜索结果中所涉及的字段说明如下:

    • 分区:与步骤 3 中查询时选择的分区 ID 一致。

    • 位点:在步骤 3 中查询时指定的位点及以后连续的位点,总数最多不超过 10 个。

    • TimeStamp:发送消息时,客户端自带的或是您指定的 ProducerRecord 中的 timestamp。需注意的是如果未配置该字段,则默认取消息发送时的系统时间;如果配置了该字段,则按配置值显示。如果显示值为 “1970/x/x x:x:x”,则说明发送时间配置为 “0” 或其他有误的值。Apache Kafka 0.9 及以前版本的客户端不支持设置该时间。

  4. 可选:单击操作列下的消息详情查看详情。所示字段说明如下:

    • Key(size:XXB):消息 Key/Value 序列化后的大小,取值为 ConsumerRecord 中的 serializedKeySize/serializedValueSize

    • Value(size:XXB):查询到的消息的具体内容(已强制转换为 String 类型)。

  5. 仅针对专业版实例:单击 Key 或 Value 右侧的下载消息,下载对应消息。下载的消息最大大小为 10 MB,超过 10 MB 的部分将不显示。

按时间查询

按时间查询允许查询全部分区的消息,不确定消息的位置,但确定消息发送的时间段,请指定该时间段中的某一个时间点查询该时间点附近的消息。

  1. 登录消息队列 for Apache Kafka 控制台。在顶部导航栏,选择所需查询的实例所在地域。

  2. 在左侧导航栏,单击消息查询。在消息查询页面,选择需查询的实例,并单击按时间查询页签。

  3. 在三个输入框中,分别输入需查询的 Topic 名称、选择需查询的分区、选择需查询的时间点,然后单击搜索

    按时间查询页签即可看到搜索结果,分区的取值会影响搜索显示结果:

    • 如果分区选择的是全部,则会看到随机显示的分区,但会显示实例下各自分区内,指定时间点前后的任意数量的消息,最多返回 10 条。例如,分区选择为全部,时间点为 “2019-05-07 00:00:00”,搜索结果如下图所示。



    • 如果指定了分区,则会看到在该分区的指定时间点前后的消息,最多返回 10 条。例如,指定的分区为 “5”,时间点为 “2019-05-07 00:00:00”,搜索结果如下图所示。



    对搜索结果中所涉及的字段说明如下:

    • 分区:显示的值取决于步骤 3 中查询时是否指定了分区;如果指定了,则显示指定分区;如果选择全部,则随机显示实例下的分区。

    • 位点:如果在步骤 3 中指定了分区,则显示该分区下指定时间点前后的位点;如果在步骤 3 中没有指定分区,选择了全部,则随机显示该实例任意分区各自对应指定时间点前后的位点。不管是否指定分区,最多显示 10 个。

    • TimeStamp:发送消息时,客户端自带的或是您指定的 ProducerRecord 中的 timestamp。需注意的是如果未配置该字段,则默认取消息发送时的系统时间;如果配置了该字段,则按配置值显示。如果显示值为 “1970/x/x x:x:x”,则说明发送时间配置为 “0” 或其他有误的值。Kafka 0.9 及以前版本的客户端不支持设置该时间。

  4. 可选:单击操作列下的消息详情查看详情。所示字段说明如下:

    • Key(size:XXB):消息 Key/Value 序列化后的大小,取值为 ConsumerRecord 中的 serializedKeySize/serializedValueSize

    • Value(size:XXB):查询到的消息的具体内容(已强制转换为 String 类型)。

  5. 仅针对专业版实例:单击 Key 或 Value 右侧的下载消息按钮,下载对应消息。下载的消息的最大大小为 10 MB,超过 10 MB 的部分将不显示。