Flink CDC Sink到Redis是没有实现两阶段提交的吗
我用自定义写的
是的,目前 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 的版本匹配。
很对,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 输出以及两阶段提交的功能。
你没实现两阶段提交协议用它,和flink同版本就行
https://mvnrepository.com/artifact/com.alibaba.ververica/ververica-connector-redis不可降集群版本就用jdbc的两阶段提交写入redis,此回答整理自钉群“Flink CDC 社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。