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

Flink CDC在运行过程中会重复,这个是咋回事?

Flink CDC在运行过程中会重复,这个是咋回事?image.png
MySQL的server id ,给的是一个范围

展开
收起
真的很搞笑 2023-12-10 20:56:33 288 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    从您提供的日志来看,Flink CDC在运行过程中可能会出现重复读取MySQL Binlog的情况。这是因为Flink CDC使用了MySQL Binlog作为其数据源,而在某些情况下,同一个事件可能会被多次写入到MySQL Binlog中。

    当Flink CDC连接到MySQL服务器时,它会开始监听MySQL Binlog中的事件,并将这些事件转换为Flink可用的数据流。在这个过程中,如果同一个事件被多次写入到MySQL Binlog中(例如,因为主从复制或者备份恢复等原因),那么Flink CDC可能会接收到多个相同事件的副本。

    为了避免这种重复读取的问题,Flink CDC提供了重试机制。如果在处理某个事件时发生错误,Flink CDC会重新尝试处理该事件,直到成功为止。这样可以保证即使有重复的事件,也能正确地处理它们。

    如果您希望避免这种重复读取的问题,可以考虑以下几种方法:

    1. 确保MySQL主从复制和备份恢复的配置能够尽量减少重复事件的发生。例如,可以通过调整binlog_format参数来控制MySQL Binlog的格式,以减少重复事件的数量。

    2. 使用Flink CDC的重试机制。虽然这可能会增加一些额外的开销,但是它可以保证在处理重复事件时不会丢失任何数据。

    3. 对于特定的应用场景,可以考虑使用更高级的解决方案,如基于Kafka或Pulsar等消息队列的CDC服务,这些服务通常具有更好的容错能力和处理重复事件的能力。

    2023-12-11 16:21:43
    赞同 展开评论 打赏
  • 在Flink CDC运行过程中出现重复数据的情况,可能是由于多个Flink CDC Slave使用相同的server_uuid或server_id连接到同一个Flink CDC Master导致的。在Flink CDC中,每个Slave都应具有唯一的server_uuid和server_id,否则会出现连接冲突的错误。

    另外,Flink CDC Master和Slave之间的网络连接中断或超时也可能导致Slave断开连接并重新连接到Master,从而导致连接冲突的错误。

    解决方法:

    1. 确保每个Flink CDC Slave都具有唯一的server_uuid和server_id。您可以在启动Flink CDC Slave时使用--server.uuid和--server.id参数来指定server_uuid和server_id。
    2. 检查Flink CDC Master和Slave之间的网络连接是否稳定。您可以检查网络连接的带宽、延迟等指标,以确定是否存在网络连接问题。另外,您可以尝试增加Flink CDC Master和Slave的网络连接超时时间,以避免连接中断或超时。
    3. 检查Flink CDC Master的日志文件,查看是否有其他错误信息。您可以在Flink CDC Master的配置文件中设置日志级别和日志输出路径,以方便查看日志信息。

    总的来说,要确保Flink CDC运行过程中的数据一致性,需要确保每个Slave具有唯一的server_uuid和server_id,并检查Master和Slave之间的网络连接是否稳定。

    2023-12-11 08:59:44
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载