Subscription Management
Only Enterprise Edition supports
CnosDB subscription can write data from local endpoint to remote endpoint, can be used with another CnosDB instance or Telegraf.CnosDB distributes subscriptions using traffic replication.
Supported distributed traffic:
/api/v1/writeINSERTin/api/v1/sql
Before distributing data to the CnosDB instance, please create the table in advance, otherwise data loss will occur.
Create Subscription
We can use CREATE SUBSCRIPTION to create a subscription.
Syntax
CREATE SUBSCRIPTION <subscription_name>
ON <database_name>
DESTINATIONS <ALL|ANY> "<end_point>" ["<end_point>"]
[ON <table_name>(time, [tag_name, ...], <field_name>, [field_name, ..])
[FILTER_BY <Expr>]];
DESTINATIONS: defines the destination location where data is written, ALL indicates data is written to all endpoints, ANY indicates round-robin writing to multiple endpoints, end_point indicates the target endpoint for writing (the host of the CnosDB instance and the grpc_listen_port in the configuration file, for example: 127.0.0.1:8903).
ON: Set the subscribed list and columns in the table.
FILTER_BY: Filter the records that need to be distributed using conditions, for example: FILTER_BY WHERE station = 'XiaoMaiDao'.
Example
For example, the partial configuration of the CnosDB node that accepts the distributed data is as follows:
[cluster]
meta_service_addr = ["127.0.0.1:8901"]
grpc_listen_port = 8903
The SQL for creating the subscription in the current CnosDB is as follows:
CREATE SUBSCRIPTION test ON public DESTINATIONS ALL "127.0.0.1:8903"
At this time, if any data is written to the current CnosDB node, the data will be synchronized copied and forwarded to 127.0.0.1:8903.
If you need to filter the data, you can add the keyword FILTER_BY:
create subscription test
on public
DESTINATIONS ALL "127.0.0.1:8903"
on air(time,station,pressure)
FILTER_BY where station = 'XiaoMaiDao';
Alter Subscription
We can use ALTER SUBSCRIPTION to alter the subscription.
Syntax
ALTER SUBSCRIPTION <subscription_name>
ON <database_name>
DESTINATIONS <ALL|ANY> "<end_point>" ["<end_point>"]
[ON <table_name>(time, [tag_name, ...], <field_name>, [field_name, ..])
[FILTER_BY <Expr>]];
Example
ALTER SUBSCRIPTION test ON public DESTINATIONS ALL "127.0.0.1:8903" "127.0.0.1:8913";
You can modify end_point in this way, and note that modifying by ALTER SUBSCRIPTION overwrites it directly. If you do not want to delete the previous end_point, all previous end_point needs to be added after DESTINATIONS ALL.
Show Subscription
We can use SHOW SUBSCRIPTION to view subscription information.
Syntax
SHOW SUBSCRIPTION ON <database_name>
Example
SHOW SUBSCRIPTION ON public;
Output result:
SUBSCRIPTION,DESTINATIONS,MODE,PROJECTION,SELECTION
test,"127.0.0.1:8902,127.0.0.1:8903",ALL,,,
Drop Subscription
We can use DROP SUBSCRIPTION to drop the subscription.
Syntax
DROP SUBSCRIPTION <subscription_name> ON <database_name>
Example
DROP SUBSCRIPTION test ON public;
Send data to telegraf
You can refer to Telegraf to know how to use Telegraf and how to install Telegraf.
Modify the telegraf configuration file, add the following configuration to listen on port 8803
[[inputs.cnosdb]]
service_address = ":8803"
Create subscription in CnosDB
Assuming the telegraf location is at
127.0.0.1.
CREATE SUBSCRIPTION sub_test ON public DESTINATIONS ALL "127.0.0.1:8803";
Query subscription
> SHOW SUBSCRIPTION ON public;
+--------------+-------------------------------+------+------------+-----------+
| subscription | destinations | mode | projection | selection |
+--------------+-------------------------------+------+------------+-----------+
| test | 127.0.0.1:8913,127.0.0.1:8923 | ALL | | |
+--------------+-------------------------------+------+------------+-----------+
Now, you can use telegraf to send data to any location.