Running Kafka Locally
ไอเดียในหนึ่งประโยค
หัวข้อที่มีชื่อว่า “ไอเดียในหนึ่งประโยค”รัน Kafka 4.x บนเครื่องคือการสตาร์ท broker ตัวเดียวในโหมด KRaft ไม่มี ZooKeeper ไม่มี dependency ภายนอก แล้วคุยกับ broker ตัวนั้นทั้งหมดผ่าน --bootstrap-server localhost:9092 เพื่อสร้าง topic, produce record และ consume กลับมา
ทางที่เร็วที่สุด: Docker container เดียว
หัวข้อที่มีชื่อว่า “ทางที่เร็วที่สุด: Docker container เดียว”Image ทางการ apache/kafka มาพร้อม broker ที่รองรับ KRaft ซึ่ง format storage ให้ตัวเองและสตาร์ทเป็น broker รวมกับ controller คำสั่งเดียวได้ cluster ที่ใช้งานได้เลย
# Start a single-node Kafka 4.x broker in KRaft mode, port 9092 exposeddocker 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 ก็ได้
ทางแบบ manual: format storage แล้วค่อยสตาร์ท
หัวข้อที่มีชื่อว่า “ทางแบบ manual: format storage แล้วค่อยสตาร์ท”ถ้าคุณรัน tarball ที่โหลดมาแทน Docker KRaft ต้องมีขั้นตอน format storage ครั้งเดียว คุณ generate cluster UUID แล้วเขียน UUID นั้นลง log directory ก่อนสตาร์ทครั้งแรก
# 1. Generate a unique cluster IDKAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
# 2. Format the log directory for KRaft using that ID and the KRaft configbin/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
สร้าง topic, produce, consume
หัวข้อที่มีชื่อว่า “สร้าง topic, produce, consume”พอ broker ขึ้นแล้ว ทุกคำสั่งเล็งไปที่ --bootstrap-server flag --zookeeper ไม่มีอยู่แล้ว สร้าง topic ก่อน
# 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
# Produce: each line you type becomes a recordkafka-console-producer.sh --bootstrap-server localhost:9092 --topic demoและ consumer ใน terminal อีกอันเพื่ออ่านกลับตั้งแต่ต้น
# Consume: --from-beginning replays every record in the topickafka-console-consumer.sh --bootstrap-server localhost:9092 \ --topic demo --from-beginning