ผู้นำไม่พร้อมใช้งาน Kafka ในผู้ผลิตคอนโซล


172

ฉันพยายามใช้คาฟคา
การกำหนดค่าทั้งหมดทำอย่างถูกต้อง แต่เมื่อฉันพยายามสร้างข้อความจากคอนโซลฉันได้รับข้อผิดพลาดต่อไปนี้

WARN Error while fetching metadata with correlation id 39 : 
     {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

รุ่นคาฟคา: 2.11-0.9.0.0


คุณใช้คาฟคารุ่นใดอยู่? คุณจะรู้ได้อย่างไรว่าการกำหนดค่าทั้งหมดนั้นเหมาะสม โปรดลองเพิ่มข้อมูลเพิ่มเติม
Nautilus

ฉันใช้เวอร์ชั่น 2.11-0.9.0.0 ฉันบอกว่าการกำหนดค่าทั้งหมดเหมาะสมเพราะใช้งานได้
Vishesh

1
@Vishesh คุณสามารถให้ผลลัพธ์ของคำสั่งต่อไปนี้. / bin/kafka-topics.sh - localhost host: 2181 - describe --top yourTopicName
avr

2
ข้อผิดพลาดเดียวกันสำหรับฉันเช่นกัน ฉันได้รับผู้นำ. /bin/kafka-topics.sh - ผู้ดูแลระบบ <ip>: 2181 - อธิบาย - ชื่อ yourTopicName แต่ในขณะที่ส่งข้อความถึงผู้ผลิตมันจะทำให้เกิดข้อผิดพลาด LEADER_NOT_AVAILABLE
Vilva

2
ฉันสามารถยืนยันปัญหานี้กับคาฟคา2.2.0ในปี 2019
javadba

คำตอบ:


93

มันอาจจะเกี่ยวข้องกับการตั้งค่าในของคุณadvertised.host.nameserver.properties

สิ่งที่อาจเกิดขึ้นคือผู้ผลิตของคุณกำลังพยายามที่จะหาผู้ที่เป็นผู้นำสำหรับพาร์ทิชันที่กำหนดตัวเลขออกของตนadvertised.host.nameและadvertised.portและพยายามที่จะเชื่อมต่อ หากการตั้งค่าเหล่านี้ไม่ได้รับการกำหนดค่าอย่างถูกต้องก็อาจคิดว่าผู้นำไม่สามารถใช้ได้


1
ที่แก้ไขข้อผิดพลาดสำหรับฉัน .. แต่ความคิดเห็นใน server.properties บอกว่าถ้าไม่ได้กำหนดค่า advertised.host.name มันจะใช้ host.name และ host.name ถูกกำหนดค่าในไฟล์ server.properties
นายสปาร์ค

ฉันได้รับปัญหาเดียวกันและสิ่งนี้ใช้ได้กับฉันสำหรับคาฟคา 0.9
minhas23

3
การตั้งค่านี้เป็นที่อยู่ IP ของฉันแทนชื่อโฮสต์สาธารณะ AWS ที่สร้างขึ้นได้แก้ไขปัญหามากมายที่ฉันมี
Spechal

81

ฉันลองคำแนะนำทั้งหมดที่ระบุไว้ที่นี่ สิ่งที่ใช้ได้ผลสำหรับฉันคือไปที่server.propertiesและเพิ่ม:

port = 9092
advertised.host.name = localhost 

ออกlistenersและadvertised_listenersแสดงความคิดเห็นออก


5
โซลูชันใช้งานได้สำหรับฉัน ( ลิงก์โซลูชันของ vikas ) เพียงแค่ต้องการเพิ่มสิ่งนั้นให้ฉันในserver.propertiesไฟล์MAC ตั้งอยู่ที่/usr/local/etc/kafka/
Edison Q

2
สิ่งที่ใช้ได้ผลสำหรับฉันคือสิ่งนี้ advertised.listeners=PLAINTEXT://my.ip:9092
Mr. Crowley

14
ห้ามใช้สิ่งนี้ - port, advertised.host.nameถูกคัดค้านการกำหนดค่า kafka.apache.org/documentation/#brokerconfigs
Stephane

44

อะไรที่แก้ไขได้สำหรับฉันคือการทำให้ผู้ฟังเป็นเช่น:

advertised.listeners = PLAINTEXT://my.public.ip:9092
listeners = PLAINTEXT://0.0.0.0:9092

สิ่งนี้ทำให้นายหน้าของ KAFKA ฟังการเชื่อมต่อทั้งหมด


4
นี่ควรเป็นคำตอบที่ยอมรับได้ ใช้งานได้สำหรับการกำหนดค่าหลายโหนดและทำให้รู้สึกมาก
Piyush Shrivastava

เราสามารถใช้สิ่งนี้ในไฟล์ app.yaml ของเราได้ไหม?
Coder

40

ฉันมีคาฟกากำลังทำงานเป็นนักเทียบท่าคอนเทนเนอร์และข้อความที่คล้ายกันกำลังท่วมไปที่บันทึก
และKAFKA_ADVERTISED_HOST_NAMEถูกตั้งค่าเป็น 'คาฟคา'

ในกรณีของฉันสาเหตุของข้อผิดพลาดคือ/etc/hostsบันทึกที่ขาดหายไปสำหรับ 'คาฟคา' ในคอนเทนเนอร์ 'คาฟคา'
ตัวอย่างเช่นการทำงานping kafkaภายในคอนเทนเนอร์ 'kafka' จะล้มเหลวping: bad address 'kafka'

ในแง่ของนักเทียบท่าปัญหานี้ได้รับการแก้ไขโดยการระบุhostnameสำหรับภาชนะ

ตัวเลือกเพื่อให้บรรลุ:


มันไม่ใช่คำตอบต่อแต่สำหรับการอ้างอิงในอนาคต: เมื่อ (หรือถ้า) นักเทียบท่า / นักเทียบท่า # 1143ได้รับการแก้ไขจะมีวิธีที่ง่ายในการอ้างอิงโฮสต์ของคอนเทนเนอร์ - ไม่ว่าจะใช้ระบบปฏิบัติการใด
Michael Ahlers

หากคุณกำลังใช้ภาพwurstmeister / kafka-docker docker (ซึ่งอาจเป็นภาพที่ได้รับความนิยมมากที่สุดในช่วงเวลาที่เขียนนี้) ดูบันทึกย่อที่นี่เกี่ยวกับการตั้งค่า env var และสาเหตุ
RyanQuey

32

ฉันใช้ kafka_2.12-0.10.2.1:

vi config/server.properties

เพิ่มบรรทัดด้านล่าง:

listeners=PLAINTEXT://localhost:9092
  • ไม่จำเป็นต้องเปลี่ยน advertised.listeners ตามที่รับค่าจากคุณสมบัติผู้ฟัง std

ชื่อโฮสต์และพอร์ตโบรกเกอร์จะโฆษณากับผู้ผลิตและผู้บริโภค หากไม่ได้ตั้งค่า

  • มันใช้ค่าสำหรับ "ฟัง" หากกำหนดค่า

มิฉะนั้นจะใช้ค่าที่ส่งคืนจาก java.net.InetAddress.getCanonicalHostName()มิฉะนั้นก็จะใช้ค่าที่ส่งกลับจาก

หยุดนายหน้าคาฟคา:

bin/kafka-server-stop.sh

รีสตาร์ทโบรกเกอร์:

bin/kafka-server-start.sh -daemon config/server.properties

และตอนนี้คุณไม่ควรเห็นปัญหาใด ๆ


วิธีนี้แก้ไขได้สำหรับฉันการปรับเปลี่ยนserver.propertiesไม่เพียงพอจนกว่าฉันจะเริ่มต้นนายหน้าซื้อขายใหม่ด้วย deamon ที่โหลดใหม่ บางทีคุณควรจะรู้เรื่องนี้ แต่มันช่วยให้แน่ใจว่าได้ระบุไว้ในคำตอบนี้
Bossan

สิ่งนี้ได้ผลสำหรับฉันขอบคุณมากครับ ฉันกำลังใช้kafka 2.13
Alejandro Herrera

31

ฉันได้เห็นปัญหาเดียวกันนี้ใน 2 สัปดาห์ที่ผ่านมาขณะที่ทำงานกับ Kafka และได้อ่านโพสต์ของ Stackoverflow นับตั้งแต่นั้นมา

หลังจาก 2 สัปดาห์ของการวิเคราะห์ฉันได้อนุมานได้ว่าในกรณีของฉันนี้เกิดขึ้นเมื่อพยายามที่จะผลิตข้อความไปยังเรื่องที่ไม่มีอยู่จริง

ผลลัพธ์ในกรณีของฉันคือ Kafka ส่งข้อความแสดงข้อผิดพลาดกลับมา แต่สร้างในเวลาเดียวกันหัวข้อที่ไม่เคยมีมาก่อน ดังนั้นหากฉันพยายามที่จะสร้างข้อความใด ๆ อีกครั้งในหัวข้อนั้นหลังจากเหตุการณ์นี้ข้อผิดพลาดจะไม่ปรากฏอีกต่อไปเมื่อหัวข้อถูกสร้างขึ้น

โปรดทราบ:อาจเป็นไปได้ว่าการติดตั้ง Kafka เฉพาะของฉันได้รับการกำหนดค่าให้สร้างหัวข้อโดยอัตโนมัติเมื่อไม่มีสิ่งเดียวกัน ที่ควรอธิบายว่าทำไมในกรณีของฉันฉันสามารถเห็นปัญหาเพียงครั้งเดียวสำหรับทุกหัวข้อหลังจากรีเซ็ตหัวข้อ: การกำหนดค่าของคุณอาจแตกต่างกันและในกรณีนั้นคุณจะได้รับข้อผิดพลาดซ้ำไปซ้ำมา

ความนับถือ,

Luca Tampellini


สวัสดี Luca ฉันยังสร้างหัวข้อใหม่โดยอัตโนมัติ คำถามของฉันคือคุณจะให้ผู้บริโภคค้นพบหัวข้อใหม่นี้โดยอัตโนมัติได้อย่างไร ผู้บริโภคของฉันจะไม่ทำมัน และหลังจากที่ฉันรีสตาร์ทผู้บริโภคข้อความใหม่สามารถรับได้ แต่ข้อความที่ทำให้การสร้างหัวข้อหายไป
jchnxu

15

เรามักจะได้รับข้อความนี้เมื่อเราพยายามสมัครสมาชิกหัวข้อที่ยังไม่ได้สร้าง โดยทั่วไปเราอาศัยหัวข้อที่จะสร้างความสำคัญในสภาพแวดล้อมที่ปรับใช้ของเรา แต่เรามีการทดสอบส่วนประกอบที่ทำงานกับอินสแตนซ์คาฟคาที่ถูกจับซึ่งเริ่มทำความสะอาดทุกครั้ง

ในกรณีดังกล่าวเราใช้AdminUtilsในการตั้งค่าการทดสอบเพื่อตรวจสอบว่ามีหัวข้อนั้นอยู่หรือไม่และสร้างมันขึ้นมา ดูล้นกองซ้อนอื่น ๆนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า AdminUtils


8

ความเป็นไปได้อีกประการสำหรับคำเตือนนี้ (ใน 0.10.2.1) คือคุณพยายามสำรวจความคิดเห็นในหัวข้อที่เพิ่งสร้างขึ้นและผู้นำสำหรับหัวข้อพาร์ติชันนี้ยังไม่พร้อมใช้งานคุณกำลังอยู่ในช่วงเลือกตั้งผู้นำ

การรอที่สองระหว่างการสร้างหัวข้อและการสำรวจเป็นวิธีแก้ไข


6

สำหรับทุกคนที่พยายามใช้คาฟคาในคูเบอเนเทสและพบกับข้อผิดพลาดนี้นี่คือสิ่งที่ฉันจะแก้ไขได้ในที่สุด:

คุณต้อง:

  1. เพิ่มhostnameไปยังข้อมูลจำเพาะของพ็อดเพื่อให้คาฟก้าสามารถค้นพบตัวเอง

หรือ

  1. ถ้าใช้hostPortแล้วคุณต้องhostNetwork: trueและdnsPolicy: ClusterFirstWithHostNet

เหตุผลนี้เป็นเพราะคาฟคาต้องการพูดคุยกับตัวเองและตัดสินใจที่จะใช้ฟัง / ชื่อโฮสต์ 'โฆษณา' เพื่อค้นหาตัวเองแทนที่จะใช้ localhost แม้ว่าคุณจะมีบริการที่ระบุชื่อโฮสต์ที่โฆษณาไว้ที่พ็อด แต่จะไม่สามารถมองเห็นได้จากภายในพ็อด ฉันไม่รู้จริงๆว่าทำไมถึงเป็นเช่นนั้น แต่อย่างน้อยก็มีวิธีแก้ปัญหา

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper-cluster1
  template:
    metadata:
      labels:
        name: zookeeper-cluster1
        app: zookeeper-cluster1
    spec:
      hostname: zookeeper-cluster1
      containers:
      - name: zookeeper-cluster1
        image: wurstmeister/zookeeper:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888

---

apiVersion: v1
kind: Service
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  type: NodePort
  selector:
    app: zookeeper-cluster1
  ports:
  - name: zookeeper-cluster1
    protocol: TCP
    port: 2181
    targetPort: 2181
  - name: zookeeper-follower-cluster1
    protocol: TCP
    port: 2888
    targetPort: 2888
  - name: zookeeper-leader-cluster1
    protocol: TCP
    port: 3888
    targetPort: 3888

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-cluster
  template:
    metadata:
      labels:
        name: kafka-cluster
        app: kafka-cluster
    spec:
      hostname: kafka-cluster
      containers:
      - name: kafka-cluster
        image: wurstmeister/kafka:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: KAFKA_ADVERTISED_LISTENERS
          value: PLAINTEXT://kafka-cluster:9092
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zookeeper-cluster1:2181
        ports:
        - containerPort: 9092

---

apiVersion: v1
kind: Service
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  type: NodePort
  selector:
    app: kafka-cluster
  ports:
  - name: kafka-cluster
    protocol: TCP
    port: 9092
    targetPort: 9092

2
1. ไม่ทำงาน% ERROR: Local: ความล้มเหลวในการแก้ปัญหาโฮสต์: kafka-cluster: 9092/1001: ล้มเหลวในการแก้ไข 'kafka-cluster: 9092': nodename หรือ servname ที่ให้มาหรือไม่ทราบ
Lu32

ฉันได้เพิ่มชื่อโฮสต์เหมือนกับชื่อบริการใช้งานได้สำหรับฉัน!
karthikeayan

6

การเพิ่มสิ่งนี้เนื่องจากอาจช่วยผู้อื่นได้ advertised.host.nameปัญหาที่พบบ่อยอาจจะเป็นการกำหนดค่าของ ด้วย Docker ที่ใช้ Docker-compose การตั้งชื่อของบริการภายในKAFKA_ADVERTISED_HOST_NAMEจะไม่ทำงานจนกว่าคุณจะตั้งค่าชื่อโฮสต์เช่นกัน docker-compose.ymlตัวอย่าง:

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    hostname: kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

ด้านบนโดยไม่hostname: kafkaสามารถออกLEADER_NOT_AVAILABLEเมื่อพยายามเชื่อมต่อ คุณสามารถค้นหาตัวอย่างของการdocker-composeกำหนดค่าการทำงานที่นี่


6

ในกรณีของฉันมันทำงานได้ดีที่บ้าน แต่มันล้มเหลวในสำนักงานเมื่อฉันเชื่อมต่อกับเครือข่ายสำนักงาน

ดังนั้นจึงปรับเปลี่ยน config / server.properties Listeners = PLAINTEXT: //: 9092 เป็น listeners = PLAINTEXT: // localhost: 9092

ในกรณีของฉันฉันได้รับขณะอธิบายกลุ่มผู้บริโภค


ทำไมพวกเขาถึงไม่ตั้งค่าเริ่มต้นที่ถูกต้องสิ่งนี้ช่วยฉันได้
powder366

5

หากคุณใช้ kafka บนเครื่องท้องถิ่นลองอัปเดต $ KAFKA_DIR / config / server.properties ด้วยบรรทัดด้านล่าง: listeners=PLAINTEXT://localhost:9092จากนั้นรีสตาร์ท kafka


ฉันจะทำสิ่งนี้บน docker-compose.yml ได้อย่างไร
AC28

คุณสามารถใช้เชลล์สคริปต์จุดเริ่มต้นdocs.docker.com/compose/compose-file/#entrypoint กับนักเขียนและนักเขียนเขียนทับ (sed) ฟังในเซิร์ฟเวอร์
MrKulli

3

ฉันกำลังใช้นักเทียบท่าเพื่อสร้างคอนเทนเนอร์ Kafka โดยใช้wurstmeister/kafkaรูปภาพ การเพิ่มKAFKA_ADVERTISED_PORT: 9092คุณสมบัติให้กับdocker-composeไฟล์ของฉันแก้ไขข้อผิดพลาดนี้ให้ฉัน


3

เนื่องจากฉันต้องการนายหน้าคาฟคาของฉันในการเชื่อมต่อกับผู้ผลิตและผู้บริโภคระยะไกลดังนั้นฉันจึงไม่ต้องการadvertised.listenerแสดงความคิดเห็น ในกรณีของฉัน (ใช้ kafka กับ kubernetes) ฉันพบว่า kafka pod ของฉันไม่ได้รับ IP คลัสเตอร์ใด ๆ โดยการลบบรรทัดclusterIP: Noneออกจาก services.yml kubernetes จะกำหนด Internal-ip ให้กับ kafka pod สิ่งนี้แก้ไขปัญหา LEADER_NOT_AVAILABLE ของฉันและการเชื่อมต่อระยะไกลของผู้ผลิต / ผู้บริโภคคาฟคา


3

เมื่อเกิดข้อผิดพลาด LEADER_NOT_AVAILABLE เพียงรีสตาร์ทโบรกเกอร์ kafka:

/bin/kafka-server-stop.sh

ติดตามโดย

/bin/kafka-server-start.sh config/server.properties

(หมายเหตุ: Zookeeper ต้องทำงานตามเวลานี้หากคุณทำอย่างอื่นไม่ทำงาน)


ใช่. เกิดขึ้นเมื่อคาฟคาเริ่มต้นครั้งแรกและผู้ดูแลสัตว์เลี้ยงหลังจากนั้น
panchicore

ฉันได้ทำไปแล้วและมันก็ไม่ได้แก้มัน สิ่งที่แปลกคือโบรกเกอร์จะเริ่มต้นราวกับว่ามันเป็นผู้นำ New leader is 0เช่นเดียวกับใน
Sammy

2

บรรทัดด้านล่างนี้ฉันได้เพิ่มเข้าไปconfig/server.propertiesแล้วซึ่งได้แก้ไขปัญหาของฉันคล้ายกับปัญหาข้างต้น หวังว่านี่จะช่วยได้มันมีเอกสารที่ดีในไฟล์ server.properties พยายามอ่านและทำความเข้าใจก่อนที่คุณจะแก้ไข advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092


1

สำหรับผู้ที่ดิ้นรนกับการตั้งค่า Kafka ssl และเห็นข้อผิดพลาด LEADER_NOT_AVAILABLE นี้ หนึ่งในเหตุผลที่อาจทำให้เสียคือ keystore และ truststore ในที่เก็บคีย์คุณต้องมีไพรเวตคีย์ของเซิร์ฟเวอร์ + ใบรับรองเซิร์ฟเวอร์ที่ลงนาม ในไคลเอนต์ truststore คุณต้องมี intermedidate CA certificate เพื่อให้ไคลเอ็นต์สามารถพิสูจน์ตัวตนเซิร์ฟเวอร์ kafka หากคุณจะใช้ ssl สำหรับการสื่อสารระหว่างโบรกเกอร์คุณต้องมี truststore นี้ตั้งอยู่ในเซิร์ฟเวอร์คุณสมบัติของโบรกเกอร์เพื่อให้พวกเขาสามารถตรวจสอบซึ่งกันและกัน

ชิ้นสุดท้ายนั้นฉันพลาดไปอย่างผิดพลาดและทำให้ฉันเจ็บปวดเป็นเวลาหลายชั่วโมงเพื่อค้นหาว่าข้อผิดพลาด LEADER_NOT_AVAILABLE นี้อาจหมายถึงอะไร หวังว่านี่จะช่วยใครซักคน


"ไพรเวตคีย์ของเซิร์ฟเวอร์" หมายความว่าอย่างไร? ฉันมีคีย์ CA และใบรับรองเซิร์ฟเวอร์ลงนามใน keystore เซิร์ฟเวอร์ในขณะที่ในไคลเอ็นต์ truststore ฉันมีใบรับรอง CA .. แต่ก็ยังคงฉันได้รับข้อผิดพลาดเหล่านี้ ..
phaigeim

ขออภัยฉันหมายถึงรหัสส่วนตัว + ใบรับรอง ฉันกำลังตั้งค่าคลัสเตอร์ขนาดใหญ่และที่ใดที่หนึ่งในระบบราชการทำผิดพลาดดังนั้นหนึ่งในใบรับรองไม่ตรงกับ CSR นั่นอาจเป็นเหตุผลอื่นเช่นกัน ตรวจสอบอีกครั้งว่า md5 ของคีย์ส่วนตัวการจับคู่ใบรับรองและใบรับรองนั้นสามารถตรวจสอบได้กับ truststore ของคุณ โดยปกติ Truststore จะมีใบรับรอง root และระดับกลาง
vojtmen

1

ปัญหาได้รับการแก้ไขหลังจากเพิ่มการตั้งค่าฟังในไฟล์ server.properties ที่อยู่ในไดเรกทอรี config Listeners = PLAINTEXT: // localhost (หรือเซิร์ฟเวอร์ของคุณ): 9092 รีสตาร์ท kafka หลังจากการเปลี่ยนแปลงนี้ รุ่นที่ใช้ 2.11


0

สำหรับฉันมันเกิดขึ้นเนื่องจากการขาดการตั้งค่า
พอร์ต Docker (9093)
พอร์ตคำสั่ง Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName"
ฉันตรวจสอบการกำหนดค่าของฉันเพื่อให้ตรงกับพอร์ตและ ตอนนี้ทุกอย่างก็โอเค


0

สำหรับฉันสาเหตุได้ใช้ Zookeeper เฉพาะที่ไม่ได้เป็นส่วนหนึ่งของแพ็คเกจ Kafka Zookeeper นั้นได้ถูกติดตั้งบนเครื่องเพื่อจุดประสงค์อื่น เห็นได้ชัดว่า Kafka ไม่ได้ทำงานร่วมกับ Zookeeper เพียงใด การเปลี่ยนมาใช้ Zookeeper ที่มาพร้อมกับ Kafka แก้ปัญหาให้ฉันแล้ว เพื่อไม่ให้ขัดแย้งกับ Zookeeper ที่มีอยู่ฉันต้องแก้ไข confguration ของฉันเพื่อให้ Zookeeper ฟังในพอร์ตอื่น:

[root@host /opt/kafka/config]# grep 2182 *
server.properties:zookeeper.connect=localhost:2182
zookeeper.properties:clientPort=2182

0

ผู้ฟังที่โฆษณาตามที่กล่าวไว้ในคำตอบข้างต้นอาจเป็นหนึ่งในเหตุผล เหตุผลที่เป็นไปได้อื่น ๆ คือ:

  1. อาจไม่ได้สร้างหัวข้อ คุณสามารถตรวจสอบได้โดยใช้bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
  2. ตรวจสอบเซิร์ฟเวอร์บู๊ตสแตรปที่คุณให้กับผู้ผลิตเพื่อดึงข้อมูลเมตา หากเซิร์ฟเวอร์ bootstrap ไม่มีข้อมูลเมตาล่าสุดเกี่ยวกับหัวข้อ (ตัวอย่างเช่นเมื่อสูญเสียการอ้างสิทธิ์ใน zookeeper) คุณต้องเพิ่มเซิร์ฟเวอร์ bootstrap มากกว่าหนึ่งเครื่อง

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าผู้ฟังที่โฆษณาไว้IP:9092แทนlocalhost:9092แทนหลังหมายความว่านายหน้าสามารถเข้าถึงได้ผ่าน localhost เท่านั้น

เมื่อฉันพบข้อผิดพลาดฉันจำได้ว่าได้ใช้PLAINTEXT://<ip>:<PORT>ในรายการเซิร์ฟเวอร์ bootstrap (หรือรายการโบรกเกอร์) และมันทำงานได้แปลก

bin/kafka-console-producer --topic sample --broker-list PLAINTEXT://<IP>:<PORT>

0

สำหรับฉันฉันไม่ได้ระบุรหัสนายหน้าสำหรับอินสแตนซ์ Kafka มันจะได้รับรหัสใหม่จาก zookeeper บางครั้งเมื่อรีสตาร์ทในสภาพแวดล้อม Docker หากรหัสนายหน้าของคุณมากกว่า 1,000 เพียงระบุตัวแปรสภาพแวดล้อมKAFKA_BROKER_IDเพียงแค่ระบุตัวแปรสภาพแวดล้อม

ใช้สิ่งนี้เพื่อดูโบรกเกอร์หัวข้อและพาร์ทิชัน

brew install kafkacat
kafkacat -b [kafka_ip]:[kafka_poot] -L

0

ฉันรู้ว่ามันถูกโพสต์มานานแล้วฉันต้องการแบ่งปันวิธีที่ฉันแก้ไขมัน
ตั้งแต่ฉันมีแล็ปท็อปที่ทำงานของฉัน( VPN และพร็อกซีได้รับการกำหนดค่า)
ฉันตรวจสอบตัวแปรสภาพแวดล้อมNO_PROXY

> echo %NO_PROXY%

มันกลับมาพร้อมกับค่าว่าง
ตอนนี้ฉันได้ตั้ง NO_PROXY กับlocalhostและ127.0.0.1

> set NO_PROXY=127.0.0.1,localhost  

หากคุณต้องการผนวกค่าที่มีอยู่แล้ว

> set NO_PROXY=%NO_PROXY%,127.0.0.1,localhost  

หลังจากนี้ฉันเริ่ม zookeeper และ kafka
ทำงานเหมือนจับใจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.