flink 端到端的 exactly-once(精确一次)

从source 到 flink的exactly-once  文章很多自己看。

问题来源于群里一个人的提问。

flink运算结果在落地的时候怎么保证exactly-once。

目前两种方式,

1、一种是利用幂等性。

举例说明,假设现在 要把mysql的数据同步到oracle。有Insert记录和update记录。怎么保证oracle中结果是正确的 。oracle中加一个主键。那么多次Insert的时候  由于主键的存在  最终结果是正确的。

对于多次 Update,  在数据有序的情况下 , 多次Update 最终结果 也是正确的。对于同一个id hash到同一个 kafka分区来保证 数据的有序。

2、第二种呢方法是利用事务性, 关系型数据库大多是支持事务的。如果要写入 es这样不支持事务的 存储器里边怎么办。

可以将flink的汇总数据写入 kafka,目前kafka的连接器是支持事务的,这个估计也就是为什么做实时数仓的要将汇总数据写入kafka的原因之一。 之后可以利用  ELK的ack机制来保证exactly-once 。

发布了83 篇原创文章 · 获赞 19 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u013939918/article/details/105537261