diff --git a/README.md b/README.md index 376f70c0e392dd0a83273dbca7a5240a56ce163d..e65f661799529995d56606f27a33a30e5f90fa3b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ <p> <img width="480" src="https://www.andplus.com/hs-fs/hubfs/kafkalogo.jpg?&name=kafkalogo.jpg"> </p> -<h1>Apache Kafka 공부</h1> +<h1>Apache Kafka 공부 (Java, Python)</h1> <h5>v2.13-2.6.0</h5> [Apache Kafka](https://kafka.apache.org/) @@ -14,7 +14,7 @@ <table> <tr><td width=40% valign=top> -* Kafka +* Kafka (Java) * [Simple Producer](https://github.com/Alfex4936/kafka-Studies/blob/main/src/main/java/csw/kafka/study/lesson1/ProducerDemo.java) * [Producer with callback](https://github.com/Alfex4936/kafka-Studies/blob/main/src/main/java/csw/kafka/study/lesson1/ProducerDemoCallBack.java) * [Producer with key](https://github.com/Alfex4936/kafka-Studies/blob/main/src/main/java/csw/kafka/study/lesson1/ProducerDemoWithKey.java) diff --git a/python/README.md b/python/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e540dc5018c43664726cd7d881a9a9175beb03ed --- /dev/null +++ b/python/README.md @@ -0,0 +1,36 @@ +<div align="center"> +<p> + <img width="480" src="https://www.andplus.com/hs-fs/hubfs/kafkalogo.jpg?&name=kafkalogo.jpg"> +</p> +<h1>Apache Kafka 공부 in Python</h1> + <h5>v2.13-2.6.0</h5> + +[Apache Kafka](https://kafka.apache.org/) + +</div> + +## 설치 +[Kafka 다운로드](https://kafka.apache.org/downloads) + +*Make sure to Download "Binary"* + +## 실행 + +zookeeper & kafka 서버 실행 + +```console + +WIN10@DESKTOP:~$ zookeeper-server-start config/zookeeper.properties + +WIN10@DESKTOP:~$ kafka-server-start config/server.properties + +``` + +Kafka 설치 + +```console + +WIN10@DESKTOP:~$ pip install confluent-kafka + +``` + diff --git a/python/src/ProducerDemo.py b/python/src/ProducerDemo.py new file mode 100644 index 0000000000000000000000000000000000000000..9a8e8d68f74b26cf2942d66d21abf13b0b22be82 --- /dev/null +++ b/python/src/ProducerDemo.py @@ -0,0 +1,8 @@ +from confluent_kafka import Producer +from config import Config + +p = Producer({"bootstrap.servers": Config.MY_SERVER}) +p.produce(Config.TOPIC_ID, key="key_1", value="Hello") +p.flush(100) + +# kafka-console-consumer --bootstrap-server localhost:9092 --topic first-topic diff --git a/python/src/ProducerDemoCallBack.py b/python/src/ProducerDemoCallBack.py new file mode 100644 index 0000000000000000000000000000000000000000..b196cd56552ccb414e48ba8012269bdfff4559bd --- /dev/null +++ b/python/src/ProducerDemoCallBack.py @@ -0,0 +1,24 @@ +from confluent_kafka import Producer +from config import Config + + +def acked(err, msg): + if err is not None: + print("Failed to deliver message: {0}: {1}".format(msg.value(), err.str())) + else: + print("Message produced: {0}".format(msg.value())) # binary + + +p = Producer({"bootstrap.servers": Config.MY_SERVER}) + +try: + for val in range(1, 5): + p.produce(Config.TOPIC_ID, "value #{0}".format(val), callback=acked) + p.poll(0.5) + +except KeyboardInterrupt: + pass + +p.flush(100) + +# kafka-console-consumer --bootstrap-server localhost:9092 --topic first-topic diff --git a/python/src/__init__.py b/python/src/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/python/src/config.py b/python/src/config.py new file mode 100644 index 0000000000000000000000000000000000000000..89de0a6ba483f7bfd3bdc8c5764a2cd70f0ff2de --- /dev/null +++ b/python/src/config.py @@ -0,0 +1,4 @@ +class Config: + MY_SERVER = "localhost:9092" + TOPIC_ID = "first-topic" + GROUP_ID = "group-one" diff --git a/src/main/java/csw/kafka/study/lesson1/ProducerDemoWithKey.java b/src/main/java/csw/kafka/study/lesson1/ProducerDemoWithKey.java index 1baedd169ea1fd89f55a35fe28e256e8431d2782..8c8c1982b3b39cfbc22f4fabc1338e0c968a7292 100644 --- a/src/main/java/csw/kafka/study/lesson1/ProducerDemoWithKey.java +++ b/src/main/java/csw/kafka/study/lesson1/ProducerDemoWithKey.java @@ -31,7 +31,7 @@ public class ProducerDemoWithKey { logger.info("Key: " + key); // Kafka Producer Record - ProducerRecord<String, String> record = new ProducerRecord<String, String>(topic, key, value); + ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value); // Consumer한테 데이터 보내기 - 비동기 producer.send(record, new Callback() {