카프카
카프카-완벽가이드-코어편
카프카는 프로듀서, 브로커 > 토픽 > 파티션, 컨수머 구조로 되어있다.
프로듀서에서 보내는 메시지는 토픽, 파티션(Optional), Key(Optional), Value, Header(Optional) 로 구성되어 있다.
자바나 파이썬 등 여러가지 프로그래밍 언어에서 send() 명령어를 입력하게 되면,
해당 메시지는 시리얼 라이저에 의해 바이트화 되고, 파티셔너에 의해 어떤 토픽에 어떤 파티션으로 전달될지 결정된다.
마지막으로 sender에 의해 해당 목적지로 보내지게 된다.
여기서 참 신기한게, 보내는 역할을 하는 sender는 기존의 파티셔너, 시리얼라이저와는 다른 쓰레드로 동작한다.
또 여기서 sender는 일정한 배치사이즈의 데이터가 들어오면 한번에 데이터를 보내게 된다.
정리
데이터 직렬화 > 파티셔닝 > 데이터 압축 ( Optional ) > 배치사이즈 데이터 축적 > // 별도 쓰레드 // 전송
프로듀서는 간단한데, 컨수머는 구조가 좀 복잡하다.
컨수머는 그룹별로 지정을 할 수 있고, 어떤 토픽을 구독하며 데이터를 poll할지 정해야한다.
컨수머 그룹에는 반드시 1개 이상의 컨수머를 가져야하고, 컨수머는 단 하나의 컨수머 그룹에서만 속해야한다.
또한 파티션의 레코드는 단 하나의 컨수머에만 할당이 가능하다. 이 말을 즉슨 컨수머의 수가 파티션의 개수보다 많아도 성능 향상이 없음
요렇게 만들면 4차선 도로에다가 끝에 1차선 도로를 이어붙이게 되므로, 병목현상이 생기게됨.
카프카는 비동기 뿐만 아니라, 동기 통신도 지원함.