ข้ามไปยังเนื้อหา

Running Kafka Locally

รัน Kafka 4.x บนเครื่องคือการสตาร์ท broker ตัวเดียวในโหมด KRaft ไม่มี ZooKeeper ไม่มี dependency ภายนอก แล้วคุยกับ broker ตัวนั้นทั้งหมดผ่าน --bootstrap-server localhost:9092 เพื่อสร้าง topic, produce record และ consume กลับมา

Image ทางการ apache/kafka มาพร้อม broker ที่รองรับ KRaft ซึ่ง format storage ให้ตัวเองและสตาร์ทเป็น broker รวมกับ controller คำสั่งเดียวได้ cluster ที่ใช้งานได้เลย

Terminal window
# Start a single-node Kafka 4.x broker in KRaft mode, port 9092 exposed
docker run -d --name kafka -p 9092:9092 apache/kafka:latest

นั่นคือ cluster ทั้งหมด ไม่มีอะไรต้องติดตั้งเพิ่ม ไม่มี process ZooKeeper ใน Kafka 4.x container มี CLI script ติดมาให้ในตัว คุณจึงรันคำสั่ง admin ข้างในด้วย docker exec ได้ หรือจะติดตั้ง Kafka tarball บนเครื่องแล้วชี้ script ไปที่ localhost:9092 ก็ได้

ถ้าคุณรัน tarball ที่โหลดมาแทน Docker KRaft ต้องมีขั้นตอน format storage ครั้งเดียว คุณ generate cluster UUID แล้วเขียน UUID นั้นลง log directory ก่อนสตาร์ทครั้งแรก

Terminal window
# 1. Generate a unique cluster ID
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
# 2. Format the log directory for KRaft using that ID and the KRaft config
bin/kafka-storage.sh format --standalone \
-t "$KAFKA_CLUSTER_ID" \
-c config/server.properties
# 3. Start the broker (it is also the controller in a single-node setup)
bin/kafka-server-start.sh config/server.properties

คู่ random-uuid กับ format คือพิธี bootstrap ของ KRaft ใช้แทนการ handshake กับ ZooKeeper แบบเดิม ทำแค่ครั้งเดียวต่อ data directory หนึ่งอัน

flowchart LR
  fmt["kafka-storage.sh format (KRaft)"] --> start["kafka-server-start.sh (broker + controller)"]
  start --> topic["kafka-topics.sh --create"]
  topic --> prod["kafka-console-producer.sh"]
  topic --> cons["kafka-console-consumer.sh"]
  prod -->|"records"| cons
workflow KRaft บนเครื่อง: format, สตาร์ท แล้ว produce และ consume

พอ broker ขึ้นแล้ว ทุกคำสั่งเล็งไปที่ --bootstrap-server flag --zookeeper ไม่มีอยู่แล้ว สร้าง topic ก่อน

Terminal window
# Create a topic named "demo" with 1 partition (fine for local)
kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic demo --partitions 1 --replication-factor 1

จากนั้นเปิด producer ใน terminal หนึ่งแล้วพิมพ์ข้อความ บรรทัดละหนึ่ง record

Terminal window
# Produce: each line you type becomes a record
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic demo

และ consumer ใน terminal อีกอันเพื่ออ่านกลับตั้งแต่ต้น

Terminal window
# Consume: --from-beginning replays every record in the topic
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--topic demo --from-beginning
ต้องติดตั้งอะไรเพิ่มคู่กับ Kafka 4.x เพื่อรันบนเครื่อง
จุดประสงค์ของ `kafka-storage.sh format` ในขั้นตอนสตาร์ทแบบ manual คืออะไร
CLI tool ของ Kafka 4.x ใช้ flag ไหนระบุ address ของ cluster
จะ replay ทุก record ที่มีอยู่แล้วใน topic ด้วย console consumer ยังไง