将kafka主题中的数据写到HBase中

本文介绍了一个将Kafka主题数据实时写入HBase的Java项目实施过程,包括创建Maven项目、配置依赖、设计接口及其实现、编写Kafka和HBase的工具类,以及创建工厂类进行数据路由。测试类App负责数据消费和写入,前提是在HBase中预先配置好相应的表结构。
摘要由CSDN通过智能技术生成

写在前面,最好将虚拟机的ip地址映射写到windows下的hosts文件中,不然连接会非常的耗时。具体路径:C:\Windows\System32\drivers\etc\hosts

1.新建maven项目——kafkatohbase

项目架构如下:

2.导入pom.xml的依赖

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <kafka.version>2.0.0</kafka.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka_2.11</artifactId>
      <version>${kafka.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-clients</artifactId>
      <version>${kafka.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <version>1.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-common -->
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-common</artifactId>
      <version>1.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server -->
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-server</artifactId>
      <version>1.2.0</version>
    </dependency>
  </dependencies>

3.创建读kafka主题的接口——Read.java

package cn.alisa.kafkatohbase.services;

import org.apache.kafka.clients.consumer.ConsumerRecords;

import java.util.Properties;

//读kafka的接口
public interface Read {
    public ConsumerRecords<String,String> readKafka(Properties prop,String topic);

}

4.创建写到hbase中的写接口——Write.java

package cn.alisa.kafkatohbase.services;

import org.apache.kafka.clients.consumer.ConsumerRecords;

//往hbase中写的接口
public interface Write {
    public void saveDataToHBase(ConsumerRecords<String,String> records);

}

5.创建实现Read接口的方法——KafkaReadImpl.java

package cn.alisa.kafkatohbase.services.kafkareadimpl;

import cn.alisa.kafkatohbase.services.Read;
import cn.alisa.kafkatohbase.services.Write;
import cn.alisa.kafkatohbase.services.commons.KafkaUtils;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;


public class KafkaReadImpl implements Read {

    private Write write;
    //构造器
    public KafkaReadImpl(Write write){
        this.write=write;
    }

    @Override
    public ConsumerRecords<String, String> readKafka(Properties prop,String topic) {
        //获得kafka的consumer
        KafkaConsumer<String,
以下是一个示例代码,演示如何使用Flink从Kafka消费数据,并将其存储到HBase。 ```java import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; 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 java.util.Properties; public class KafkaToHBase { public static void main(String[] args) throws Exception { // 设置执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 设置Kafka消费者属性 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test"); // 创建Kafka消费者 FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("my-topic", new SimpleStringSchema(), properties); // 从最早开始消费 consumer.setStartFromEarliest(); // 读取Kafka数据流 DataStream<String> kafkaStream = env.addSource(consumer); // 将数据写入HBase Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); config.set("hbase.zookeeper.property.clientPort", "2181"); Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("my-table")); kafkaStream.map(str -> { String[] parts = str.split(","); Put put = new Put(Bytes.toBytes(parts[0])); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes(parts[1])); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col2"), Bytes.toBytes(parts[2])); return put; }).addSink(new HBaseSink(table)); // 执行任务 env.execute("Kafka to HBase"); } private static class HBaseSink extends RichSinkFunction<Put> { private final Table table; public HBaseSink(Table table) { this.table = table; } @Override public void invoke(Put put, Context context) throws Exception { table.put(put); } @Override public void close() throws Exception { super.close(); table.close(); } } } ``` 注意:上述代码HBase连接配置和表名需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值