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

Flink CDC Sink到Redis是没有实现两阶段提交的吗?

Flink CDC Sink到Redis是没有实现两阶段提交的吗image.png
我用自定义写的

展开
收起
真的很搞笑 2023-07-02 16:40:19 159 0
3 条回答
写回答
取消 提交回答
  • 是的,目前 Flink CDC 中的 Redis Sink 还没有实现两阶段提交。两阶段提交(Two Phase Commit)的主要目的是确保将数据同时同步到多个 Sink,并处理可能发生的部分 Sink 失败的情况。

    具体来说,两阶段提交包括以下两个阶段: 1. 准备阶段(Prepare):将数据提交到多个 Sink。如果任何一个 Sink 准备失败,整个事务将回滚。 2. 提交阶段(Commit):如果准备阶段成功,将多个 Sink 的数据实际提交。

    在 Flink CDC 中,目前只支持简单地将变更日志的数据同步到单个 Sink 上。这意味着如果 Redis Sink 在消费过程中发生失败,Flink CDC 会丢失消费者的偏移量,从上次失败的位置重新开始消费。因此,数据可能会出现重复的情况。

    要实现两阶段提交,Flink CDC 需要完成以下工作: 1. 支持将一个表同时同步到多个 Sink。 2. 在 Sink 端实现两阶段提交的准备和提交阶段。 3. 在 Flink 层面提供补偿机制,处理部分 Sink 准备或提交失败的情况。

    实现这些功能需要 Flink CDC 与 Sink 之间的适配。目前 Redis Sink 还没有实现这些功能。

    然而,有一个名为 "ververica-connector-redis" 的开源项目可以用作 Redis Sink,并且支持两阶段提交协议。您可以在 Maven 仓库中找到该项目的相关信息。请注意,使用此项目时需要确保与 Flink 的版本匹配。

    2023-07-30 12:56:36
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    很对,Flink CDC 的 Redis Sink 目前还没有实现两阶段提交。
    两阶段提交(Two phase commit)的主要作用是:
    保证数据在同时同步到多个 Sink 时的一致性
    处理可能发生的部分 Sink 失败的情况
    具体来说,两阶段提交包括:
    准备阶段(Prepare):将数据提交到多个 Sink。如果有任何 Sink 准备失败,则整个事务回滚
    提交阶段(Commit):如果准备成功,则将多个 Sink 数据实际提交。
    在 Flink CDC 中,目前只支持简单地将变更日志的数据同步到单个 Sink 上。
    也就是说,如果 Redis Sink 在消费过程中失败,Flink CDC 会丢失 consumers offset,从上次失败的位置重新开始消费。数据可能会重复。
    为实现两阶段提交,Flink CDC 需要做如下工作:
    支持将一个 Table 同时同步到多个 Sink
    在 Sink 端实现两阶段提交的 prepare 和 commit 阶段
    Flink 层面提供补偿机制,处理部分 Sink 准备或提交失败的情况
    这需要 Flink 与 Sink 之间的适配,目前 Redis Sink 还没有实现。
    但相信在未来的版本中,Flink CDC 会支持多 Sink 输出以及两阶段提交的功能。

    2023-07-30 10:50:23
    赞同 展开评论 打赏
  • 2023-07-02 16:46:09
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Redis在唯品会的应用实践——架构演进与功能定制 立即下载
    微博的Redis定制之路 立即下载
    云数据库Redis版的开源之路 立即下载