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

wko9yo5t  于 2023-10-15  发布在  Apache
关注(0)|答案(1)|浏览(85)

我有一个Spring Kafka应用程序,它有一个生产者,它 * 不是 * 纯Kafka消费->流程->生产链的一部分,即生产者不是由Kafka消费者触发的。
根据我目前对Kafka的Zombie fencing特性的理解,我希望这个producer总是使用相同的transactional.id,这样如果这个应用程序的一个新示例启动,所有旧示例都将被屏蔽。
现在Spring Kafka文档说,DefaultKafkaProducerFactory维护了一个生产者的缓存,这些生产者有transactional.id,它们之间的区别是一个整数后缀。我不清楚在什么情况下我最终会使用一个具有不同transactional.id的生产者,以及是否有可能使用Spring Kafka实现旧应用示例的可靠隔离。
任何澄清都非常感谢。

fkaflof6

fkaflof61#

需要该高速缓存来支持多线程(您不能在不同线程上并发使用同一事务生产者);如果你只使用一个线程(或者确保发送在锁或同步的控制下),那么只有一个transactional producer。
如果你想要不同的行为,你可以创建你自己的ProducerFactory实现(但是你仍然会遇到同样的问题,关于多线程)。

相关问题