# पहला Topic: बनाएँ, Produce करें, Consume करें — Apache Kafka: बुनियाद से Production तक Event Streaming

Source: https://www.geekswithgeeks.com/hi/kafka/kb-first-topic

> 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 को तैयार होने में लगभग दस सेकंड लगते हैं।

```bash
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)। पठनीयता के लिए सूची क्रमबद्ध है।

```bash
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
```

**Quiz:** Output में दोनों `user-1` records एक ही partition में हैं। क्यों?

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

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