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