万字拆解:SpringBoot3集成TDengine自适应裂变存储

本文详细介绍了如何在SpringBoot3应用中集成TDengine进行自适应裂变存储。通过消费Kafka消息,转换数据,执行入库操作,并在遇到异常时自动扩展列,利用MybatisPlus实现双数据源的无缝配合。文章提供了核心代码示例,展示了从配置到异常处理的完整流程。
摘要由CSDN通过智能技术生成

前言

       今天要要分享的要是紧接之前的设计:物联网设备流水入库TDengine改造方案,这里是具体的实现过程。这个是TDengine可自动扩展列方案,这个方案实现代码绝对是目前独家,关注我,你值得拥有。

一、整体思路

       整体思路:消费信息 》》 数据转换 》》组织sql 》》orm框架自动配备数据源》》执行入库TDengine》》异常处理(扩展的核心)》》DDL执行扩列》》再次执行入库。。。。

       这里大家应该可以猜到具体做法了,其实要不是因为这个列不固定,实现起来可简单多了,也可以用超级表,而且性能也会好很多。更重要的是可以用ORM框架,基本不用写啥sql。而且查询结果用实体接受数据,不会出现VARCHAR字段不能正确显示字符串的问题(我就是被这个坑了下)。        其实也可以用flink等消费信息,做入库处理,当然这样处理可就不能用ORM框架了,只能用经典的JDBC。

       核心思路:根据设备上报数据,做插入数据转换sql,执行入库处理异常,根据异常做DDL操作,实现自动扩列,最后入库。上报的数据:json串做数据转换,数据值做反射获取类型,转换为对应的扩列sql执行、组织入库sql。

二、实现流程图

image.png

我的整体环境:SpringBoot3 + mybatisPlus + 双数据源(mysql、TDengine)+ 集成kafka
消费上游平台放入kafka的信息,然后走以上流程,目标执行入库TDengine。

三、核心代码

这里的整体框架我之前的博文有写,并且是公开独家分享到csdn的gitCode:gitcode.net/zwrlj527/da…

1.引入库

 

xml

复制代码

<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>

2.配置文件

 

ymal

复制代码

spring: #kafka配置 kafka: #bootstrap-servers: 192.168.200.72:9092,192.168.200.73:9092 #bootstrap-servers: 192.168.200.83:9092,192.168.200.84:9092 bootstrap-servers: localhost:9092 client-id: dc-device-flow-analyze consumer: group-id: dc-device-flow-analyze-consumer-group max-poll-records: 10 #Kafka中没有初始偏移或如果当前偏移在服务器上不再存在时,默认区最新 ,有三个选项 【latest, earliest, none】 auto-offset-reset: earliest #是否开启自动提交 enable-auto-commit: false #自动提交的时间间隔 auto-commit-interval: 1000 listener: ack-mode: MANUAL_IMMEDIATE concurrency: 1 #推荐设置为topic的分区数 type: BATCH #开启批量监听 #消费topic配置 xiaotian: analyze: device: flow: topic: consumer: device-flow

3.kafka消费监听

 

java

复制代码

package com.xiaotian.datagenius.kafka; import com.xiaotian.datagenius.service.DataTransService; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.support.Acknowledgment; import org.springframework.stereotype.Component; import java.util.List; /** * 消费者listener * * @author zhengwen **/ @Slf4j @Component public class KafkaListenConsumer { @Autowired private DataTransService dataTransService; /** * 设备流水listenner * * @param records 消费信息 * @param ack Ack机制 */ @KafkaListener(topics = "${easylinkin.analyze.device.flow.topic.consumer}") public void deviceFlowListen(List<ConsumerRecord> records, Acknowledgment ack) { log.debug("=====设备流水deviceFlowListen消费者接收信息===="); try { for (ConsumerRecord record : records) { log.debug("---开启线程解析设备流水数据:{}", record.toString()); dataTransService.deviceFlowTransSave(record); } } catch (Exception e) { log.error("----设备流水数据消费者解析数据异常:{}", e.getMessage(), e); } finally { //手动提交偏移量 ack.acknowledge(); } } }

4.消息具体处理方法(实现)

 

java

复制代码

package com.xiaotian.datagenius.service.impl; import cn.hutool.core.collection.CollectionUtil; im

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值