基于Flink+Hive+Kafka的流批一体数仓实践--02模拟kafka生产数据

本文介绍了如何使用Scala工具类JsonMock和RandomOptions模拟生成Flink自定义数据源Goodme_Source的Kafka生产数据。数据包含时间戳,用于后续的事件时间处理和数据分区。内容中提到了数据样式和如何将数据发送到Kafka。
摘要由CSDN通过智能技术生成

废话不多说,直接上代码,定义两个scala工具类,然后JsonMock模拟生产数据作为flink自定义数据源Goodme_Source。自定义数据源需要重写SourceFunction,后面再说。然后sink到Kafka。

{
   "orderMaster":{
   "area":"周口","orderID":"1207687863","brandId":"Goodme","customerID":"1697","orderStatus":"40","orderChannel":"饿了么","storeCode":"332123","ts":1609840003168},"oredrDetail":{
   "foodName":"杨枝甘露椰奶","payAmount":46,"orderID":"1207687863","foodAmount":4}}

数据样式如上:(ps:为了后面进行数据分区,添加时间戳作为后面解析需要的eventtime)
随机数工具(模拟订单号、门店编码等)

import scala.collection.mutable
import scala.util.Random

/**
 * 生成随机数据的工具
 */
object RandomNumUtil {
   
  def main(args: Array[String]): Unit = {
   
   val a  =  randomLong(1,6)
    print(a)
  }
  /*随机数生成器对象*/
  private val random = new Random()

  /**
   * 生成随机的整数, 区间: [from, to]  模拟订单编号
   *
   * @param from
   * @param to
   * @return
   */
  def randomInt(from: Int, to: Int): Int = {
   
    if (from > to) throw new IllegalArgumentException(s"from: $from 不能大于 to: $to")
    else random.nextInt(to - from + 1) + from
  }

  /**
   * 创建多个 Int 值
   *
   * @param from
   * @param to
   * @param count     创建的 Int 值的顺序
   * @param canRepeat 是否允许重复
   * @return List[Int] 集合
   */
  def randomMultiInt(from: Int, to: Int, count: Int, canRepeat: Boolean = true): List[Int] = {
   
    if (canRepeat) {
   
      (1 to count).toList.map(_ => randomInt(from, to))
    } else {
   
      val set = mutable.Set[Int]()
      while (set.size 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值