簡體   English   中英

Kafka 這個主題分區沒有領導者,因為我們正在進行領導選舉

[英]Kafka There is no leader for this topic-partition as we are in the middle of a leadership election

剛開始學習卡夫卡。 我正在嘗試設置一個包含 2 個代理的小型 kafka 集群。 當兩個代理都啟動時,我成功地向我的主題發送消息。 我想在 2 個代理之一完成時測試我的集群的行為。 我使用 docker stop kafka1 停止了我的主要代理(Kafka1),然后我嘗試向我的集群發送一條消息,以查看我的生產者是否能夠理解他需要發送到 kafka2,因為 kafka1 已關閉。

但是我不斷收到以下錯誤:

{"level":"ERROR","timestamp":"2022-07-19T18:59:46.891Z","logger":"kafkajs","message":"[Connection] 響應元數據(key: 3, version : 6)","broker":"localhost:39092","clientId":"my-app","error":"這個主題分區沒有領導,因為我們正在進行領導選舉" ,"correlationId":1,"size":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()

以下是我的 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:
          - zookeeper
        ports:
            - 29092:29092
        restart: unless-stopped
        environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka- 
    1:9092,PLAINTEXT_HOST://localhost:29092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
        volumes:
          - ./kafka1/data:/var/lib/kafka/data
      kafka-2:
        image: confluentinc/cp-kafka:latest
        depends_on:
          - zookeeper
        ports:
          - 39092:39092
        restart: unless-stopped
        environment:
          KAFKA_BROKER_ID: 2
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:39092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
        volumes:
          - ./kafka2/data:/var/lib/kafka/data

如果您沒有以其他方式創建主題,Kafka 將默認創建代碼中使用的coverageEvolved主題,其中只有一個副本和一個分區。

如果您終止托管該副本的代理,則將沒有可以生成的同步副本領導者。

您可以使用 Kafkajs 創建主題

另外值得一提的是,有一個只有一個副本的事務主題(您缺少它的環境變量)。 這主要僅與 Java 客戶端相關,因為從 Kafka 3.0 開始默認啟用事務生產者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM