我有一个经典的微服务架构。因此,有不同的应用程序。每个应用程序都可以有1..N实例。系统被部署到Kubernetes.,因此,我们有许多不同的PODs,它可以在任何时间启动和停止。
我想实现read-process-write模式,所以我需要Kafka事务。
要配置事务,我需要为每个Kafka生产者设置一些transaction id。(实际上,我需要transaction-id-prefix,因为我在我的应用程序中使用Spring,而Spring有这样的API)。在应用程序重新启动后,这些IDs必须相同。
那么,如何为Kubernetes中托管的几个应用程序选择Kafka事务id呢?
发布于 2019-07-24 21:29:49
如果消费者启动事务(读-处理-写),则同一应用程序的所有实例的事务id前缀必须相同(以便在重新平衡后僵尸隔离正常工作)。实际使用的事务id是<prefix><group>.<topic>.<partition>。
如果你有多个应用程序,它们应该有唯一的前缀(尽管如果它们使用不同的主题,它们无论如何都是唯一的)。
对于仅生产者事务,前缀在每个实例中都必须是唯一的(以防止kafka隔离生产者)。
https://stackoverflow.com/questions/57179169
复制相似问题