Springboot项目集成Kafka实现Hbase数据插入

1. 依赖引入

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.beantechs</groupId>
    <artifactId>xmap-chanels</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>xmap-chanels</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--hbase依赖-->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-mapreduce</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <!-- 集成redis依赖  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.配置文件

hbase-site.xml:
在这里插入图片描述

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop100:8020/hbase</value>
    </property>
<!--开启hbase分布式存储模式-->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
<!--zookeeper集群-->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop100,hadoop102,hadoop103</value>
    </property>
    <!-- zk session超时时间 -->
    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000</value>
    </property>
</configuration>

3.代码实现

package com.beantechs.services;

import com.beantechs.utils.DateUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.Serializable;


@Service
public class KafkaConsumer implements Serializable {
    private static final long serialVersionUID = -1;
    @Resource
    StringRedisTemplate stringRedisTemplate;
//监听kafkatopic
    @KafkaListener(topics = "map_test_topic",groupId = "map-g1")
    public String test(ConsumerRecord<Object,String> record ){
        String value = record.value();
        System.out.println(value);
        String[] split = value.split("\t");
        String laneIdx = split[2];
        String type = split[3];
        String tid = split[4];
        //生成车辆id,车辆id位固定值
        String geom = split[7];
        //时间处理:转为时间戳,即10位数字,使用10位最大数减去时间戳:29/8/2022 16:02:43
        String createTime = split[6];
        String replace = createTime.replace("'", "");
        Long timeStamp1= DateUtils.getTimeStamp(replace);
        //生成rowKey: 网格id,vin,createTime,以横线隔开
//        String gridId = IDUtils.getTrackId();e60e85e1
        String gridId ="e60e85e1";
        String rowKey= gridId+"-"+"666666"+"-"+timeStamp1;
        //创建Put对象
        Put put = new Put(Bytes.toBytes(rowKey));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("tid"),Bytes.toBytes(tid));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("geom"),Bytes.toBytes(geom));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("laneIdx"),Bytes.toBytes(laneIdx));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("type"),Bytes.toBytes(type));
        //将数据保存到hbase上
        //hbase配置
        Configuration hbaseConf = HBaseConfiguration.create();
        try {
            Connection conn = ConnectionFactory.createConnection(hbaseConf);
            Table table=conn.getTable(TableName.valueOf("xmap","line_opt"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("数据保存成功");
        //将网格id保存到redis中,并统计次数
        ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
        operations.increment(gridId, 1L);
        System.out.println("同一网格数据条数:"+operations.get(gridId));
//        Jedis jedis = new Jedis("hadoop100");
//        jedis.incrBy(gridId,1L);
//        String s = jedis.get(gridId);
//       System.out.println("同一网格数据条数:"+s);
        return "the data insert into hbase success";

    }
}

4.成果展示
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 基于Netty的socket server ------ ## 介绍 使用Netty分别实现了三个Socket server和一个socket client: > * server1:9099 主要用来跟硬件传感器通信 > * server2:8888/websocket 作为websocket服务端跟网页通信 > * server2:8889/websocket 跟storm服务做数据通信,同时也作为websocket服务端跟网页通信 > * client 作为模拟客户端,跟server1建立连接后,不断给服务端发送假数据 整个项目启动后,主要做了下面几件事: - [ ] 创建socket server和socket client,并建立连接 - [ ] 执行定时任务,每5秒socket server往所有连接的socket client发送请求数据命令 - [ ] socket client接受到请求数据的命令后,从mysql中读取假数据,伪造成真实设备传输的数据格式,并发送给socket server - [ ] socket server接收到返回的数据后,分别写入到hbase数据库和kafka队列中 - [ ] 最后调用websocket server,往所有跟它建立的客户端发送接收到的数据 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值