使用Spring Boot的Kafka群集中的容错功能

时间:2019-07-19 10:20:59

标签: spring-boot apache-kafka spring-kafka

我开始在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实例。

我的docker compose看起来像:

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 个答案:

答案 0 :(得分:0)

如果您的主题的复制因子为2,则至少需要运行两个节点,否则kafka会抱怨。要测试您可能需要说5个节点(a,b,c,d,e),然后设置一个复制因子为2的主题,并检查它正在使用的节点,然后杀死其中一个。

答案 1 :(得分:0)

我找到了解决方案。我需要添加到我的docker-compose for kafka:       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:2       KAFKA_DEFAULT_REPLICATION_FACTOR:2

问题与哪个__consumer_offsets主题相关,该主题具有1个复制因子。因为我使用了两个kafka实例,所以我不得不将这些属性设置为2。

此问题的详细答案可以在这里找到

Kafka - Broker: Group coordinator not available