有必要在kafka流中显式地使用事务来获得“有效的一次”行为吗?

nbnkbykc  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(350)

合流的一篇文章说
在kafka streams库中编写的流处理应用程序只需更改一个配置,就可以打开一次语义,将名为“processing.guarange”的配置设置为“exactly\u once”(默认值为“at\u least\u once”),而无需更改代码。
但是,当事务被称为被使用时,我想知道:事务是由kafka流隐式使用的,还是我必须显式使用它们?
换言之,我必须打电话给 .beginTransaction() 以及 .commitTransaction() ,或者这一切真的都是在幕后处理的,剩下的我要做的就是微调 commit.interval.ms 以及 cache.max.bytes.buffering ?

46scxncf

46scxncf1#

kafka streams使用transactions api隐式地实现一次语义,因此不需要设置任何其他配置。
如果你继续读博客,它会说:
“更具体地说,当  processing.guarantee  配置为  exactly_once ,kafka streams使用事务id设置内部嵌入式生产者客户端,以启用幂等性和事务性消息传递功能,并将其消费者客户端设置为读取提交模式,以仅从上游生产者提交的事务中获取消息。”
更多细节可以在kip-129中找到:streams-exactly-once语义

相关问题