TDengine 订阅不到数据问题排查

简介

TDengine 在实际生产应用中,经常会遇到订阅程序订阅不到数据的问题,总结大部分都为使用不当或状态不正确等问题,需手工解决。

查看服务端状态

通过 sql 命令查看有问题的 topic 和consumer_group 组订阅是否正常。

     select * from information_schema.ins_subscriptions where topic_name = 'db_32471_topic' and consumer_group='g122';

topic_name 和 consumer_group 换成对应的)

结果如下图:
在这里插入图片描述

  1. 如果offset 里分子在变大,或者 rows 列也在增大,证明服务端消费数据正常。consumer_id 为正在消费的消费者。根据 consumer_id 去客户端排查。
  2. 如果consumer_id 为 NULL,证明这个topic 里这个 consumer_group 组里没有消费者在消费。在服务端继续排查
  • 找到consumer_id 为 NULL这个consumer 所在的 vnode,找到vnode 的主节点(show vnodes)
  • 在主节点上执行如下命令(日志路径需替换)
    打开日志:alter dnode x ‘tqdebugflag 135’
    搜索日志:grep “tmq poll" /var/log/taos/taosdlog.0 | grep topic_name | grep consumer_group 查看是否有消费请求发送到服务端
  1. 如果某些行offset 在变,某些行 offset 没有变,但是consuemr_id 有值。offset 没有变的这个consumer 说明没有在消费数据。在服务端继续排查。
  • 找到没有变的这个consumer 所在的 vnode,找到vnode 的主节点(show vnodes)
  • 在主节点上执行如下命令(consumer_id 和日志路径需替换)
    打开日志: alter dnode x ‘tqdebugflag 135’
    搜索日志:grep 0xeca1f9b1d600001 /var/log/taos/taosdlog.0 | grep “tmq poll” | grep -E "set handle|block num"在这里插入图片描述如果没有搜到日志,证明服务端没有收到消费数据的消费请求。继续客户端排查。
    如果看到有 send rsp,block num 不为 0,说明有服务端有数据发送给客户端。为0,说明消费0条数据。

查看客户端状态

原生连接客户端是本地消费程序,日志为taos 的日志,目录为 taos.cfg 里配置的logDir,一般为 /var/log/taos/

WebSocket 连接方式客户端为 taosadapter 程序,如果有负载均衡的话,需要找对 taosadapter。日志同样为taos 的日志,目录为 taos.cfg 里配置的logDir,一般为 /var/log/taos/。

  1. 首先打开客户端日志,cDebugFlag 或者 tqClientDebugFlag。
    改配置文件taos.cfg 重启消费程序。
    不重启的话,如果为 taosadapter,可以执行如下命令
    curl --location ‘http://127.0.0.1:6041/rest/sql’ --header ‘Content-Type: text/plain’ -u root:Tbase129! --data ‘alter local ‘\’‘cdebugflag’\’’ ‘\’‘129’\‘’’ (用户名密码需替换)

也可以通过在mnode 主节点机器上执行 alter dnode x ‘tqclientdebugflag 135’,把开关下推到客户端。(3.3.4.3以及以后得版本支持)。

  1. 找到对应的taoslog(可以通过查看客户端进程,然后 ll /proc/id/fd|grep taoslog,查看具体的日志文件,因为可能存在多个客户端日志)

    然后根据 consumer_id 查找消费信息。没有consumer_id 的话,可以通过查找 start to poll at 来判断是否有 poll 调用过来。

下图第一行标识收到 poll 消息,第二行标识返回消费到多少数据
在这里插入图片描述出现如下日志说明消费者没有权限消费数据。在这里插入图片描述

消费者不存在问题

通过show consumers; 或者 show subscriptions,找不到消费者时,就是消费者被删除了。下列几种情况会删除消费者:

  1. 消费者断线超时,超时时间通过消费者配置参数 session.timeout.ms 控制,默认 12s。
  2. 消费者超过固定时间不再poll 数据,通过消费者配置参数 max.poll.interval.ms 控制,默认为 300s。
  3. 消费者主动取消订阅。

访问官网

更多内容欢迎访问 TDengine 官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TDengine (老段)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值