Skip to content
← All Skills
📨

Apache Kafka

Data & MessagingOfficial Site ›

Event-driven messaging สำหรับ microservices — order events, price feeds, trade reconciliation

What I Can Do

  • ออกแบบ topic structure และ partition strategy สำหรับ trading platform
  • Produce/consume messages ด้วย Go (segmentio/kafka-go, confluent-kafka-go)
  • จัดการ consumer group, offset management, rebalancing
  • Monitor lag และ troubleshoot consumer issues
  • Design dead letter queue สำหรับ failed messages

Commands I Use Daily

bash
# list ทุก topics
kafka-topics.sh --bootstrap-server localhost:9092 --list

# สร้าง topic ใหม่
kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --topic trading.orders.created \
  --partitions 6 --replication-factor 3

# ดู consumer group lag — ใช้ตรวจว่า consumer ตามทันไหม
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group order-processor

# consume messages แบบ real-time (debug)
kafka-console-consumer.sh --bootstrap-server localhost:9092 \
  --topic trading.orders.created --from-beginning --max-messages 10

# ดู/แก้ config เช่น retention period
kafka-configs.sh --bootstrap-server localhost:9092 \
  --alter --entity-type topics --entity-name trading.orders.created \
  --add-config retention.ms=604800000  # 7 days

Message Broker คืออะไร

Message broker เป็น middleware ที่รับ-ส่ง messages ระหว่าง services — producer ส่ง message เข้า broker, consumer อ่าน message ออกมา ทำให้ services ไม่ต้อง call หากันโดยตรง (decoupling)

Pub/Sub Model

Publisher ส่ง messages ไปที่ topic, subscribers ที่สนใจ topic นั้นจะได้รับ messages — ต่างจาก point-to-point ที่ส่งหา receiver โดยตรง Kafka ใช้ pull-based model คือ consumer ดึง messages เอง

Topic & Partition

  • Topic = logical channel สำหรับ messages ประเภทเดียวกัน เช่น trading.orders.created
  • Partition = unit of parallelism ภายใน topic — แต่ละ partition เป็น ordered, immutable log
  • จำนวน partitions กำหนด max parallelism ของ consumers

Producer & Consumer Basics

  • Producer ส่ง messages ไปที่ topic — ระบุ topic + optional key + value
  • Consumer อ่าน messages จาก topic — subscribe แล้ว poll messages มา process

Offset

Offset คือ sequential ID ของ message ภายใน partition — consumer track offset เพื่อรู้ว่าอ่านถึงไหนแล้ว เมื่อ restart จะ resume จาก committed offset

Consumer Group

กลุ่มของ consumers ที่ทำงานร่วมกัน — Kafka assign partitions ให้แต่ละ consumer ใน group ไม่ซ้ำกัน ทำให้ scale consumption ได้โดยเพิ่ม consumers (แต่ไม่เกินจำนวน partitions)

Partitioning Strategy

เลือก partition key ให้เหมาะกับ use case — same key ไปที่ same partition เสมอ ถ้าต้องการ ordering ใช้ entity ID เป็น key (เช่น order_id) ถ้าต้องการ distribution ใช้ random หรือ round-robin

Message Key & Ordering

Kafka guarantee ordering ภายใน partition เดียวเท่านั้น — ถ้าต้องการ messages ของ entity เดียวกันเรียงตามลำดับ ต้องใช้ entity ID เป็น key เพื่อให้ไปที่ partition เดียวกัน

Replication Factor

แต่ละ partition มี replicas กระจายอยู่บนหลาย brokers — replication factor 3 หมายความว่ามี 3 copies ถ้า broker ตัวหนึ่ง down ยัง serve ได้จาก replica อื่น

Acknowledgment (acks)

  • acks=0 — producer ไม่รอ confirmation (เร็วสุด, อาจ lose messages)
  • acks=1 — รอ leader confirm (balanced)
  • acks=all — รอทุก replicas confirm (ช้าสุด, safest)

Consumer Rebalancing

เมื่อ consumer เข้า/ออกจาก group, Kafka reassign partitions — ระหว่าง rebalance ไม่มีการ consume ใช้ session.timeout.ms และ heartbeat.interval.ms ควบคุม detection speed

Dead Letter Queue

Messages ที่ process fail หลาย attempts จะถูกส่งไป DLQ topic แทนที่จะ block consumer — ทำให้ main consumption ไม่ติดขัด สามารถ inspect และ retry messages ใน DLQ ทีหลัง

Exactly-once Semantics

Kafka รองรับ exactly-once processing ด้วย combination ของ idempotent producer + transactions + consumer read_committed isolation — ป้องกัน duplicate processing

Idempotent Producer

Enable enable.idempotence=true ทำให้ producer ส่ง message ซ้ำได้โดย Kafka deduplicate ให้ — ป้องกัน duplicate messages จาก network retry

Transaction API

Producer สามารถ send messages แบบ atomic (all-or-nothing) ข้าม multiple topics/partitions — ใช้สำหรับ consume-transform-produce pattern เพื่อ guarantee exactly-once

Consumer Lag Monitoring

ติดตาม lag (offset ล่าสุด - committed offset ของ consumer) — lag ที่เพิ่มขึ้นเรื่อยๆ หมายความว่า consumer process ไม่ทัน ต้อง scale out หรือ optimize processing

Retention & Compaction

  • Time-based retention — ลบ messages เก่ากว่า X วัน (retention.ms)
  • Log compaction — เก็บแค่ latest value ของแต่ละ key, ใช้สำหรับ changelog topics

Schema Evolution (Avro/Protobuf)

ใช้ Schema Registry + Avro/Protobuf เพื่อ enforce message schema — รองรับ backward/forward compatible evolution โดย producer/consumer ไม่ต้อง deploy พร้อมกัน

Kafka Connect

Framework สำหรับ stream data เข้า/ออก Kafka โดยไม่ต้องเขียน code — source connectors (DB → Kafka), sink connectors (Kafka → DB/S3/Elasticsearch)

Related Skills

  • Go — ภาษาที่ใช้เขียน Kafka producer/consumer
  • Docker — run Kafka cluster ใน development
  • PostgreSQL — consume events แล้วเขียนลง database