개발 일지/Apache Kafka
Apache Kafka와 구성 요소
계란💕
2023. 3. 12. 23:39
Apache Kafka
- 카프카란?
- 카프카: 분산 이벤트 스트리밍(분산 데이터 스트리밍) 플랫폼이다.
- 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달한다.
- 필요한 모든 곳에서 대규모 데이터를 동시에 이동 가능하다.
- 웹 사이트, 애플리케이션, 센서 등에 취합한 데이터를 스트림 파이프라인을 통해 실시간 관리하고 보내기 위한 분산 스트리밍 플랫폼이다.
- 데이터 생성하는 애플리케이션과 데이터를 소비하는 애플리케이션 간의 중재자로서 전송 제어, 처리, 관리 역할을 한다.
- 전통적인 메시징 시스템의 대안이다.
- 하루에 1조 4천 억 건의 메시지를 처리하기 위해 LinkedIn이 개발한 내부 시스템으로 시작했다.
- Java, Python, Go로 프로슈머, 컨슈머를 개발
- 카프카는 데이터 이동에 필요한 핵심 역할을 한다.
- 구성 요소별 역헐
- broker(브로커): producer와 consumer 사이 중재자 역할, (브로커는 하나의 서버)
- 브로커 안에 토픽이 있고 그 안에 파티션이 있다.
- 트래픽이 높아지면 브로커를 추가해서 클러스터를 확장한다.
- kafka cluster(카프카 클러스터): 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합. 메시지 저장소이며 여러 개의 브로커(각 서버)로 구성된다. 각 브로커가 메시지를 나눠서 저장한다.
- producer: 메시지(이벤트)를 카프카에 넣는다. 데이터를 만들어서 전달하는 역할
- consumer: 메시지(이벤트)를 카프카에서 읽어온다. 프로듀서가 전달한 데이터를 브로커에 요청해서 메시지를 소비하는 역할
- Topic(토픽): 보내는 메시지를 구분하기 위한 카테고리 역할이다. (broker안에 있는 폴더라고 볼 수 있다.)
- partition(파티션): 토픽을 저장하는 데이터 저장소로서 수평 확장이 가능하다. 토픽이 폴더라면 파티션은 파일이다.
- 하나의 토픽 안에는 반드시 하나 이상의 파티션으로 구성된다.
- broker(브로커): producer와 consumer 사이 중재자 역할, (브로커는 하나의 서버)
Apache Kafka의 구성 요소
- 토픽(topic)과 파티션
- 토픽(topic): 메시지를 구분하는 단위이다. 폴더와 비슷
- 하나의 토픽은 하나 이상의 파티션으로 구성된다.
- 파티션(partition): 메시지를 저장하는 물리적인 파일
- 프로듀서가 메시지를 저장할 때, 어느 토픽에 저장할지 정할 수 있다.
- 컨슈머는 어느 토픽에서 데이터를 읽어올지 정할 수 있다.
- 토픽(topic): 메시지를 구분하는 단위이다. 폴더와 비슷
- 파티션과 offset, 메시지 순서
- offset: 각 메시지 저장 위치를 offset이라고 한다.
- 컴퓨터 과학에서 배열이나 자료 구조 오브젝트 내의 offset은 일반적으로 consumer에서 메시지를 현재 어디까지 읽었는지 저장하는 값이라고 볼 수 있다.
- 파티션은 추가만 가능한 파일 (append only)이다, 파티션에 있는 메시지는 파일이므로 삭제되지 않는다.
- 메시지는 삭제되지 않고 (설정에 따라 일정 시간이 지난 뒤에 삭제)
- offset: 각 메시지 저장 위치를 offset이라고 한다.
- 여러 파티션과 프로듀서
- 프로듀서가 메시지를 전송할 때,
- 프로듀서: round robin 또는 key로 파티션 선택
- key 가 같은 메시지는 같은 파티션에 저장한다.
- 같은 key는 순서를 유지한다.
- 여러 파티션과 컨슈머
- 컨슈머는 컨슈머 그룹에 속한다.
- 한개의 파티션은 컨슈머 그룹의 한 개의 컨슈머만 연결 가능하다
- 컨슈머 그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없다.
- 한 컨슈머 그룹 기준으로 파티션의 메시지를 순서대로 처리한다.
- 카프카 성능
- 파티션 파일은 OS 페이지 캐시 사용
- 파티션에 대한 파일 IO를 메모리에서 처리한다.
- Zero Copy
- CPU가 한 메모리에서 다른 메모리 영역으로 데이터 복사를 하지 않는다. 또는 불필요한 데이터 복사를 피하도록 하는 방법을 말한다.
- 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사한다.
- 컨슈머 추적을 위해 브로커가 하는 일이 비교적 단순
- 메시지 필터, 메시지 재전송과 같은 일은 브로커가 하지 않는다.
- 파티션 파일은 OS 페이지 캐시 사용
- 카프카 스트림: 카프카에서 제공하는 자바 공식 라이브러리
- 토픽에 있는 데이터를 낮은 지연과 함께 빠른속도로 데이터 처리가 가능하다.
- JVM 기반 언어 Java, Kotlin, Scalar 중 하나를 선택해서 개발한다.
- Spring Boot 에 올려서 배포 가능하다.
- 카프카와 완벽 호환
기능 구현 순서
- dependency 설정
- Java 1.8
- Java version <=> Kafka 사이에 서로 호환되는 버전이 있다. 호환되지 않는 버전의 경우, 에러가 난다.
- 따라서, 2.9.2 로 변경했다. Java 1.8 버전이랑 잘 맞는다.
- yml 파일 설정
- https://victorydntmd.tistory.com/348 - 여기는kafka id, pwd가 안들어가는 이유는?
- https://hahahia.tistory.com/157 - kafka id, pwd 가 들어간다.
카프카 설치zookeeper:kafka서버 실행 파일
찾아볼 부분
- dependency 종류인 kafka client vs spring kafka 차이점
- kafka client
- spring kafka
- Bean으로 관리해주는 Spring-Kafka은 어플리케이션 실행 시점에 카프카와 연동이 정상적인지 바로 확인이 가능하다.
- 따라서 spring kafka를 더 많이 쓴다.
- kafka-clients는 kafka 관련 메소드(메세지 전송,수신 기능)를 불러와 실행하고 연동하기 때문에, 메세지를 전송, 수신하는 시점에서야 연동이 되었는지 로그로 확인할 수 있다.
- zookeeper(주키퍼)
- 카프카 클러스터의 메타 데이터를 저장하는 서버이다.
- 브로커를 실행하려면 필수적이다.
- gate way(게이트웨이)
- 한 네트워크(segment)에서 다른 네트워크로 이동하기 위해 거치는 지점을 말한다.
- 서로 다른 네트워크의 프로토콜이 다를 경우에 중재해주는 역할을 해준다.
- 통역사나 번역사 같은 역할이라고 볼 수 있다.
- Ex) mail gateway: email을 여러 양식으로 바꿔준다.
- round robin(라운드 로빈)
- 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나이다.
- 프로세스들 사이에 우선순위를 두지 않고 순서대로 시간 단위로 CPU를 할당하는 방식의 CPU스케줄링 알고리즘이다.
- Def) 선점형 스케줄러: 하나의 프로세스가 현재 CPU에서 실행 중인 프로세스를 중지하고, 바로 CPU를 강제로 차지할 수 있도록 하는 스케쥴러
- Spring Eureka(스프링 유레카)
- Micro Service 들의 정보를 레지스트리에 등록할 수 있도록 하고Micro Service 들의동적인 탐색과 로드밸런싱을 제공한다.
- Eureka Server와 Eureka Client로 구성된다.
- Eureka Server: Eureka Client의 상태 정보가 들어있다.
- Eureka Client
- 직렬화(Serialization)
- 객체를 데이터 스트림으로 만드는 과정이다.
- 데이터 스트림: 연결 지향 통신에서 전송된 정보를 수집하거나 정보 전송시 사용되는 디지털 방식으로 암호화된 일관된 신호의 흐름을 말한다. 데이터 제공자로부터 추출된 데이터의 집합이다.
- 폰 노이만 구조는 명령 스트림 기반인 반면에 안티머신은 데이터 스트림 기반이므로 종종 데이터스트림을 명령 스트림으로 보기 쉽다.
- 객체를 컴퓨터에 저장했다가 다음에 다시 꺼내거나 네트워크를 통해 컴퓨터 간에 서로 객체를 주고 받을 수 있다.
- https://oranthy.tistory.com/116
- 객체를 데이터 스트림으로 만드는 과정이다.
- 역직렬화(DeSerialization): 스트림으로부터 데이터를 읽어서 객체를 만드는 것
질문 사항
- 소스 코드 중에서 getQueueList() 안에 매개변수는 왜 groupId만 넣고 토픽은 안 들어가있는지 확인
출처
https://www.redhat.com/ko/topics/integration/what-is-apache-kafka
https://ifuwanna.tistory.com/488
https://victorydntmd.tistory.com/345
https://melonicedlatte.com/network/2020/04/28/201100.html
https://lion-king.tistory.com/entry/Spring-Boot-Spring-Cloud-MSA-3-Eureka란-적용방법 https://blog.naver.com/PostView.naver?blogId=arkdata&logNo=222632637775&parentCategoryNo=&categoryNo=14&viewDate=&isShowPopularPosts=true&from=search