Kafka只存储了一次容错功能?

zqdjd7g9  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(406)

我们正在尝试使用kafka流实现重复数据消除服务。总的来说,它将使用rocksdb状态存储,以便在处理过程中检查现有的密钥。
如果我错了,请纠正我,但是为了使那些statestores也具有容错性,kafka streams api将透明地将statestore中的值复制到kafka主题(称为更改日志)中。这样,如果我们的服务失败,另一个服务将能够根据kafka中的changelog重建其statestore。
但这让我想到了一个问题,这个“statestore-->changelog”本身是否只有一次?我的意思是,当服务更新它的statestore时,它也会以一次一次的方式更新changelog?如果服务崩溃,另一个将承担负载,但我们能确定它不会错过来自崩溃服务的statestore更新吗?
当做,
扬尼克

4urapxun

4urapxun1#

简而言之,答案是肯定的。
使用事务-原子多分区写入-kafka流,可以确保在执行偏移提交时,状态存储也会闪现到代理上的changelog主题。上述操作是原子操作,所以若其中一个操作失败,应用程序将重新处理来自上一个偏移位置的消息。
你可以在下面的博客里读到更多关于精确语义的信息https://www.confluent.io/blog/enabling-exactly-kafka-streams/. 有以下部分: How Kafka Streams Guarantees Exactly-Once Processing .

h9a6wy2h

h9a6wy2h2#

但这让我想到了一个问题,这个“statestore-->changelog”本身是否只有一次?
是的——正如其他人在这里已经说过的。当然,您必须通过配置参数将应用程序配置为只使用一次语义 processing.guarantee ,请参见https://kafka.apache.org/21/documentation/streams/developer-guide/config-streams.html#processing-保证(此链接适用于ApacheKafka2.1)。
我们正在尝试使用kafka流实现重复数据消除服务。总的来说,它将使用rocksdb状态存储,以便在处理过程中检查现有的密钥。
上还有一个重复事件消除示例应用程序https://github.com/confluentinc/kafka-streams-examples/blob/5.1.0-post/src/test/java/io/confluent/examples/streams/eventdeduplicationlambdaintegrationtest.java. 此链接指向confluent platform 5.1.0的repo分支,该分支使用ApacheKafka 2.1.0=kafka的最新版本。

相关问题