Kafka(카프카) - 기초 개념
카프카 기초
------------------------------------------------------------------------------
[카프카의 개념]
실시간 분산 스트리밍 플랫폼
=> 메시지 브로커
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