apache 2

Producer의 send() method 수행 과정 (feat. flush())

개요 및 결론 send()는 즉시 broker에게 메세지를 전송하지 않는다. send()를 통해 메세지를 내부 버퍼에 쌓아두고 flush()를 통해 broker로 전달한다. 물론 send()와 flush() 사이에도 몇 가지 과정을 거친다. 프로듀서가 메세지를 보내는 과정 Serializer 메세지 객체를 바이트 배열(byte array)로 직렬화한다. Partitioner Kafka Producer가 send() 메소드를 호출하면 Record는 Partitioner에게 전달된다. Partitioner는 지정한 토픽에서 어느 파티션으로 전송할 지 정하는 역할을 한다. Kafka Producer 객체를 생성할 때 Partitioner를 지정할 수 있으며, 설정하지 않으면 DefaultPartitioner로..

Spark Application Architecture - 스파크의 작동 순서(스파크 클러스터)

클러스터 모드로 spark-submit 명령을 수행했을 때 spark application이 어떤 순서로 작동하는지 알아본다. 클라이언트의 요청 첫 단계는 스파크 애플리케이션(컴파인된 JAR파일이나 라이브러리 파일)을 제출하는 것. 스파크 어플리케이션을 제출하면 로컬에서 코드가 실행되어 클러스터 드라이버 노드에 요청한다. 이 과정에서 스파크 드라이버 프로세스의 자원을 함께 요구한다. 클러스터 매니저가 이 요청을 받아들이면 클러스터 워커 노드 중 한 곳에서 스파크 드라이버 프로세스를 실행한다. 스파크 잡을 제출한 클라이언트 프로세스는 이 때 종료되며 스파크 애플리케이션은 클러스터 내에서 수행된다. 애플리케이션 시작 드라이버 프로세스가 실행된 다음 사용자 코드가 실행된다. 사용자 코드에는 반드시 스파크 클러..