ลบหัวข้อใน Kafka 0.8.1.1


98

ฉันต้องการลบหัวข้อนี้ testใน Apache Kafka 0.8.1.1

ตามที่แสดงไว้ในเอกสารที่นี่ฉันได้ดำเนินการ:

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

อย่างไรก็ตามผลลัพธ์นี้เป็นข้อความต่อไปนี้:

Command must include exactly one action: --list, --describe, --create or --alter

ฉันจะลบหัวข้อนี้ได้อย่างไร


อธิบายขั้นตอนทีละขั้นตอนใน: stackoverflow.com/questions/33537950/…
Ravindra babu

คำตอบ:


110

การลบหัวข้อไม่สามารถทำได้ใน 0.8.1.1 เสมอไป

การลบควรใช้งานได้ในรุ่นถัดไป 0.8.2

kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

  Topic your_topic_name is marked for deletion.
  Note: This will have no impact if delete.topic.enable is not set to true.

สามารถลบหัวข้อได้หรือไม่?

จิระ KAFKA-1397


ขอบคุณสำหรับข้อมูล. คุณรู้วิธีล้างรัฐคาฟคาและ Zookeeper ทั้งหมดตามที่ระบุไว้หรือไม่?
EmPak5

@EmPack IIRC วิธีที่ง่ายที่สุดในการทำเช่นนั้น (หากคุณไม่สนใจเวลาว่าง) คือการปิดโบรกเกอร์ทั้งหมดของคุณลบบันทึกของคุณสำหรับหัวข้อนั้นและเปลี่ยนเนมสเปซ ZK ของคุณ
ตรงไปตรงมา

95

ดูเหมือนว่าคำสั่งการลบไม่ได้รับการบันทึกอย่างเป็นทางการใน Kafka 0.8.1.x เนื่องจากพบข้อผิดพลาด ( https://issues.apache.org/jira/browse/KAFKA-1397 )

อย่างไรก็ตามคำสั่งยังคงถูกส่งมาในรหัสและสามารถดำเนินการได้ดังนี้:

bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper localhost:2181 --topic test

ในระหว่างนี้ข้อบกพร่องได้รับการแก้ไขและขณะนี้คำสั่งการลบพร้อมใช้งานอย่างเป็นทางการจาก Kafka 0.8.2.0 เป็น:

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

จากสิ่งที่ฉันอ่านมันอาจจะทำงาน 0.8.1.1 แต่มันอาจจะไม่ ... การแก้ไขยังอยู่ในลำต้นตั้งแต่ขณะที่ดังนั้นหากคุณเอาแหล่งที่มาโดยตรงจากลำต้นมันควรจะทำงาน
ตรงไปตรงมา

ฉันเพิ่งลองใช้ 0.8.1.1 มันรายงานว่า "ลบสำเร็จ" แต่ไม่ได้ผล ยังมีหัวข้ออยู่ฉันสามารถแนบผู้บริโภคได้และจะรายงานรายการก่อนหน้าทั้งหมดว่ารอดำเนินการ
Elias Dorneles

การลบหัวข้อใน Kafka 0.8.1.1 ไม่ได้ผล เวอร์ชัน 0.8.2.0 ที่เพิ่งเปิดตัวล่าสุดควรมีการสนับสนุนการลบที่เหมาะสม ดูblog.confluent.io/2014/12/02/whats-coming-in-apache-kafka-0-8-2
Michael G.Noll

BTW คุณสมบัติสำหรับ delete.topic.enable = true สามารถอยู่ในไฟล์ server.properties มีการแสดงความคิดเห็นโดยปริยาย
Shanemeister

38

เพิ่มบรรทัดด้านล่างใน $ {kafka_home} /config/server.properties

delete.topic.enable=true

รีสตาร์ทเซิร์ฟเวอร์ kafka ด้วยการกำหนดค่าใหม่:

${kafka_home}/bin/kafka-server-start.sh ~/kafka/config/server.properties

ลบหัวข้อที่คุณต้องการ:

${kafka_home}/bin/kafka-topics.sh --delete  --zookeeper localhost:2181  --topic daemon12

10

Andrea ถูกต้อง เราสามารถทำได้โดยใช้บรรทัดคำสั่ง

และเรายังสามารถตั้งโปรแกรมได้โดย

ZkClient zkClient = new ZkClient("localhost:2181", 10000);
zkClient.deleteRecursive(ZkUtils.getTopicPath("test2"));

อันที่จริงฉันไม่แนะนำให้คุณลบหัวข้อใน Kafka 0.8.1.1 ฉันสามารถลบหัวข้อนี้ได้ด้วยวิธีนี้ แต่ถ้าคุณตรวจสอบบันทึกสำหรับ zookeeper การลบจะทำให้ยุ่ง


ควรรวม zkClient.deleteRecursive (ZkUtils.getTopicConfigPath ("test2")) ด้วย และ
สุมิตร

@ สุมิตรแล้วไง ฉันไม่ได้ใช้ "getTopicConfigPath" นั้น อันที่จริงฉันไม่แนะนำให้คุณลบหัวข้อใน Kafka 0.8.1.1 ฉันสามารถลบหัวข้อนี้ได้ด้วยวิธีนี้ แต่ถ้าคุณตรวจสอบบันทึกสำหรับ zookeeper การลบจะทำให้ยุ่ง
เลี่ยง

แต่นี่คือวิธีที่คาฟคาทำเช่นกัน (วิธีที่คุณแนะนำ): apache.googlesource.com/kafka/+/0.8.1/core/src/main/scala/kafka/…
Sumit

@ สุมิตร. ใช่ฉันพบรหัสจากที่นั่น ฉันไม่แน่ใจเกี่ยวกับสิ่งที่ "ยุ่ง" เนื่องจากเมื่อฉันลบหัวข้อบนเซิร์ฟเวอร์ บริษัท ของฉันการลบจะสร้างขยะจำนวนมากไปยังบันทึก Zookeeper แต่ไม่สามารถทำซ้ำได้ในท้องถิ่นของฉัน จึงไม่แนะนำให้ ..
เลี่ยง

4

คุณสามารถลบหัวข้อ kafka เฉพาะ (ตัวอย่างtest:) จากคำสั่ง zookeeper เชลล์ ( zookeeper-shell.sh) ใช้คำสั่งด้านล่างเพื่อลบหัวข้อ

rmr {path of the topic}

ตัวอย่าง:

rmr /brokers/topics/test

ตั้งค่า delete.topic.enable = true จากนั้นลบจาก kafka แล้วลบจาก zookeeper ด้วย ...
minhas23

4

ขั้นตอนในการลบ 1 หัวข้อหรือมากกว่าใน Kafka

ในการลบหัวข้อใน kafka จำเป็นต้องเปิดใช้งานตัวเลือกการลบในเซิร์ฟเวอร์ Kafka

1. Go to {kafka_home}/config/server.properties
2. Uncomment delete.topic.enable=true

ลบหนึ่งหัวข้อใน Kafka ป้อนคำสั่งต่อไปนี้

kafka-topics.sh --delete --zookeeper localhost: 2181 - หัวข้อ

หากต้องการลบมากกว่าหนึ่งหัวข้อจากคาฟคา

(เหมาะสำหรับวัตถุประสงค์ในการทดสอบโดยที่ฉันสร้างหลายหัวข้อและต้องลบหัวข้อเหล่านั้นสำหรับสถานการณ์ต่างๆ)

  1. หยุดเซิร์ฟเวอร์ Kafka และ Zookeeper
  2. ไปที่โฟลเดอร์ / tmp ที่จัดเก็บบันทึกและลบโฟลเดอร์ kafkalogs และ zookeeper ด้วยตนเอง
  3. รีสตาร์ทเซิร์ฟเวอร์ Zookeeper และ kafka แล้วลองแสดงรายการหัวข้อ

bin / kafka-topics.sh --list - ผู้ดูแลระบบ localhost: 2181

หากไม่มีการแสดงหัวข้อแสดงว่าหัวข้อทั้งหมดถูกลบเรียบร้อยแล้วหากหัวข้ออยู่ในรายการแสดงว่าการลบไม่สำเร็จ ลองทำตามขั้นตอนข้างต้นอีกครั้งหรือรีสตาร์ทคอมพิวเตอร์


โปรดทราบว่าสำหรับ Kafka เวอร์ชันล่าสุดในขณะนี้ (1.0.0) ตัวเลือกนั้นจะไม่ปรากฏในserver.propertiesไฟล์ คุณต้องเพิ่มบรรทัดนั้นด้วยตนเอง
David Corral

@DavidCorral การลบหัวข้อถูกเปิดใช้งานโดยค่าเริ่มต้นใน 1.0.0
Tanner

2

ขั้นตอนนี้จะลบหัวข้อและข้อมูลทั้งหมด

  • หยุด Kafka-server และ Zookeeper-server
  • ลบไดเรกทอรีข้อมูล tmp ของทั้งสองบริการโดยค่าเริ่มต้นคือ C: / tmp / kafka-logs และ C: / tmp / zookeeper
  • จากนั้นเริ่ม Zookeeper-server และ Kafka-server

2

คำสั่ง:

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

น่าเสียดายที่ทำเครื่องหมายหัวข้อสำหรับการลบเท่านั้น

การลบไม่เกิดขึ้น

นั่นทำให้เกิดปัญหาขณะทดสอบสคริปต์ใด ๆ ซึ่งเตรียมการกำหนดค่า Kafka

เธรดที่เชื่อมต่อ:


1

การเพิ่มคำตอบข้างต้นจะต้องลบข้อมูลเมตาที่เกี่ยวข้องกับหัวข้อนั้นในเส้นทางออฟเซ็ตผู้บริโภคของ Zookeeper

bin/zookeeper-shell.sh zookeeperhost:port

rmr /consumers/<sample-consumer-1>/offsets/<deleted-topic>

มิฉะนั้นความล่าช้าจะเป็นผลลบในเครื่องมือตรวจสอบคาฟคาตามผู้ดูแลสวนสัตว์


1

ดังที่กล่าวไว้ในเอกสารที่นี่

ตัวเลือกการลบหัวข้อถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งานให้ตั้งค่าเซิร์ฟเวอร์ config delete.topic.enable = true Kafka ไม่สนับสนุนการลดจำนวนพาร์ติชันสำหรับหัวข้อหรือการเปลี่ยนปัจจัยการจำลอง

ตรวจสอบให้แน่ใจว่า delete.topic.enable = true


ฉันเชื่อว่าตัวเลือกนั้นมีให้เฉพาะในวันที่ 8.2
spuder


0

หากคุณมีปัญหาในการลบหัวข้อให้ลองลบหัวข้อโดยใช้:

$KAFKA_HOME/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

คำสั่ง จากนั้นเพื่อตรวจสอบกระบวนการลบให้ไปที่ไดเร็กทอรีบันทึก kafka ซึ่งปกติจะอยู่ข้างใต้/tmp/kafka-logs/จากนั้นลบyour_topic_nameไฟล์ผ่านrm -rf your_topic_nameคำสั่ง

อย่าลืมตรวจสอบกระบวนการทั้งหมดผ่านเครื่องมือการจัดการคาฟคาเช่น Kafka Tool .

กระบวนการดังกล่าวข้างต้นจะลบหัวข้อโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ kafka


0

ขั้นตอนที่ 1: ตรวจสอบว่าคุณเชื่อมต่อกับ Zookeeper และ Kafka ที่กำลังวิ่งอยู่

ขั้นตอนที่ 2: ในการจัดการหัวข้อ Kafka ให้เรียกใช้ Kafka-topic (Mac) หรือ Kafka-topic.sh หากใช้ (linux / Mac) ให้เพิ่มพอร์ตและ --topic พร้อมชื่อหัวข้อของคุณและ - ลบออกเพียงแค่ลบหัวข้อด้วย ความสำเร็จ.

# Delete the kafka topic
# it will delete the kafka topic
kafka-topics --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete
# or
kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete

0

ขั้นแรกให้คุณรันคำสั่งนี้เพื่อลบหัวข้อของคุณ:

$ bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic <topic_name>

ระบุหัวข้อที่ใช้งานเพื่อตรวจสอบการลบทั้งหมด:

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