刚刚开始学习Kafka。我正在尝试设置一个包含 2 个代理的小型 kafka 集群。当两个经纪人都启动时,我成功地将消息发送到我的主题。我想测试当 2 个代理之一完成时集群的行为。我使用 docker stop kafka1 停止了我的主代理(Kafka1),然后我尝试向我的集群发送一条消息,看看我的生产者是否能够理解他需要发送到 kafka2,因为 kafka1 已关闭。
但是我不断收到以下错误:
{“level”:“ERROR”,“timestamp”:“2022-07-19T18:59:46.891Z”,“logger”:“kafkajs”,“message”:“[连接]响应元数据(键:3,版本: 6)","broker":"localhost:39092","clientId":"my-app","error":"这个主题分区没有领导者,因为我们正在进行领导者选举" ,“correlationId”:1,“大小”:144}
下面是我的生产者代码:
const kafka = new Kafka({
clientId: 'my-app',
brokers: ['localhost:29092', 'localhost:39092'],
})
const producer = kafka.producer({ createPartitioner: Partitioners.LegacyPartitioner })
await producer.connect()
await producer.send({
topic: 'coverageEvolved',
messages: [
{ value: JSON.stringify(bodyActiveMq), key: bodyActiveMq[0].roamPartner},
],
})
await producer.disconnect()
Run Code Online (Sandbox Code Playgroud)
下面是我的 docker-compose-file:
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
restart: unless-stopped
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
volumes:
- ./zookeeper/data:/var/lib/zookeeper/data
kafka-1:
image: confluentinc/cp-kafka:latest
depends_on:
- …Run Code Online (Sandbox Code Playgroud)