Kafka Transactions in Interceptors in streams with EOS

Kafka Transactions in Interceptors in streams with EOS

我们正在使用 spring kafka 流来处理数据流。我们目前正在使用 processing.guarantee: exactly_once 配置以确保它符合数据处理的 Exactly-once 语义。

我们有一个新要求,即通过拦截器发出一些元数据。拦截器使用 kafka 模板将元数据(主要是消息的略读头数据)发布到 kafka 主题。

将它放在拦截器上的原因是处理流的管道,包括多个 applications/topic 并且很容易将拦截器连接到各个应用程序。

我的问题是,我的拦截器中使用的 kafka 模板是否需要 @Transactional 注释,或者它是否会使用 processing.gaurantee config 生成的事务语义。当主流 consumer/producer 提交失败时,它是否能够回滚数据而不提交?

非常感谢任何对此的指点。

KafkaTemplate 无法参与流的交易。它需要一个单独的交易,这会破坏 EOS。

对于恰好一次,要么一切都必须用流来完成,要么一切都用 spring-kafka 完成。