开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

flink cdc输出到kafka后,在更新数据或者删除数据的时候,flink内部的执行过程是什么?

flink cdc输出到kafka后,用kafka流数据去关联 look up的维表,然后根据kafka流数据中status字段进行count聚合。在更新数据或者删除数据的时候,flink内部的执行过程是什么啊?现在我这边结果很奇怪,例如A商品的某订单状态由1变成2,理论上聚合数据应该是状态1的数据-1,状态2的数据+1。但是核实下来哪怕实际A商品的订单中已经没有状态为1的商品订单了。仍然回保留一条,A商品状态为1,订单数为1.。。。最后这个1永远不会变成0。订单状态如果数量大于1,订单数都和实际源库sql查询的结果一致

展开
收起
真的很搞笑 2023-10-10 19:24:28 271 0
3 条回答
写回答
取消 提交回答
  • 从数据库捕获更新或删除事件。
    将捕获到的事件转换为Flink内部的数据类型,如Apache Avro格式。
    将转换后的事件发送到Kafka主题。
    Flink CDC将接收到的更新或删除事件传递给下游应用程序进行处理。

    2023-10-12 16:01:26
    赞同 展开评论 打赏
  • 月移花影,暗香浮动

    对于你描述的问题,这里可能涉及到一些数据处理和状态保留的问题。在 Flink 中,数据流是按照事件时间(event time)或处理时间(processing time)进行处理的,每个事件都会触发一次状态更新。

    对于你的情况,将 CDC 数据从 Flink 输出到 Kafka,然后使用 Kafka 流数据进行关联和聚合,这里需要注意以下几点:

    1、数据的一致性:确保数据的正确性非常重要,需要确保 CDC 数据与源数据库数据的一致性。这可以通过校验数据的完整性和一致性来验证。
    2、聚合函数:对于状态聚合,你可能需要使用合适的聚合函数,如 reduce 或 aggregate,以便正确计算状态聚合。根据你的描述,你可能需要使用 reduce 函数来计算状态字段的聚合值。
    3、状态保留:Flink 中的状态保留策略也会影响你观察到的结果。默认情况下,Flink 会保留所有状态数据,即使在数据流经过窗口或时间戳后,状态数据仍然会保留在 Flink 的状态中。如果你发现状态数据没有正确更新,可以尝试调整状态保留策略或清除旧的状态数据。
    4、事件时间和处理时间:Flink 在处理事件时有两种时间概念:事件时间和处理时间。事件时间是每个事件的时间戳,处理时间是 Flink 任务启动的时间。如果事件时间和处理时间不一致,可能会导致聚合结果不正确。你可以考虑使用事件时间作为时间戳,以确保正确处理事件的时间顺序。

    总的来说,要确定问题的根源,最好能提供更多的代码和配置细节,以便更好地理解你的数据处理流程和环境。通过深入了解这些方面,应该可以帮助你找到问题的根源并采取相应的措施来解决它。

    2023-10-11 10:23:13
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    Flink CDC 输出到 Kafka 后,使用 Kafka 流数据进行关联 Look Up 维表,再根据 Kafka 流数据中的 status 字段进行 count 聚合,并且在更新或删除数据时,Flink 内部的执行过程一般如下:

    1. Flink CDC 会持续监听 MySQL 数据库中相应表的更新或删除操作,并将变更后的数据写入 Kafka 的 Topic 中。

    2. Flink 获取 Kafka Topic 的数据流,并进行相关的转换和处理。此处一般涉及到 Join 操作和聚合操作等,具体操作方式根据业务需求而定。

    3. 当输入流中有新数据到达时,Flink 会将其与 Look Up 维表进行 Join 操作,再根据 status 字段进行聚合计算,并生成最终结果输出。

    对于您提供的场景,由于订单状态的变化会导致聚合结果的变化,因此需要考虑到状态变化的影响。如果 A 商品的某个订单从状态 1 变为状态 2,那么可以将状态 1 的记录计数减 1,状态 2 的记录计数加 1。但是,在实际情况中,由于可能存在多个任务同时进行,这就可能导致有些状态已经不存在,但在 Flink 的处理过程中仍然被保留。这种情况下,可以考虑使用时间窗口或其他方式进行优化。

    2023-10-11 07:48:12
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
    MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
    消息队列kafka介绍 立即下载