卡夫卡流stateStores容错恰好一次?

问题描述 投票:0回答:2

我们正在努力实现用卡夫卡流的重复数据删除服务。大的图景是,它将使用其rocksDB状态存储在订购过程中,检查现有的密钥。

请纠正我,如果我错了,而是让那些stateStores容错过,卡夫卡流API将透明的stateStore的值复制卡夫卡主题(称为更改日志)内。这样,如果我们的服务下降,其他服务将能够根据卡夫卡发现的changelog重建其stateStore。

但它提出了一个问题,在我看来,这样做“StateStore - >更新日志”本身正是一次?我的意思是,当服务将更新其stateStore,它将更新更改日志中的只出现一次时尚太..?如果服务崩溃,另一个将采取载荷,但我们肯定不会错过的崩溃服务stateStore更新?

问候,

雅尼克

apache-kafka apache-kafka-streams fault-tolerance
2个回答
1
投票

简短的回答是肯定的。

使用事务 - 原子多分区写入 - 卡夫卡流保证,当偏移犯进行,状态存储也闪现的changelog在经纪人的话题。上述操作是原子的,所以,如果他们中的一个将失败,应用程序将重新处理以前的偏移位置信息。

您可以在以下博客更多关于恰好一次语义https://www.confluent.io/blog/enabling-exactly-kafka-streams/读取。还有部分:How Kafka Streams Guarantees Exactly-Once Processing


0
投票

但它提出了一个问题,在我看来,这样做“StateStore - >更新日志”本身正是一次?

是的 - 正如其他人已经在这里说。当然,您必须配置您的应用程序通过配置参数processing.guarantee使用仅一次的语义,请参阅https://kafka.apache.org/21/documentation/streams/developer-guide/config-streams.html#processing-guarantee(此链接是Apache卡夫卡2.1)。

我们正在努力实现用卡夫卡流的重复数据删除服务。大的图景是,它将使用其rocksDB状态存储在订购过程中,检查现有的密钥。

还有可在https://github.com/confluentinc/kafka-streams-examples/blob/5.1.0-post/src/test/java/io/confluent/examples/streams/EventDeduplicationLambdaIntegrationTest.java事件的重复数据删除应用实例。该链接指向回购分行汇合平台5.1.0,它使用Apache 2.1.0卡夫卡现在=可用的最新版本卡夫卡。

© www.soinside.com 2019 - 2024. All rights reserved.