簡體   English   中英

如何使用 ABSwitchCluster 在 Kafka 集群之間進行故障轉移

[英]How to use ABSwitchCluster to failover between Kafka clusters

我有一個使用 Kafka 在實例之間同步數據的應用程序,因此它既可以生成也可以使用來自 Kafka 的數據,此外,該應用程序正在使用 Kafka 主題並將該數據轉換和流式傳輸到另一個主題中供客戶使用。

我的應用程序有兩個用於故障轉移的集群。 通過 Kafka 文檔,我發現這個https://docs.spring.io/spring-kafka/docs/current/reference/html/#connecting談到ABSwitchCluster

如果 Kafka 集群出現故障,我如何使用ABSwitchCluster自動故障轉移,對於KafkaTemplate.send()@KafkaListener注釋方法?


更新更多信息

我為 KafkaTemplate.send 和 Kafka Consumer Events NonResponsiveConsumerEventListenerContainerIdleEvent添加了一些錯誤處理程序

最終他們調用一個shared Method進行切換,並使用一個BeanPostProcessorABSwitchCluster實際添加到KafkaResourceFactory Beans中。

切換代碼如下所示:

   @Autowired
   KafkaSwitchCluster kafkaSwitchCluster;

   @Autowired
   WebApplicationContext context;

   @Autowired
   KafkaListenerEndpointRegistry registry;

   /**
    *  Unable to use {@link Autowired} due to circular dependency
    *  with {@link KafkaPostProcessor}
    *  @return
    */
   public DefaultKafkaProducerFactory getDefaultKafkaProducerFactory()
   { return context.getBean(DefaultKafkaProducerFactory.class); }

   /** Back-End Method to Actually Switch between the clusters */
   private void switchCluster()
   {
      if (kafkaSwitchCluster.isPrimary()) { kafkaSwitchCluster.secondary(); }
      else { kafkaSwitchCluster.primary(); }

      getDefaultKafkaProducerFactory().reset();

      registry.stop();
      registry.destroy();
      registry.start();

      for(MessageListenerContainer listener : registry.getListenerContainers() )
      {
         listener.stop();
         listener.start();
      }
   }

在查看測試日志時,鑒於上面的更新,生產者似乎是正確的,正在切換集群,但我的消費者不是。

那么如何讓@KafkaListener消費者切換呢?

默認的生產者和消費者工廠以及KafkaAdminKafkaResourceFactory的子類。

通過調用setBootstrapServersSupplier() ABSwitchCluster

ABSwitchCluster不會自動進行故障轉移。

您需要自己的代碼來執行故障轉移,然后在生產者工廠調用reset()並停止/啟動所有偵聽器容器(所有@KafkaListenerKafkaListenerEndpointRegistry.stop()/start()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM