You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by zilong xiao <ac...@gmail.com> on 2022/01/04 02:32:23 UTC

Re: Flink Kafka e2e exactly once问题询问

kafka是有拒绝超时事务提交机制的

Michael Ran <gr...@163.com> 于2021年12月31日周五 14:40写道:

> 没测试过,如果kafka 确定自身会丢掉超时事务消息的前提下,比如10分钟超时丢消息。<br/>1.flink
> 发送消息A,进入第一阶段。<br/>2.flink 等待kafka 消息一阶段 ack信息  <br/>3.flink
> 收到ack消息,发送二阶段确认消息,并进行chk <br/>   异常:
> 这个时候flink第二阶段消息确认,发送失败(同时flink应用因为各种原因挂了,超过10分钟)<br/>3.1 10分钟后,kakfa
> 丢弃事务超时的消息<br/>3.2 flink 重启,重新提交二阶段的事务id (但是由于kakfa
> 消息已经丢了,提交无效)<br/><br/>猜测:当二阶段commit失败的时候,是否根据重发消息来解决?同时引入幂等保证
> 在 2021-12-31 11:31:49,"zilong xiao" <ac...@gmail.com> 写道:
> >看官方文档中有介绍说当kafka事务超时时,可能会出现数据丢失的情况,那就是说,Flink没办法完全保证端到端exactly
> >once是么?想请教下社区大佬,我这么理解是正确的吗?一直都听说Flink 写kafka是可以保证端到端exactly
> once的,看到文档描述有点懵
> >
> >文档地址:
> >
> https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/connectors/datastream/kafka/#kafka-producers-and-fault-tolerance
> >
> >关键字:"If the time between Flink application crash and completed restart is
> >larger than Kafka’s transaction timeout there will be data loss (Kafka
> will
> >automatically abort transactions that exceeded timeout time)."
>