KafkaJS连接需要很长时间

cld4siwp  于 2023-05-16  发布在  Apache
关注(0)|答案(1)|浏览(231)

我最近在我的微服务项目中使用nestJS和kafkaJs,每次服务器刷新(调试模式)后,KafkaJS都需要很长时间才能再次连接到kafka集群,是否缺少一些配置?
我的kafkaJS版本是2.2.3,我的集群中有3个代理,我的集群在我公司的服务器上配置,所以没有网络延迟,这是我的kafkaJS配置

client: {
      username,
      password,
      clientId,
      brokers: [`${host}:${port}`],
      authenticationTimeout: 10000,
      reauthenticationThreshold: 5,
    },

我猜Kafka组重新平衡可能有问题,但我不知道我是否配置错了。
这是我的Kafka码头创作

services:
  zookeeper:
    image: 'zookeeper:3.6.2'
    container_name: kiz-zookeeper
    ports:
      - '${ZOOKEEPER_PORT}:2181'
    volumes:
      - 'zookeeper-data:/data'
      - 'zookeeper-txn-logs:/txn-logs'
      - 'zookeeper-log:/datalog'

  kafka1:
    image: 'bitnami/kafka:latest'
    container_name: kiz-kafka-cluster-1
    environment:
      KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:${ZOOKEEPER_PORT}
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_CFG_LISTENERS: INTERNAL://:9092,EXTERNAL://:${KAFKA_1_PORT}
      KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka1:9092,EXTERNAL://172.16.100.211:${KAFKA_1_PORT}
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_HEAP_OPT: =-Xmx${KAFKA_RAM}m
    ports:
      - '${KAFKA_1_PORT}:9093'
    depends_on:
      - zookeeper
    volumes:
      - 'kafka1-data:/bitnami/kafka/data'

  kafka2:
    image: bitnami/kafka:latest
    environment:
      KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:${ZOOKEEPER_PORT}
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_CFG_LISTENERS: INTERNAL://:9092,EXTERNAL://:${KAFKA_2_PORT}
      KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka2:9092,EXTERNAL://172.16.100.211:${KAFKA_2_PORT}
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_HEAP_OPT: =-Xmx${KAFKA_RAM}m
    ports:
      - '${KAFKA_2_PORT}:9095'
    depends_on:
      - zookeeper
    volumes:
      - 'kafka2-data:/bitnami/kafka/data'

  kafka3:
    image: 'bitnami/kafka:latest'
    container_name: kiz-kafka-cluster-3
    environment:
      KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:${ZOOKEEPER_PORT}
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_CFG_LISTENERS: INTERNAL://:9092,EXTERNAL://:${KAFKA_3_PORT}
      KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka3:9092,EXTERNAL://172.16.100.211:${KAFKA_3_PORT}
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_HEAP_OPTS: -Xmx${KAFKA_RAM}m
    ports:
      - '${KAFKA_3_PORT}:9097'
    depends_on:
      - zookeeper
    volumes:
      - 'kafka3-data:/bitnami/kafka/data'
ftf50wuq

ftf50wuq1#

过了一会儿,我终于在kafka.js GitHub页面上发现了issue问题。
以下是我引用的Nevon答案:
您需要记住的是,使用者组存在于节点示例之外。每当消费者加入或离开群组时,群组的所有成员都必须重新加入并同步,然后才能再次开始消费。
当您启动节点进程时,您的消费者将加入该消费者组,当您退出进程(使用优雅断开连接)时,您的消费者将离开消费者组。如上所述,这意味着组必须重新平衡(重新加入和同步)。当您只是退出流程而不断开连接时,您的消费者实际上并没有离开组-因此最初不会有重新平衡。然而,在sessionTimeout之后,该消费者将被认为是不健康的,并将被踢出组,这将触发重新平衡。在此期间,分配给该消费者的任何分区上都不会发生任何处理。如果您使用nodemon进行开发,导致频繁重启,解决方案可能是在每次重启时生成一个随机groupid。当静态成员资格(#884)可用时,这可能是另一种选择,但它还不可用,所以现在随机组ID可能是最好的选择。要么这样,要么你必须等待再平衡的发生。
希望能有所帮助和最好的问候。

相关问题