合流的一篇文章说
在kafka streams库中编写的流处理应用程序只需更改一个配置,就可以打开一次语义,将名为“processing.guarange”的配置设置为“exactly\u once”(默认值为“at\u least\u once”),而无需更改代码。
但是,当事务被称为被使用时,我想知道:事务是由kafka流隐式使用的,还是我必须显式使用它们?
换言之,我必须打电话给 .beginTransaction()
以及 .commitTransaction()
,或者这一切真的都是在幕后处理的,剩下的我要做的就是微调 commit.interval.ms
以及 cache.max.bytes.buffering
?
1条答案
按热度按时间46scxncf1#
kafka streams使用transactions api隐式地实现一次语义,因此不需要设置任何其他配置。
如果你继续读博客,它会说:
“更具体地说,当
processing.guarantee
配置为exactly_once
,kafka streams使用事务id设置内部嵌入式生产者客户端,以启用幂等性和事务性消息传递功能,并将其消费者客户端设置为读取提交模式,以仅从上游生产者提交的事务中获取消息。”更多细节可以在kip-129中找到:streams-exactly-once语义