使用 Spring Kafka 对单个生产者进行僵尸围栏

问题描述 投票:0回答:1

我有一个Spring Kafka应用程序,它有一个生产者,它不是纯kafka消费->流程->生产链的一部分,即生产者不是由kafka消费者触发的。

根据我目前对 Kafka 的 Zombie fencing 功能的理解,我希望这个生产者始终使用相同的 transactional.id,因此,如果该应用程序的新实例启动,所有旧实例都会被隔离。

现在 Spring Kafka 文档说,DefaultKafkaProducerFactory 维护着生产者的缓存,这些生产者的 transactional.ids 之间有一个整数后缀的不同。我不清楚在什么情况下我最终会得到一个具有不同 transactional.id 的生产者,以及是否有可能使用 Spring Kafka 实现旧应用程序实例的可靠防护。

非常感谢任何澄清。

apache-kafka spring-kafka kafka-producer-api kafka-transactions-api
1个回答
0
投票

需要缓存支持多线程(不能在不同线程上同时使用同一个事务生产者);如果您只使用一个线程(或确保发送受到锁或同步的控制),则只会有一个事务生产者。

如果您想要不同的行为,您可以创建自己的

ProducerFactory
实现(但关于多线程,您仍然会遇到相同的问题)。

© www.soinside.com 2019 - 2024. All rights reserved.