废话不多说,直接上代码,定义两个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