본문 바로가기

Golang

Golang Docker-Kafka 프로그램 2

728x90
반응형

아까는 그냥 도커에서 카프카를 띄우는 방법정도만 했다면

이 블로깅에서는 golang을 활용하여 메세지를 받는 consumer 서버 샘플을 만들어 보려한다. 

 

사실 내가 만든건 아니고 유튜브를 참고했다. 

ㅋㅋ

 

 

고로 개발하고나서는 감히 한국어 자료를 찾으려 하지 않는다. 그냥 그시간에 영어로 유튜브에 치면 더 많고 정확한 자료를 얻을 수 있음. 

 

https://www.youtube.com/watch?v=Ur4ZtuMpj14&t=402s

국내에 계신 몇 안되는 go발자님들.. 화이팅

 

 

일단 이 간단한 프로그램은 

go get "github.com/segmentio/kafka-go"

을 통해 라이브러리를 받아와야 사용가능하다. 먼저 이것부터 받고 시작하면 된다. 

 

 

유튜브 영상과 똑같은 내용을 쓸꺼라 영어를 좋아하는 분들은 그냥 유튜브 보고 따라하는게 빠를지도.. 

근데 하다가 막히는 부분이 있었기 때문에 그 부분 위주로 블로깅 정리해보려 한다. 

 

 

 

1. kafka config 파일 만들기

package kafka

import (
	"context"
	"fmt"
	"github.com/segmentio/kafka-go"
)

func StartKafka() {
	config := kafka.ReaderConfig{
		Brokers:  []string{"localhost:9092"},
		GroupID:  "g1",
		Topic:    "MyTopic",
		MaxBytes: 10,
	}

	reader := kafka.NewReader(config)

	for {
		msg, err := reader.ReadMessage(context.Background())
		if err != nil {
			fmt.Println("Some error occurred ", err)
		}
		fmt.Println("Message is : ", string(msg.Value))
	}
}

 

카프카를 실행하는 function 작성하기

 

config정의

consumer 서버이기 때문에 메시지를 쓰는 건 필요없고 read하는 설정만해주면 된다. 

Brokers: {서버주소} 

GroupID: {그룹 아이디}

Topic: {토픽 이름}

MaxBytes: {최대 메시지 바이트 수}

 

정의한 config로 NewReader 생성해주고 for문을 돌린다. 

 메세지 있는 동안 메시지 내용 출력해주는 간단한 코드

 

 

main.go 에서는 어떻게 처리하고 있는지 보도록하자

 

 

main.go

package main

import (
	"fmt"
	"kafka-sample/kafka"
	"time"
)

func main() {

	fmt.Println("before start Kafka ")
	go kafka.StartKafka()
	fmt.Println("Kafka has been started...")
	time.Sleep(10 * time.Minute)
}

역시 별거 없다. 고루틴으로 카프카 시작한다. 10분이 지나면 꺼짐

 

 

여기까지 완성한 후 kafka producer를 실행한다. 그리고 메시지를 입력해서 전달해보면 된다. 

오른쪽이 producer, 왼쪽이 consumer 위에가 go로 만든 consumer 서버이다.

메시지가 잘 도착하고 있다. 

 

이거 하는데만 반나절이 걸렸다.

이제 개발 시작해야지.. 화이팅 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Golang' 카테고리의 다른 글

Golang Docker Kafka 프로그램  (0) 2022.04.05
What is gRPC?  (0) 2021.11.15