flink连接kafka整合hbase,scala

本文详细介绍了如何使用Scala编程语言,通过Apache Flink连接Kafka消费JSON格式的数据,并将解析后的数据存入HBase数据库。整个过程涵盖了数据的获取、解析以及入库操作。
摘要由CSDN通过智能技术生成

解析kafka当中的json格式的数据,入hbase

import java.util.Properties

import com.alibaba.fastjson.{JSON, JSONObject}
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.contrib.streaming.state.RocksDBStateBackend
import org.apache.flink.streaming.api.CheckpointingMode
import org.apache.flink.streaming.api.environment.CheckpointConfig
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011



object IncrementOrder {
  def main(args: Array[String]): Unit = {
    val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //隐式转换
    import org.apache.flink.api.scala._
    //checkpoint配置
    environment.enableCheckpointing(100);
    environment.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
    environment.getCheckpointConfig.setMinPauseBetweenCheckpoints(500);
    environment.getCheckpointConfig.setCheckpointTimeout(60000);
    environment.getCheckpointConfig.setMaxConcurrentCheckpoints(1);
    environment.getCheckpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
  environment.setStateBackend(new RocksDBStateBackend("hdfs://node01:8020/flink_kafka/checkpoints&#
以下是一个简单的示例代码,通过FlinkKafka数据存入HBase: ``` import org.apache.flink.api.common.functions.MapFunction import org.apache.flink.api.common.serialization.SimpleStringSchema import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer import org.apache.flink.streaming.connectors.hbase.* import org.apache.hadoop.hbase.client.Put import org.apache.hadoop.hbase.util.Bytes object KafkaToHBase { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment val kafkaProps = new Properties() kafkaProps.setProperty("bootstrap.servers", "localhost:9092") kafkaProps.setProperty("group.id", "test") val kafkaConsumer = new FlinkKafkaConsumer[String]("topic", new SimpleStringSchema(), kafkaProps) val hbaseProps = new Properties() hbaseProps.setProperty("zookeeper.quorum", "localhost:2181") hbaseProps.setProperty("zookeeper.znode.parent", "/hbase-unsecure") hbaseProps.setProperty("write.buffer.max.size", "20971520") // 20 MB val hbaseOutputFormat = new HBaseOutputFormat(new org.apache.hadoop.hbase.client.ConnectionConfiguration(hbaseProps)) val stream = env .addSource(kafkaConsumer) .map(new MapFunction[String, Put] { val cfBytes = Bytes.toBytes("cf") override def map(value: String): Put = { val rowkey = "some row key" val put = new Put(Bytes.toBytes(rowkey)) put.addColumn(cfBytes, Bytes.toBytes("data"), Bytes.toBytes(value)) put } }) .output(hbaseOutputFormat) env.execute("Kafka to HBase") } } ``` 需要注意的点: 1. 在HBaseOutputFormat实例化时需要传入一个org.apache.hadoop.hbase.client.ConnectionConfiguration对象,用于与HBase进行连接。 2. 在map函数中将Kafka数据转化为HBase Put对象时需要指定一个rowkey。这个rowkey可以按照需要进行设计,例如可以设置成Kafka数据的某个字段。 3. 在map函数中将Kafka数据转化为HBase Put对象时需要指定column family和column qualifier以及对应的value。这里使用了一个名为“cf”的column family和一个名为“data”的column qualifier。如果需要根据业务需要进行更改。 4. HBaseOutputFormat默认是批量写入模式,需要在HBase配置文件中指定write ahead log的大小,以及每次写入的缓冲区大小等。如果需要进行实时写入,则需要将批量写入模式关闭。可以通过在HBase连接配置中设置"HBASE_CLIENT_OPERATION_TIMEOUT"来达到此目的。单位是毫秒,设置为0表示禁用批处理模式。 5. 在实际使用时需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值