繁体   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