用Flink实现的一个实时订单对账功能, Flink的双流实时对账

本文探讨了为何在实时订单对账中选用Flink而非传统强事务性数据库,如MySQL,以减轻数据库压力并提高实时性。通过应用watermark确保数据延迟的一致性,并利用processFunction灵活处理迟到数据,设置定时器确保在限定时间内完成对账逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么业务订单数据不用Mysql之类的强事务性数据库监控反而用Flink的实时?

一般这种涉及到订单的数据流都要用mysql监控实现,但是鉴于减少mysql的数据库压力和提高更实时性,

可以考虑用Flink实时的数据流做实时的参考

2.如何处理乱序数据?

使用watermark水位保证第一层数据延迟.PS:这里的水位不能设置太长延迟

使用processfuntion更加灵活的处理迟到数据,设置一个定时器,在定时器触发的时间内完成处理逻辑

 

case class OrderEvent( orderId: Long, eventType: String, txId: String, eventTime: Long )

case class ReceiptEvent( txId: String, payChannel: String, eventTime: Long )

object TxMatch {

  val unmatchedPays = new OutputTag[OrderEvent]("unmatchedPays")
  val unmatchedReceipts = new OutputTag[ReceiptEvent]("unmatchedReceipts")

  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

    val orderEventStream = env.readTextFile("YOUR_PATH\\resources\\OrderLog.csv")
.map( data => {
val dataArray = data.split(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值