flink kafka consumer (scala)自定义反序列化

话不多说,直接上代码:

import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.api.java.typeutils.TypeExtractor
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.{FlinkKafkaConsumer, KafkaDeserializationSchema}
import org.apache.kafka.clients.consumer.ConsumerRecord

import java.util.Properties

object Consumer {
  def main(args: Array[String]): Unit = {
    //创建flink环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //设置时间语义为,事件时间
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)


    // kafka config
    val props = new Properties()
    props.setProperty("bootstrap.servers", "hosts") //hosts
    props.setProperty("group.id", "droupid") //消费者分组id
    props.setProperty("retries", "10") //重试次数
    props.setProperty("retries.backoff.ms", "100") //每次重试的间隔


    //kafka consumer
    val mykafka = new FlinkKafkaConsumer[User]("topicname", new MyKafkkaDes, props)


    //flink source
    val source = env.addSource(mykafka)

    source.print() //打印


    env.execute("jobname")

  }

}


case class User(id: Long, name: String, age: Int)

class MyKafkkaDes extends KafkaDeserializationSchema[User] {
  override def isEndOfStream(t: User): Boolean = false

  override def deserialize(consumerRecord: ConsumerRecord[Array[Byte], Array[Byte]]): User = {
    val str = new String(consumerRecord.value())
    val lists = str.split(",")

    val userid = lists(0).toLong
    val name = lists(1)
    val age = lists(2).toInt
    User(userid, name, age)
  }

  override def getProducedType: TypeInformation[User] = TypeExtractor.getForClass(classOf[User])
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将FlinkKafka消费的数据序列并存入Hive,可以按照以下步骤进行操作: 1. 配置Kafka消费者和Hive连接 首先需要配置FlinkKafka消费者和Hive连接,可以使用Flink提供的Kafka连接器和Hive连接器来实现。具体的配置可以参考Flink官方文档进行设置。 2. 设计序列类 根据你从Kafka消费的数据格式,需要设计一个序列类来将数据转换为Flink中的对象。例如,如果你从Kafka消费的是JSON格式的数据,可以使用Flink提供的JSON序列类进行转换。 3. 定义Hive表结构 在Hive中创建一个表来存储序列后的数据。你需要定义表的结构,包括列名、列类型和分区等信息。 4. 编写Flink程序 编写一个Flink程序来消费Kafka中的数据,并将数据序列后存入Hive表中。具体的实现可以参考以下代码示例: ```java DataStream<String> dataStream = env.addSource(new FlinkKafkaConsumer<String>( "topic", new SimpleStringSchema(), properties)); DataStream<MyObject> myObjects = dataStream.map(new MapFunction<String, MyObject>() { @Override public MyObject map(String value) throws Exception { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(value, MyObject.class); } }); HiveCatalog hiveCatalog = new HiveCatalog("myHiveCatalog", "default", "/path/to/hive/conf"); TableSchema schema = new TableSchema( new String[] {"id", "name", "age"}, new TypeInformation<?>[] {Types.STRING, Types.STRING, Types.INT}); HiveTableSink hiveTableSink = new HiveTableSink( "myDatabase.myTable", schema, hiveCatalog, new Configuration(), "myPartition"); myObjects.addSink(hiveTableSink); ``` 其中,`MyObject`是你从Kafka消费的数据序列后的对象,`hiveCatalog`是Hive连接器的配置信息,`schema`是Hive表的列信息,`hiveTableSink`是Hive表的输出目的地。 5. 运行Flink程序 配置好Flink程序后,就可以运行程序了。程序会从Kafka消费数据,将数据序列后存入Hive表中。 以上就是将FlinkKafka消费数据序列存入Hive的步骤和示例代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值