簡介
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 換成對應的)
結果如下圖:
- 如果offset 里分子在變大,或者 rows 列也在增大,證明服務端消費數據正常。consumer_id 為正在消費的消費者。根據 consumer_id 去客戶端排查。
- 如果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 查看是否有消費請求發送到服務端
- 如果某些行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/。
- 首先打開客戶端日志,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以及以后得版本支持)。
-
找到對應的taoslog(可以通過查看客戶端進程,然后 ll /proc/id/fd|grep taoslog,查看具體的日志文件,因為可能存在多個客戶端日志)
然后根據 consumer_id 查找消費信息。沒有consumer_id 的話,可以通過查找 start to poll at 來判斷是否有 poll 調用過來。
下圖第一行標識收到 poll 消息,第二行標識返回消費到多少數據
出現如下日志說明消費者沒有權限消費數據。
消費者不存在問題
通過show consumers; 或者 show subscriptions,找不到消費者時,就是消費者被刪除了。下列幾種情況會刪除消費者:
- 消費者斷線超時,超時時間通過消費者配置參數 session.timeout.ms 控制,默認 12s。
- 消費者超過固定時間不再poll 數據,通過消費者配置參數 max.poll.interval.ms 控制,默認為 300s。
- 消費者主動取消訂閱。
訪問官網
更多內容歡迎訪問 TDengine 官網