在構(gòu)建時(shí)序數(shù)據(jù)處理平臺(tái)時(shí),數(shù)據(jù)訂閱是不可或缺的一環(huán)。傳統(tǒng)方案通常需要額外集成Kafka等消息隊(duì)列產(chǎn)品,增加了系統(tǒng)復(fù)雜度和運(yùn)維成本。而時(shí)序數(shù)據(jù)庫(kù)內(nèi)置的數(shù)據(jù)訂閱功能,可以讓平臺(tái)無(wú)需再引入第三方消息中間件,從而大幅簡(jiǎn)化時(shí)序數(shù)據(jù)庫(kù)的應(yīng)用程序設(shè)計(jì)。
數(shù)據(jù)訂閱的核心價(jià)值
時(shí)序數(shù)據(jù)庫(kù)提供了類似于消息隊(duì)列產(chǎn)品的數(shù)據(jù)訂閱和消費(fèi)接口。在許多場(chǎng)景中,采用時(shí)序數(shù)據(jù)庫(kù)的大數(shù)據(jù)平臺(tái),完全可以省去消息隊(duì)列這一層,直接利用時(shí)序數(shù)據(jù)庫(kù)自身的訂閱能力完成數(shù)據(jù)分發(fā)。這不僅減少了組件數(shù)量,也降低了整體的運(yùn)維負(fù)擔(dān)。
創(chuàng)建訂閱主題
在時(shí)序數(shù)據(jù)庫(kù)中,通過(guò)標(biāo)準(zhǔn)的SQL語(yǔ)句即可創(chuàng)建訂閱主題。主題本質(zhì)上是一個(gè)查詢結(jié)果的持續(xù)推送通道,是時(shí)序數(shù)據(jù)庫(kù)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)分發(fā)的核心機(jī)制。
CREATE TOPIC IF NOT EXISTS topic_meters AS
SELECT ts, current, voltage, phase, groupid, location
FROM meters
上述語(yǔ)句創(chuàng)建了一個(gè)名為 topic_meters 的主題,持續(xù)推送 meters 表中的時(shí)間戳、電流、電壓、相位、分組ID和位置信息。一旦有新數(shù)據(jù)寫(xiě)入 meters 表,訂閱該主題的消費(fèi)者就能實(shí)時(shí)接收到數(shù)據(jù)流。
消費(fèi)者配置詳解
時(shí)序數(shù)據(jù)庫(kù)的消費(fèi)者概念與Kafka類似,消費(fèi)者通過(guò)訂閱主題來(lái)接收時(shí)序數(shù)據(jù)庫(kù)的數(shù)據(jù)流。以下是完整的消費(fèi)者配置參數(shù):
連接參數(shù):
td.connect.ip:服務(wù)端IP地址td.connect.user:用戶名td.connect.pass:密碼
消費(fèi)組與客戶端標(biāo)識(shí):
group.id:消費(fèi)組ID(必填項(xiàng),最大長(zhǎng)度192,每個(gè)topic最多可建立100個(gè)consumer group)client.id:客戶端ID(最大長(zhǎng)度192)
消費(fèi)位點(diǎn)管理:
auto.offset.reset:消費(fèi)組訂閱的初始位置,可選值為earliest、latest或noneenable.auto.commit:是否啟用消費(fèi)位點(diǎn)自動(dòng)提交,默認(rèn)為trueauto.commit.interval.ms:消費(fèi)記錄自動(dòng)提交消費(fèi)位點(diǎn)的時(shí)間間隔,默認(rèn)5000毫秒
高級(jí)功能:
enable.replay:是否開(kāi)啟數(shù)據(jù)回放功能,默認(rèn)關(guān)閉
其中,group.id 是必填項(xiàng),它決定了消費(fèi)組的身份標(biāo)識(shí)。每個(gè)主題最多支持100個(gè)消費(fèi)組,足以滿足大多數(shù)業(yè)務(wù)場(chǎng)景的需求。消費(fèi)位點(diǎn)自動(dòng)提交機(jī)制確保了消費(fèi)者在異常重啟后能夠從上次的位置繼續(xù)消費(fèi),避免數(shù)據(jù)丟失或重復(fù)。
訂閱查詢的限制條件
使用時(shí)序數(shù)據(jù)庫(kù)的數(shù)據(jù)訂閱功能時(shí),需要注意以下查詢限制:
- 只能使用SELECT語(yǔ)句:不支持INSERT、UPDATE、DELETE等寫(xiě)操作
- 只能查詢?cè)紨?shù)據(jù):不支持查詢聚合或計(jì)算結(jié)果
- 只能按時(shí)間正序查詢:數(shù)據(jù)按照時(shí)間戳升序推送
這些限制意味著時(shí)序數(shù)據(jù)庫(kù)的數(shù)據(jù)訂閱功能專注于原始數(shù)據(jù)的實(shí)時(shí)分發(fā)。如果需要對(duì)數(shù)據(jù)進(jìn)行聚合計(jì)算,可以在消費(fèi)端進(jìn)行處理,或者利用時(shí)序數(shù)據(jù)庫(kù)的流式計(jì)算功能完成。
典型應(yīng)用場(chǎng)景
數(shù)據(jù)訂閱功能在以下場(chǎng)景中表現(xiàn)尤為出色:
實(shí)時(shí)數(shù)據(jù)同步:將時(shí)序數(shù)據(jù)庫(kù)中的采集數(shù)據(jù)實(shí)時(shí)推送到下游系統(tǒng),如監(jiān)控系統(tǒng)、告警平臺(tái)、數(shù)據(jù)分析引擎或數(shù)據(jù)倉(cāng)庫(kù),確保各系統(tǒng)間的數(shù)據(jù)一致性。
多下游分發(fā):通過(guò)多個(gè)消費(fèi)組,將同一份數(shù)據(jù)同時(shí)推送到不同的業(yè)務(wù)系統(tǒng),每個(gè)消費(fèi)組獨(dú)立管理消費(fèi)進(jìn)度。
數(shù)據(jù)回放:開(kāi)啟 enable.replay 功能后,可以重新消費(fèi)歷史數(shù)據(jù),適用于數(shù)據(jù)修復(fù)或模型重訓(xùn)練場(chǎng)景。
總結(jié)
時(shí)序數(shù)據(jù)庫(kù)的數(shù)據(jù)訂閱功能為開(kāi)發(fā)者提供了一種輕量級(jí)的數(shù)據(jù)分發(fā)方案。通過(guò)內(nèi)置的主題和消費(fèi)組機(jī)制,無(wú)需額外部署消息隊(duì)列即可實(shí)現(xiàn)時(shí)序數(shù)據(jù)庫(kù)的實(shí)時(shí)數(shù)據(jù)推送。如果你的項(xiàng)目正在評(píng)估數(shù)據(jù)分發(fā)架構(gòu),TDengine的訂閱功能是一個(gè)值得考慮的選擇。



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



