簡體   English   中英

使用Spring Boot的Kafka集群中的容錯

[英]Fault tolerance in Kafka Cluster using Spring Boot

我開始在docker上使用Spring Boot Kafka和kafka集群工作。 我開始檢查容錯能力時就遇到了問題。 通常,我在Spring Boot中通過Kafka Admin創建了一個主題(復制因子= 2)。 我能夠存儲一些消息並從Kafka中使用它們。 但是在停止了一個kafka容器(我有兩個kafka實例和一個Zookeeper)之后,我的使用者無法傳達剩下的一個。

我已經提供了bootstrap.servers屬性:

SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092,kafka2:9093

我創建主題的kafka admin bean如下所示:

@Bean
public NewTopic adviceTopic() {
    return new NewTopic(topicName, 1, (short) 2);
}

當我只使用一個實例時(選擇哪個實例都沒有關系),它可以很好地工作(因此,不會出現配置錯誤的Kafka監聽器/主機的情況)。 當我刪除一個實例時,我的應用程序無法使用第二個kafka實例。

我的碼頭工人組成看起來像:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
    - "2181:2181"
  kafka:
    container_name: kafka
    image: wurstmeister/kafka
    expose:
    - "9092"
    environment:
      KAFKA_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
  kafka2:
    container_name: kafka2
    image: wurstmeister/kafka
    expose:
      - "9093"
    environment:
      KAFKA_LISTENERS: PLAINTEXT://kafka2:9093
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
  kafka-service:
     container_name: kafka_service
     build: .
     ports:
     - "8080:8080"
     environment:
       SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092,kafka2:9093
     depends_on:
       - zookeeper
       - kafka
       - kafka2

使用“ docker stop kafka_container”時得到的結果是:

2019-07-19 09:19:16.836警告1 --- [| 消費者] org.apache.kafka.clients.NetworkClient:[消費者clientId = json-0,groupId = qpm-消費者]無法建立到節點1002的連接。 經紀人可能不可用。

之后,我無法使用Spring Boot Example生成任何消息。 您能否提供一些提示,為什么我的應用程序無法使用第二個kafka實例? 即使我設置正確的復制因子?

如果您的主題的復制因子為2,則至少需要運行兩個節點,否則kafka會抱怨。 要測試您可能需要說5個節點(a,b,c,d,e),然后設置一個復制因子為2的主題,並檢查它正在使用的節點,然后殺死其中一個。

我找到了解決方案。 我需要在docker-compose中添加kafka:KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:2 KAFKA_DEFAULT_REPLICATION_FACTOR:2

問題與哪個__consumer_offsets主題相關,該主題具有1個復制因子。 因為我使用了兩個kafka實例,所以我不得不將這些屬性設置為2。

有關此問題的詳細答案,請參見此處:

Kafka-經紀人:小組協調員不可用

暫無
暫無

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

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