BackEnd 학습/Kafka

Kafka(카프카) - 기초 개념

잉아당 2023. 2. 2. 14:42
728x90

카프카 기초


------------------------------------------------------------------------------
[카프카의 개념]

실시간 분산 스트리밍 플랫폼 
=> 메시지 브로커

producer, consumer 가 존재하여 로그를 처리 

producer, consumer의 커플링을 약하게 해줌

큐와 비슷한 개념인 토픽이 존재



-------------------------------------------------------------------------------
[토픽]

데이터가 들어가는 공간
여러개 존재 가능

producer가 데이터를 넣고 consumer가 데이터를 가져가 사용
=>consumer는 오래된 순서대로 데이터를 가져감

consumer가 가져가더라도 데이터는 사라지지 않음
consumer group이 다를 경우 다시 데이터를 가져갈 수 있음
=> 엘라스틱에도 저장하고 하둡에도 저장할 수 있음

토픽은 여러개의 partition으로 존재 
0 부터 시작 

producer가 데이터를 넣을 때 key 없이 주면 round robin(번갈아 가면서 차례대로 적재) / key를 같이 주면 해당 key에 넣음

partition은 늘릴 수 있지만 삭제가 불가능
partition을 늘리고 consumer를 늘려서 분산 처리 가능

record 저장 옵션에 따라 데이터 삭제 
log.retention.ms  => 최대 보존 시간
log.retention.byte => 최대 보존 크기

---------------------------------------------------------------------------------
[producer]

역할
1) topic에 해당하는 메시지를 생성
2) 특정 topic으로 데이터 전송
3) 전송 성공 여부를 알 수 있고 실패 시 재시도


client와 broker 버전 호환 확인 필요

broker는 2개 이상의 ip와 port 설정으로 권장

직렬화 설정 필요

key는 메시지를 보낼때 토픽의 파티션 지정때 사용

토픽에 파티션 추가하는 순간 키-파티션 일관성은 보장되지 않음

1파티션 1consumer 연결이 최대

---------------------------------------------------------------------------------
[Broker, Replication, ISR]

broker
카프카가 설치되어 있는 서버 단위
3개 이상의 broker를 구성하여 사용하는 것을 권장

replication(복제) : 클러스터에서 서버가 장애가 생길 때 가용성을 보장 
replication에 따라 메인 broker뿐만 아니라 복제 partition으로 서브 broker에도 들어감
최대 replication 개수는 최대 broker 개수
Leader partition : 원본 partition
Follower partition : 복제 partition

ISR(In Sync Replica) : Leader partition + Follower Partion

producer가 데이터를 전달할때 받는 주체가 Leader partion임
producer에는 ack 옵션이 존재
=> 고가용성 유지 가능

producer 설정
ack=0
Leader partition에 데이터를 넣고 응답값 x
데이터가 유실 되었는지 정상적으로 들어갔는지 알 수 없음
속도는 빠르지만 데이터 유실 가능성 존재하여

ack=1
Leader partition에 데이터를 넣고 응답값 받음
나머지 Follower partition에 복제 되었는지 알 수 없음
데이터 유실 가능성 존재하여

ack=all
Leader partition에 데이터를 넣고 나머지 Follower partion에 정상적으로 넣었는지 확인하는 절차를 거침
데이터 유실 x
전부 확인하는 과정 때문에 속도는 느림

----------------------------------------------------------------------------------
[consumer]

토픽의 데이터를 들고 옴
폴링(polling) : 데이터를 들고 옴

역할
1) 토픽의 파티션으로 부터 데이터 폴링
2) 파티션 offset 위치 기록(commit)
=> offset : 파티션에 있는 데이터 번호
3) consumer group을 통해 병렬 처리

client와 broker 버전 확인 필요

여러개의 broker 지정하는거 추천

group id : consumer group으로도 불림

직렬화 설정 필요

offset은 파티션별, 토픽별로 별개로 지정
어느지점까지 읽었는지 확인용

ex) 2개의 파티션 존재 
consumer가 1개일 경우 두 파티션에서 데이터 poll
consumer가 2개일 경우 각 파티션을 담당하여 데이터 poll
consumer가 3개일 경우 이미 두 consumer가 2개 파티션을 담당하고 있으므로 남은 consumer는 동작하지 않음

각 컨슈머그룹들은 서로 영향을 미치지 않음

------------------------------------------------------------------------------------
[consumer lag]

consumer lag
producer가 마지막으로 넣은 offset과 consumer가 마지막으로 읽은 offset의 차이
lag을 통해 주로 consumer의 상태에 대해 봄
partion이 여러개라면 lag도 여러개 존재

records-lag-max
여러개의 lag이 존재 할때 큰 lag