पाठ 4 / 25

पहला Topic: बनाएँ, Produce करें, Consume करें

Local broker चलाएँ और command-line tools से topic बनाएँ, keyed records भेजें और पढ़ें।

स्थानीय रूप से आज़माएँ

प्रयोग का सबसे तेज़ तरीक़ा official Docker image है, जो KRaft mode में single-node broker शुरू करती है। kafka-topics.sh, kafka-console-producer.sh और kafka-console-consumer.sh image में /opt/kafka/bin के अंतर्गत हैं। आप partition संख्या के साथ topic बनाते हैं, lines (वैकल्पिक keys के साथ) produce करते हैं और शुरुआत से consume करते हैं। यह सिर्फ़ सीखने के लिए है; production में कई brokers होते हैं।

Broker शुरू करें और topic बनाएँ, चलाकर

मैंने ये Kafka 3.9.0 पर चलाए। Container image को तैयार होने में लगभग दस सेकंड लगते हैं।

docker run -d --name kafka-demo apache/kafka:3.9.0
docker exec kafka-demo /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --topic orders --partitions 6 --replication-factor 1
docker exec kafka-demo /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

Output:

Created topic orders.
orders

Keyed records produce करें और वापस पढ़ें, चलाकर

हर पंक्ति key:value है। Consumer partition और offset छापता है; ध्यान दें कि user-1 और user-2 partition 2 में गए और दोनों user-1 records क्रम में हैं (offsets 0 और 2)। पठनीयता के लिए सूची क्रमबद्ध है।

printf 'user-1:placed\nuser-2:placed\nuser-3:placed\nuser-4:placed\nuser-5:placed\nuser-6:placed\nuser-1:paid\n' | \
  docker exec -i kafka-demo /opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server localhost:9092 --topic orders \
  --property parse.key=true --property key.separator=:

docker exec kafka-demo /opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 --topic orders --from-beginning --max-messages 7 \
  --property print.key=true --property print.partition=true --property print.offset=true

Output:

Partition:1	Offset:0	user-4	placed
Partition:2	Offset:0	user-1	placed
Partition:2	Offset:1	user-2	placed
Partition:2	Offset:2	user-1	paid
Partition:4	Offset:0	user-5	placed
Partition:5	Offset:0	user-3	placed
Partition:5	Offset:1	user-6	placed

त्वरित जाँच: Output में दोनों `user-1` records एक ही partition में हैं। क्यों?

  • Kafka हर बार partition यादृच्छिक चुनता है
  • एक ही key एक ही partition में hash होती है
  • Partitions value के वर्णानुक्रम से चुने जाते हैं
  • यह broker का संयोग था
Answer

एक ही key एक ही partition में hash होती है — डिफ़ॉल्ट partitioner key को hash करता है, इसलिए समान keys हमेशा एक ही partition पर जाती हैं।