아까는 그냥 도커에서 카프카를 띄우는 방법정도만 했다면
이 블로깅에서는 golang을 활용하여 메세지를 받는 consumer 서버 샘플을 만들어 보려한다.
사실 내가 만든건 아니고 유튜브를 참고했다.
ㅋㅋ
고로 개발하고나서는 감히 한국어 자료를 찾으려 하지 않는다. 그냥 그시간에 영어로 유튜브에 치면 더 많고 정확한 자료를 얻을 수 있음.
https://www.youtube.com/watch?v=Ur4ZtuMpj14&t=402s
일단 이 간단한 프로그램은
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 서버이다.
메시지가 잘 도착하고 있다.
이거 하는데만 반나절이 걸렸다.
이제 개발 시작해야지.. 화이팅
'Golang' 카테고리의 다른 글
Golang Docker Kafka 프로그램 (0) | 2022.04.05 |
---|---|
What is gRPC? (0) | 2021.11.15 |