기본적인 동작 원리
토픽
토픽의 내부 구성
프로듀서
역할
라이브러리
예시 코드
configs 변수는 설정을 정의하는 부분
첫번째 줄은 부트스트랩 서버 설정을 로컬 호스트의 카프카를 바라보도록 설정(카프카 브로커의 주소 목록은 최소 2개의 IP와 PORT를 가지도록 권장)
2, 3번째줄은 key와 value를 String으로 직렬화 한다고 선언하는 부분
producer변수를 통해 카프카 프로듀서 인스턴스 생성
record는 전송할 객체를 만드는 부분이며 토픽, 키, 값 순서로 파라미터를 넣을 수 있음
new ProducerRecord<String, String> (”click_log”, “1”, “login”);
send()메서드를 통해 레코드를 전송하게 됨
마지막으로 close를 통해 프로듀서를 종료함
예제 코드 작동 방식
카프카 브로커
카프카가 설치되어 있는 서버 단위를 말함
보통 3개 이상을 구성하여 사용하는 것을 권장
만약 partition: 1, replication : 1 인 경우 3개의 브로커가 있는 경우 1대에 데이터가 저장됨
partition : 1, replication: 2인 경우 원본 1개와 복제본 1개로 다른 브로커에 구성됨
여기서 replication개수는 브로커의 개수보다 많을 수 없음
원본의 경우 Leader partition이라고 부름(read/write 수행)
복제본들의 경우 Follewer partition이라고 부름(주기적으로 리더의 데이터를 보고 복제만 함)
이 Leader, Follewer partition을 합쳐서 ISR(In Sync Replica)라고 칭함
ISR은 현재 리플리케이션 되고 있는 리플리케이션 그룹을 말함
ISR을 사용하는 이유는 partition : 1, replication: 1인 경우 해당 브로커를 사용할 수 없게 된 경우 데이터 복구가 불가능 하게 됨을 방지하기 위함
partition: 1, replication : 2인 경우 Leader partition이 위치한 브로커를 사용할 수 없게 된 경우 복제본인 Follewer partition이 Leader partition이 되며 데이터를 보존할 수 있음
ack(프로듀서의 옵션)
컨슈머
다른 메세지 브로커와 큰 차이점은 큐 내부의 데이터를 가져가도 사라지지 않는다는 점
폴링 : 컨슈머가 파티션의 데이터를 가져오는 과정을 칭함
역할
컨슈머 라이브러리
컨슈머 예시 코드
먼저 config 프로퍼티에 기본 설정을 해줘야함
프로듀서와 다른 점은 groud.id를 설정해주는 데 이부분이 컨슈머 그룹이며 예시코드에서는 click_log_group이라는 컨슈머 그룹에 속하게 됨
subscribe()메서드를 통해 어떤 토픽에서 데이터를 가져올 지 선언함
특정 파티션의 데이터만 가져오려는 경우 작성하는 코드, assign을 통해 할당
폴링 루프 구문
컨슈머가 데이터를 읽을 경우 컨슈머가 읽은 데이터의 offset을 저장하는 데 __consumer_offset에 저장되게 됨
멀티 컨슈머
멀티 그룹 컨슈머
카프카 설치 및 실행(2.8.0 기준)
zookeeper 실행(폴더 경로에서 그대로 입력)
bin\\windows\\zookeeper-server-start.bat config\\zookeeper.properties
zookeeper실행 후 정상 작동하는지 port 확인
netstat -na | findstr “2181”
새로운 cmd창 실행
kafka 실행
bin\\windows\\kafka-server-start.bat config\\server.properties
kafka 실행 후 정상작동하는지 port 확인
만약 실행 중 오류 발생 시 c:/tmp위치에 로그 생성됨 이전에 설치했던 경우라면 해당 폴더 삭제하고 다시 실행(이후에도 오류난다면 재설치)
kafka topic 생성
kafka topic 생섬 확인
위 코드로 토픽이 생성된다면 C:/tmp/kafka-logs위치에도 topic폴더가 생성
카프카 cmd 기본 명령어
간단한 테스트
컨슈머 Lag이란
카프카 Lag 모니터링
카프카를 설치하지 않고 사용하는 방법
카프카 구성요소 정리
구현