Flink与vm时序数据库结合(一)

通过自定义Flink的Sink类,实现将数据写入vm时序数据库。

Flink代码

主函数入口

package example;

import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import java.util.ArrayList;
import java.util.List;

/**
 * @author admin
 * <p>
 * using flink,write to vm use influxdb protocol
 */
public class Write2VMByFlink {

    public static List<String> dataSource() {
        List<String> list = new ArrayList();
        for (int i = 1; i < 10; i++) {
            list.add("" + i);
        }
        return list;
    }

    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStream<String> dataStreamSource = env.fromCollection(dataSource());
        dataStreamSource.addSink(new VmSink()).name("vmSink");
        env.execute();
    }
}

Sink类

package example;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.WriteApi;
import com.influxdb.client.domain.WritePrecision;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import com.influxdb.client.write.Point;

import java.time.Instant;

/**
 * @author admin
 */
public class VmSink extends RichSinkFunction<String>  {
    private String bucket = "flink";
    private String org = "galaxy";
    private WriteApi writeApi;

    @Override
    public void open(Configuration parameters) throws Exception {
        if(null==writeApi){
            InfluxDBClient client = InfluxDBClientFactory.create("http://localhost:8428");
            writeApi = client.getWriteApi();
        }
    }

    @Override
    public void invoke(String value,Context context)  throws Exception{
        Point point = Point
                .measurement("sun")
                .addTag("writeWay", "flinkSink")
                .addField("percent"+value, Integer.parseInt(value)*2)
                .time(Instant.now(), WritePrecision.MS);
        writeApi.writePoint(bucket, org, point);
    }

    @Override
    public void close() throws Exception {
        if(null==writeApi){
            InfluxDBClient client = InfluxDBClientFactory.create("http://localhost:8428");
            writeApi = client.getWriteApi();
        }
        writeApi.flush();
    }

}

注意点:

需要flush才真正将数据写入vm,本示范例子只是一个初步的尝试。

maven依赖

<flink.version>1.14.0</flink.version>
        <dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-java</artifactId>
			<version>${flink.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-java_2.11</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-clients_2.11</artifactId>
			<version>${flink.version}</version>
		</dependency>
		<dependency>
			<groupId>com.influxdb</groupId>
			<artifactId>influxdb-client-java</artifactId>
			<version>2.0.0</version>
		</dependency>
		

Grafana页面

创建变量,sun为metric,percent1为字段,writeWay为tag字段,在代码中的值为flinkSink。 

 在页面即可选择“写入方式”

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink大数据和时序数据库是两个不同的概念和技术。Flink是一个开源的流处理和批处理框架,用于处理大规模的实时和批量数据。它提供了强大的流处理功能,可以处理实时数据流,并支持事件时间和处理时间的窗口操作。Flink可以用于构建实时分析、实时监控和实时报警等应用。 时序数据库(TSDB)是一种专门用于存储和处理时序数据的数据库时序数据是带有时间戳的数据,常见的应用场景包括监控数据、行驶轨迹、设备传感器等。时序数据库具有高效的数据存储和查询能力,可以支持大规模的时序数据的存储和分析。时序数据库通常采用特定的数据结构和索引方式,以提高时序数据的查询能和存储效率。 在实际应用中,Flink大数据和时序数据库可以结合使用Flink可以用于实时处理和分析数据流,而时序数据库可以用于存储和查询大规模的时序数据。通过将Flink时序数据库集成,可以实现实时数据的处理和存储,并支持复杂的时序数据分析和查询操作。这种组合可以满足对大规模时序数据的实时处理和分析需求。 #### 引用[.reference_title] - *1* *2* *3* [时序数据库](https://blog.csdn.net/xinzhongtianxia/article/details/125607615)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值