你好, 如果你希望端到端的 ExactlyOnce 需要 Sink 做一些事情,现在社区有一个 TwoPhaseCommitFunction[1] 用于支持这种特性,这里有一篇详细讲解的文章[2] 供参考。
[1] https://ci.apache.org/projects/flink/flink-docs-release-1.9/api/java/org/apache/flink/streaming/api/functions/sink/TwoPhaseCommitSinkFunction.html [2] https://flink.apache.org/features/2018/03/01/end-to-end-exactly-once-apache-flink.html Best, Congxian 马卿云 <maqy1...@qq.com> 于2019年9月10日周二 下午5:09写道: > 你好, > 这种情况下应该就如jasine chen所说的那样,需要外部系统的支持,比如配合kafka的事务来提交。 > > > > 祝好, > maqy > > > ------------------ 原始邮件 ------------------ > 发件人: "Jimmy Wong"<wangzmk...@163.com>; > 发送时间: 2019年9月9日(星期一) 下午3:52 > 收件人: "user-zh@flink.apache.org"<user-zh@flink.apache.org>; > 抄送: "user-zh"<user-zh@flink.apache.org>; > 主题: 回复:Kafka 与 extractly-once > > > > Hi, 卿云: > > 感谢你的回答!我知道Extractly-Once是指算子不同更新在结果上只反映一次,不是算子只进行一次计算。但是,对于我的这种场景,算子多次计算的结果都会发往下游,从而导致结果会反映算子每次更新。 > > > | | > Jimmy > | > | > wangzmk...@163.com > | > 签名由网易邮箱大师定制 > > > 在2019年09月9日 14:31,马卿云<454618...@qq.com> 写道: > &nbsp; &nbsp; &nbsp; &nbsp; > 应该会被再次消费,似乎现有的流式处理系统中所说的exactly once,实际上指的一般都是最终结果上是exactly > once,而不是保证消息只被消费一次。也就是说,虽然有些消息被消费了多次,但是效果上等同于只被消费了一次。 > &nbsp; &nbsp; &nbsp; &nbsp;知乎上看到的这篇文章里面有讲这个问题: > &nbsp; &nbsp; &nbsp; > &nbsp;端到端一致性,流系统Spark/Flink/Kafka/DataFlow对比总结(压箱宝具呕血之作) - 阿莱克西斯的文章 - > 知乎 > https://zhuanlan.zhihu.com/p/77677075 > > > > > 祝好, > maqy > > > ------------------ 原始邮件 ------------------ > 发件人:&nbsp;"Jimmy Wong"<wangzmk...@163.com&gt;; > 发送时间:&nbsp;2019年9月9日(星期一) 中午11:50 > 收件人:&nbsp;"user-zh@flink.apache.org"<user-zh@flink.apache.org&gt;; > > 主题:&nbsp;Kafka 与 extractly-once > > > > Hi,all: > 请教一下,我设置 checkpoint 的时间是 5 分钟,如果在这 5 分钟之内,某个 task 挂了,然后又重新拉起。我是不是可以理解为这时候从 > checkpoint 的数据获得的是这 5 分钟之前的 Kafka offset,但是这 5 > 分钟之内的消息已经消费,流向下游。重新拉起之后,source 重放,那么这时候这 5 分钟的数据会再次被消费麽?如果再次消费,那么怎么保证 > Extractly-Once 呢? > | | > Jimmy > | > | > wangzmk...@163.com > | > 签名由网易邮箱大师定制