Review checklist
นี่คือ checklist ที่ควรไล่ดูด้วยตา บน diff ไหนก็ตาม ของคุณเองหรือของ AI — หลังจาก tool ใน Verification Tools รันแล้วผ่านสะอาด มันตั้งใจให้พอดีหน้าเดียวตอนพิมพ์: checklist ที่ไม่มีใครเปิดดูจริงระหว่าง review ไม่มีค่าอะไรเลย ทุกบรรทัดลิงก์ไป catalog entry ที่อธิบายว่า ทำไม หน้านี้เลยยังเป็นแค่ list ไม่ใช่การรันคอร์สซ้ำ กลุ่มต่าง ๆ เรียงตามลำดับเดียวกับ How to read Kafka code you did not write บวกกลุ่ม Tooling สุดท้ายที่ครอบคลุมว่าอีกเจ็ดกลุ่มถูกยืนยันได้จริงอย่างไร
flowchart LR A["Client & versions"] --> T["Mostly human review<br/>(silently-ignored keys, unmaintained defaults)"] W["Producer"] --> P["Partial: tsc catches nothing here,<br/>only a real send reveals the gap"] S["Consumer loop & commits"] --> R["Needs a real restart or timeout to surface"] N["Delivery & transactions"] --> R ST["Topic & broker config"] --> M["Accepted, not rejected --<br/>--describe/--under-min-isr-partitions shows it"] Sec["Ops & security"] --> T2["CLI/broker rejects outright --<br/>easiest group to catch mechanically"] O["Connect/Streams/Schema"] --> M2["REST /config/validate + /connector-plugins,<br/>not source-vs-sink semantics"]
Client & versions
หัวข้อที่มีชื่อว่า “Client & versions”- โค้ด import
kafkajsหรือ@confluentinc/kafka-javascript— และคนรีวิวรู้ว่าเป็นตัวไหนก่อนจะตัดสิน default ไหนเลยหรือไม่? ดู AI Bug Catalog รายการ 3 - config object ของ KafkaJS พก key เฉพาะ Java client (
group.protocol=consumer, KIP-848) ที่ถูกทิ้งเงียบ ๆ แทนที่จะถูกปฏิเสธหรือไม่? ดูรายการ 2 - script shell ไหนส่ง
--zookeeperให้ toolkafka-*.shหรือไม่? ถูกถอดออกเต็ม ๆ ตั้งแต่ Kafka 4.0 ดูรายการ 1 - comment สมมติว่าทุก compression codec หรือ partition assigner แบบ “sticky” มีให้ในตัวบน KafkaJS ทั้งที่มันมีแค่
gzipและแค่RoundRobinAssignerหรือไม่? ดูรายการ 3
Producer
หัวข้อที่มีชื่อว่า “Producer”idempotent: trueถูกตั้งชัดเจนบน producer ที่ write ของมันสำคัญ แทนที่จะทิ้งไว้ที่ default จริงของ KafkaJS คือfalseหรือไม่? ดู AI Bug Catalog รายการ 4 และ Idempotent Producer- comment อ้าง compression codec (
lz4,snappy,zstd) ที่ KafkaJS ไม่มี implementation จริงให้หรือไม่? ดูรายการ 5 - producer ที่สร้างด้วย
transactionalIdเคยเรียก.send()ตรง ๆ แทนการห่อทุก write ด้วย.transaction()หรือไม่? ดูรายการ 6
Consumer loop & commits
หัวข้อที่มีชื่อว่า “Consumer loop & commits”- มีอะไรที่ช้า — HTTP call, DB write ที่ไม่มีขอบเขต — รันอยู่ใน
eachMessageโดยลืมว่า heartbeat ของ KafkaJS ยิงแค่หลัง handler return แล้วหรือไม่? ดู AI Bug Catalog รายการ 7 พิสูจน์ด้วย eviction จริงแบบcoordinator is not aware of this memberและ Consumer API - การเรียก
commitOffsetsแบบ manual ส่ง offset ที่อ่านมาเมื่อกี้ แทนที่จะเป็นoffset + 1หรือไม่? ดูรายการ 8 พิสูจน์ด้วย duplicate จริงตอน restart - พอ record ถูก route ไป dead-letter topic แล้ว โค้ด commit offset ของ message ต้นฉบับ หรือไม่? ดูรายการ 9 พิสูจน์ด้วย loop ประมวลผลซ้ำถาวรจริง
Delivery & transactions
หัวข้อที่มีชื่อว่า “Delivery & transactions”- loop consume-transform-produce commit consumer offset ด้วยการเรียก
commitOffsetsแยก แทนtxn.sendOffsets()ภายใน transaction เดียวกันหรือไม่? ดู AI Bug Catalog รายการ 10 พิสูจน์ด้วย duplicate จริงหลัง crash และ Exactly-Once Processing readUncommittedเคยถูกสลับเป็นtrueเพื่อ “แก้” record ที่จริง ๆ ถูก abort ไปตั้งใจหรือไม่? ดูรายการ 11- logic retry/abort เช็ค
error.retriableก่อนตัดสินใจ retry ไหม หรือ retry error ที่ fenced และ fatal ไปตลอดกาล? ดูรายการ 12 พิสูจน์ด้วย fencing error จริงที่retriable: false
Topic & broker config
หัวข้อที่มีชื่อว่า “Topic & broker config”replication-factorของ topic รองรับmin.insync.replicasที่มันตั้งจริงหรือไม่ — หรือ combination นี้ถูกรับเงียบ ๆ ตาม KIP-579? ดู AI Bug Catalog รายการ 13 และ Acks and Durability- การเพิ่ม partition ให้ topic ที่ใช้ key อยู่แล้วมีแผนสำหรับ reader ที่พึ่ง per-key ordering หรือไม่ — และ client producer/consumer ที่รันอยู่นานทุกตัวได้ refresh metadata หรือไม่? ดูรายการ 14
auto.create.topics.enable(หรือ static broker config อื่น) ถูกสมมติว่ามีผลจากการเรียกkafka-configs.sh --alterแบบสด ๆ หรือไม่? ดูรายการ 15 พิสูจน์ด้วยInvalidRequestExceptionจริง
Ops & security
หัวข้อที่มีชื่อว่า “Ops & security”- script หรือ runbook ไหนอ้าง CLI tool ที่ไม่มีอยู่จริง (
kafka-metadata.sh) หรือไม่? ดู AI Bug Catalog รายการ 16 พิสูจน์ด้วย error “no such file” จริง - command ไหนส่ง flag ที่ไม่มีอยู่จริงบน tool จริง (
--run-all) หรือไม่? ดูรายการ 17 พิสูจน์ด้วยUnrecognizedOptionExceptionจริง - runbook เรียก
kafka-acls.shบน cluster ที่ไม่เคยตั้งauthorizer.class.nameหรือไม่? ดูรายการ 18 พิสูจน์ด้วยSecurityDisabledExceptionจริง และ Security and Production
Connect / Streams / Schema
หัวข้อที่มีชื่อว่า “Connect / Streams / Schema”- Connect ถูก deploy แบบ
standaloneสำหรับอะไรที่ต้องการ fault tolerance แทนconnect-distributed.shหรือไม่? ดู AI Bug Catalog รายการ 19 - connector config อ้าง class ที่อยู่บน
plugin.pathจริง ไม่ใช่แค่มีอยู่บน disk ที่ไหนสักแห่งหรือไม่? ดูรายการ 19 พิสูจน์ด้วยBadRequestExceptionรูปร่างClassNotFoundExceptionจริงทั้งที่ jar มีอยู่ errors.deadletterqueue.topic.nameถูกตั้งพร้อมกับerrors.tolerance=all(default จริง:none) — และตั้งบน connector แบบ sink เท่านั้นหรือไม่? ดูรายการ 20 พิสูจน์สด ๆ กับ/config/validateของ worker ที่รันจริง- โค้ดสมมติว่า KafkaJS consumer เข้าร่วม share group (KIP-932) ได้เลยหรือไม่? ดูรายการ 21 พิสูจน์ด้วย grep type definition ของ client เองที่ไม่เจอเลย และ Choosing a Processing Layer
Tooling
หัวข้อที่มีชื่อว่า “Tooling”tsc --noEmitถูกรันบนทุก TypeScript snippet ก่อนเชื่อว่ามัน compile ผ่าน โดยรู้ว่ามันตรวจแค่ type ไม่เคยตรวจ durability, ordering, หรือ commit semantics เลยหรือไม่? ดู Verification Toolskafka-configs.sh --describe --allถูกรันกับ broker จริงก่อนเชื่อว่า config key มีอยู่จริงและ alter แบบ dynamic ได้ แทนที่จะสมมติจาก tutorial หรือไม่? ดู Verification Tools- CI รัน harness ของคอร์สนี้เอง (
npm run verify,--run,--cli,--props) กับทุก fence ไม่ใช่แค่คนสไลด์ตาดูหรือไม่? ดู Verification Tools