是否有必要在 Kafka Streams 中显式使用事务来获取"effectively once"行为?



Confluence文章陈述

在Kafka Streams库中编写的流处理应用程序只需更改一次配置,就可以完全打开一次语义,将名为"processing.assure"的配置设置为"exactly_once"(默认值为"at_least_once"(,无需更改代码。

但据说要使用事务,我想知道:事务是由Kafka Streams隐式使用的,还是必须显式使用

换句话说,我是否必须调用类似.beginTransaction().commitTransaction()的东西,或者所有这些都真的在幕后得到了处理,而我要做的就是微调commit.interval.mscache.max.bytes.buffering

Kafka Streams使用transactions API隐式地实现精确一次语义,因此不需要设置任何其他配置。

如果你继续阅读博客,上面写着:

"更具体地说,当processing.guarantee配置为exactly_once时,Kafka Streams将事务id为的内部嵌入式生产者客户端设置为启用幂等性和事务消息传递功能,并将其消费者客户端设置为读取提交模式,仅从上游生产者的已提交事务中获取消息">

更多详细信息可在KIP-129中找到:流精确一次语义

最新更新