TIL, WIL/TIL๐Ÿ“˜

03. 07 TIL : ์นดํ”„์นด ์„ธํŒ… ๋ฐ ์‹คํ–‰, ํ…Œ์ŠคํŠธ

wannaDevelopIt 2025. 3. 7. 17:45
728x90

์Šคํ”„๋ง ์นดํ”„์นด ์‹คํ–‰ํ•˜๊ธฐ

1. ์•„ํŒŒ์น˜ ์ œ๊ณต ์นดํ”„์นด ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ•ํ’€๊ธฐ

2. ์••์ถ• ํ‘ผ ํด๋”๋กœ ์ด๋™ํ•ด
2-1) Zookeeper ์‹คํ–‰ ~ ๊ธฐ๋ณธํฌํŠธ : 2181

bin>zookeeper-server-start.sh config/zookeeper.properties

 

 

2-2) Kafka ์„œ๋ฒ„ ์‹คํ–‰ ~ ๊ธฐ๋ณธํฌํŠธ : 9092

bin>zookeeper-server-start.sh config/server.properties

 

(config/server.properties์—์„œ ์„ค์ • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ (์˜ˆ: listeners=PLAINTEXT://localhost:9092)

3. ํ† ํ”ฝ(๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋‹จ์œ„) ์ƒ์„ฑ
ex) ์ฑ„ํŒ…์‹œ์Šคํ…œ์šฉ ํ† ํ”ฝ : 

bin/kafka-topics.sh --create --topic chat-messages --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

 

--partitions: ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋‹จ์œ„.
--replication-factor: ๋ณต์ œ๋ณธ ์ˆ˜ (ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ ์žฅ์•  ๋ณต๊ตฌ์šฉ).

4. kafka ๋ฐฑ์—”๋“œ ํ†ตํ•ฉ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰(Produce)ํ•˜๊ณ  ์†Œ๋น„(Consume)ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
4-1) ์˜์กด์„ฑ ์ถ”๊ฐ€

4-2) Producer ๊ตฌํ˜„

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

 

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class KafkaProducerService {

    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaProducerService(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
        System.out.println("Sent to Kafka: " + message);
    }
}


4-4) ์ปจ์Šˆ๋จธ ๊ตฌํ˜„

spring.kafka.consumer.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=chat-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

 

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
public class KafkaConsumerService {

    @KafkaListener(topics = "chat-messages", groupId = "chat-group")
    public void listen(String message) {
        System.out.println("Received from Kafka: " + message);
        // ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€
    }
}


4-5) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ตฌํ˜„

@Controller
public class ChatController {

    private final KafkaProducerService kafkaProducerService;
    private final SimpMessagingTemplate messagingTemplate;

    public ChatController(KafkaProducerService kafkaProducerService, SimpMessagingTemplate messagingTemplate) {
        this.kafkaProducerService = kafkaProducerService;
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/sendMessage")
    public void sendMessage(@Payload String message) {
        kafkaProducerService.sendMessage("chat-messages", message); // Kafka๋กœ ์ „์†ก
    }

    @KafkaListener(topics = "chat-messages", groupId = "chat-group")
    public void listen(String message) {
        messagingTemplate.convertAndSend("/topic/chatroom", message); // STOMP๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ
    }
}


5. Kafka ํ†ตํ•ฉ์˜ ์ด์ 
ํ™•์žฅ์„ฑ: Kafka์˜ ํŒŒํ‹ฐ์…˜๊ณผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ์ˆ˜๋ฐฑ๋งŒ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
์˜์†์„ฑ: ๋ฉ”์‹œ์ง€๊ฐ€ ํ† ํ”ฝ์— ์ €์žฅ๋˜๋ฏ€๋กœ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ณต๊ตฌ ๊ฐ€๋Šฅ.
๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: ๋ฐฑ์—”๋“œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ Kafka๋กœ ๋ณด๋‚ด๊ณ , ์†Œ๋น„์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ฒ˜๋ฆฌ.
์œ ์—ฐ์„ฑ: ์ฑ„ํŒ… ์™ธ์— ๋กœ๊ทธ ๋ถ„์„, ์•Œ๋ฆผ ๋“ฑ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ํ™•์žฅ ๊ฐ€๋Šฅ.

6. ๊ณ ๊ธ‰ ์„ค์ • (์„ ํƒ)
ํŒŒํ‹ฐ์…˜ ์ฆ๊ฐ€: ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ† ํ”ฝ ํŒŒํ‹ฐ์…˜ ์ˆ˜ ์กฐ์ • (--partitions).
๋ณต์ œ: ์žฅ์•  ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋ณต์ œ๋ณธ ์ˆ˜ ์ฆ๊ฐ€ (--replication-factor).
Consumer Group: ์—ฌ๋Ÿฌ ์†Œ๋น„์ž ๊ทธ๋ฃน์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ.
์˜คํ”„์…‹ ๊ด€๋ฆฌ: auto-offset-reset์„ latest๋กœ ์„ค์ •ํ•ด ์ตœ์‹  ๋ฉ”์‹œ์ง€๋งŒ ์†Œ๋น„.

7. ํ…Œ์ŠคํŠธ
7-1) ํ† ํ”ฝ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ

bin/kafka-topics.sh --list --bootstrap-server localhost:9092


7-2) ๋ฉ”์„ธ์ง€ ๋ฐœํ–‰ ํ…Œ์ŠคํŠธ

bin/kafka-console-producer.sh --topic chat-messages --bootstrap-server localhost:9092


7-3) ๋ฉ”์„ธ์ง€ ์†Œ๋น„ ํ…Œ์ŠคํŠธ

bin/kafka-console-consumer.sh --topic chat-messages --from-beginning --bootstrap-server localhost:9092
728x90