仅限spring kafka事务使用者

xuo3flqw  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(355)

引用spring-kafka-doc似乎可以配置一个侦听器容器,将offset-commit绑定到事务。由于这一段是在producer部分下报告的,因此从上下文中我可以看出,以事务方式配置侦听器容器是在提交producer事务之前对其执行验证的一种方法。
只消费怎么办?是否可以使用kafkamessagelistenercontainer(使用kafkatransactionmanager配置)以事务方式提交已消耗消息的偏移量?我想不会,因为kafkaproducer和kafkaconsumer不是同一个api

4ioopgfo

4ioopgfo1#

你想达到什么目的还不完全清楚。
kafka中事务的意图是,任何生产者发送和消费者偏移提交都是原子的(全进或全出)。
容器不知道侦听器是否实际发布了任何消息,因此不管怎样,它都将以相同的方式工作(将使用者偏移发送到事务)。
如果要发布一些不属于事务的消息,可以使用 KafkaTemplate 与另一家(非交易性)生产商工厂合作。这样,模板就找不到事务的producer并使用第二个producer工厂的producer。如果事务回滚,则发布的消息将不会返回。
编辑
如果侦听器容器配置了其他事务管理器(而不是 KafkaTransactionManager ,包括链式事务管理器),则容器无法向事务发送偏移量,因为它无法访问事务的 Producer . 你需要一个 KafkaTemplate 向侦听器中的事务发送偏移量;它将使用事务的生产者。
但是,有两种方法可以做你想做的事。
将容器配置为 KTM 给你的听众加上注解 @Transactional -使用db txm-对于正常情况,db tx将提交,容器将提交。对于故障,db将回滚,kafka tx将回滚。
不要使用Kafkatm和配置新的 SeekToCurrentErrorHandler 如果侦听器抛出异常,容器将重播失败的传递。

相关问题