我们正在尝试使用 Kafka Streams 实现重复数据删除服务。
总体而言,它将使用它的rocksDB状态存储来在处理过程中检查现有的密钥。
如果我错了,请纠正我,但为了使这些 stateStore 也具有容错能力,Kafka Streams API 将透明地复制 Kafka 主题内的 stateStore 中的值(称为更改日志)。
这样,如果我们的服务出现故障,另一个服务将能够根据 Kafka 中找到的 ChangeLog 重建其 stateStore。
但这向我提出了一个问题,这个“StateStore -->changelog”本身是否恰好是一次?
我的意思是,当服务更新其 stateStore 时,它也会以一次的方式更新变更日志..?
如果服务崩溃,另一个服务将承担负载,但我们能否确定它不会错过崩溃服务的 stateStore 更新?
Regards,
Yannick
简短的回答是肯定的。
使用事务 - 原子多分区写入 - Kafka Streams 确保,当执行偏移提交时,状态存储也会刷新到代理上的更改日志主题。上述操作是原子的,因此如果其中一个操作失败,应用程序将从先前的偏移位置重新处理消息。
您可以在以下博客中阅读有关恰好一次语义的更多信息https://www.confluence.io/blog/enabling-exactly-kafka-streams/。有一节:How Kafka Streams Guarantees Exactly-Once Processing
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)