아파치 카프카 | 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What Is Apache Kafka? 20046 좋은 평가 이 답변

당신은 주제를 찾고 있습니까 “아파치 카프카 – 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka?“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 데브원영 DVWY 이(가) 작성한 기사에는 조회수 25,893회 및 좋아요 346개 개의 좋아요가 있습니다.

아파치 카프카 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka? – 아파치 카프카 주제에 대한 세부정보를 참조하세요

빅데이터🤩에서 가장 많이 쓰이는 아파치 카프카에 대해서 알아보았습니다. 카프카는 정말 많은 기업에서 빅데이터처리에 사용하는데요. 카프카에 대한 추가적인 궁금한점은 댓글로 남겨주세요.
아파치 카프카란? 블로그 포스트 : https://blog.voidmainvoid.net/179
00:00 인트로
00:30 아파치 카프카
01:27 카프카 주변생태계
02:26 결론
Music by
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Music by JULIAN AVILA
https://soundcloud.com/julian_avila/vibe

아파치 카프카 주제에 대한 자세한 내용은 여기를 참조하세요.

Apache Kafka

Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, …

+ 자세한 내용은 여기를 클릭하십시오

Source: kafka.apache.org

Date Published: 4/19/2021

View: 8114

Apache Kafka란 무엇일까요? – Red Hat

Apache Kafka(아파치 카프카)는 분산 환경에서 사용되는 데이터 스트리밍 플랫폼이고, 오픈소스를 특징으로 하며, 실시간 스트림의 처리 등에서 활용되는 솔루션 …

+ 여기에 자세히 보기

Source: www.redhat.com

Date Published: 6/28/2021

View: 7106

kafka강의1 | 아파치 카프카(Apache Kafka)란?

kafka강의1 | 아파치 카프카(Apache Kafka)란? · 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 분산 메시징 플랫폼 · 링크드인(LinkedIn)에서 …

+ 여기를 클릭

Source: pearlluck.tistory.com

Date Published: 7/25/2021

View: 2937

‘아파치 카프카’, 개념부터 사용례까지 – CIO Korea

아파치 카프카란? 아파치 카프카는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 미션 크리티컬 애플리케이션을 위한 오픈소스, 자바/스칼라, …

+ 여기에 보기

Source: www.ciokorea.com

Date Published: 3/21/2022

View: 1242

아파치 카프카 (Apache Kafka)란? – 네이버블로그 – NAVER

카프카는 웹사이트, 어플리케이션, 센서 등에 취합한 데이터를 스트림 파이프라인을 통해 실시간으로 관리하고 보내기 위한 분산 스트리밍 플랫폼이다.

+ 여기에 자세히 보기

Source: blog.naver.com

Date Published: 3/9/2021

View: 4282

아파치 카프카(Apache Kafka) 아키텍처 및 동작 방식 – 새로비

아파치 카프카(Apache Kafka)란? 아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 …

+ 여기에 보기

Source: engkimbs.tistory.com

Date Published: 12/6/2022

View: 8002

Apache Kafka 란 무엇인가요? | 팁코 소프트웨어

Apache Kafka는 빠르고 확장 가능한 작업을 위해 데이터 피드의 분산 스트리밍, 파이프 라이닝 및 재생을 위한 실시간 스트리밍 데이터를 처리하기 위한 목적으로 …

+ 여기에 자세히 보기

Source: www.tibco.com

Date Published: 2/16/2022

View: 9200

Apache Kafka(아파치 카프카)란 무엇인가? – velog

카프카 개발 전 링크드인의 데이터 처리 시스템 · 프로듀서와 컨슈머의 분리 · 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용 · 높은 …

+ 여기에 더 보기

Source: velog.io

Date Published: 2/4/2022

View: 6907

아파치 카프카(Apache Kafka)란 무엇인가?

데이터 파이프라인(Data Pipeline)을 구축할 때 가장 많이 고려되는 시스템 중 하나가 ‘카프카(Kafka)’ 일 것이다. 아파치 카프카(Apache Kafka)는 …

+ 여기에 자세히 보기

Source: soft.plusblog.co.kr

Date Published: 9/5/2021

View: 5575

주제와 관련된 이미지 아파치 카프카

주제와 관련된 더 많은 사진을 참조하십시오 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka?. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명  | What is apache kafka?
빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka?

주제에 대한 기사 평가 아파치 카프카

  • Author: 데브원영 DVWY
  • Views: 조회수 25,893회
  • Likes: 좋아요 346개
  • Date Published: 2019. 10. 17.
  • Video Url link: https://www.youtube.com/watch?v=waw0XXNX-uQ

Apache Kafka

Apache Kafka

More than 80% of all Fortune 100 companies trust, and use Kafka.

Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.

Manufacturing 10 out of 10

Banks 7 out of 10

Insurance 10 out of 10

Telecom 8 out of 10

See Full List 10/10 Largest insurance companies

10/10 Largest manufacturing companies

10/10 Largest information technology and services companies

8/10 Largest telecommunications companies

8/10 Largest transportation companies

7/10 Largest retail companies

7/10 Largest banks and finance companies

6/10 Largest energy and utilities organizations

Above is a snapshot of the number of top-ten largest companies using Kafka, per-industry.

What is Apache Kafka?

마이크로서비스는 개발 환경을 바꾸어 놓았습니다. 공유 데이터베이스 계층과 같은 종속성을 줄여 개발자들이 보다 민첩하게 작업을 수행하도록 해줍니다. 그러나 개발자가 구축 중인 분산형 애플리케이션이 데이터를 공유하려면 특정한 유형의 통합이 필요합니다. 널리 사용되는 통합 옵션으로 동기식 방법이 있는데, 이는 서로 다른 사용자 간 데이터를 공유하는 데 애플리케이션 프로그래밍 인터페이스(API)를 활용합니다.

또 다른 통합 옵션으로는 중간 스토어에서 데이터를 복제하는 비동기식 방법이 있습니다. Apache Kafka는 바로 이런 맥락에 등장하는 솔루션으로, 다른 개발팀의 데이터를 스트리밍하여 데이터 스토어를 채우면 해당 데이터를 여러 팀과 이들의 애플리케이션 간에 공유할 수 있게 됩니다.

마이크로서비스 팀의 통합 요구사항은 전통적인 워터폴(waterfall) 개발팀과는 다릅니다. 이들 팀은 다음과 같은 3가지 기반 기능을 필요로 합니다.

분산형 통합: 필요한 경우 지속적으로 배포할 수 있는 경량의 패턴 기반 통합으로, 중앙집중식 ESB 유형 배포의 제약을 받지 않습니다. API: 파트너, 고객 및 개발자로 이루어진 에코시스템을 구현하는 API 기반 서비스로, 신뢰성과 수익성을 갖춘 유용한 활용 방안을 제공합니다. 컨테이너: 클라우드 네이티브 방식의 커넥티드 애플리케이션을 개발, 관리 및 확장하는 플랫폼입니다. 컨테이너는 개별 배포 방식으로 DevOps 프로세스에 포함되면서, 즉시 사용 가능한 클러스터링에 의해 지원되는 린(lean) 아티팩트 개발을 사용할 수 있도록 함으로써 고가용성을 보장합니다.

Red Hat에서는 이러한 접근 방식을 “애자일 통합”이라 부릅니다. 애플리케이션 개발 프로세스의 일부로 통합을 수행하여 민첩하고 적응성을 갖춘 솔루션을 제공할 수 있습니다. 애플리케이션의 구체적인 요구사항에 따라 동기식 또는 비동기식 통합을 애자일 통합의 일부로 자유롭게 사용할 수 있습니다. Apache Kafka는 비동기식 이벤트 기반 통합을 사용하여 동기식 통합과 API 사용을 확대하고 마이크로서비스 및 애자일 통합까지 지원할 수 있는 좋은 옵션입니다. 이런 식으로 Apache Kafka는 개발 프로세스 간소화, 혁신 추진, 시간 절약을 통해 새로운 기능과 애플리케이션 및 서비스 출시 기간을 단축하기 위한 이니셔티브의 중요한 부분이 될 수 있습니다.

아파치 카프카(Apache Kafka)란?

728×90

나는 개발보다 빅데이터플랫폼,데이터파이프라인 이런 데이터엔지니어쪽을 공부하고 싶다.

하지만 막상 너무 막연해서 매번 무료강의임에도 미뤄뒀는데 갑자기 어느순간 배우고 싶어서 강의를 들었다.

오늘이라도 가끔 시간날때마다 한번씩 보려고 한다…

한번 들어본거랑 아예 모르는거랑은 다르니까…..한번이라도 들어두면 나중에 볼때 다르겠지..

아래의 내용 및 이미지는 [데브원영] 아파치 카프카 for begineers 강의 요약 및 추가 공부한 내용입니다.

자세한 강의는 위의 연관링크 참고부탁드립니다. 감사합니다.

정의 | 아파치 카프카(Apache Kafka)란?

대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 분산 메시징 플랫폼

즉, 카프카는 어플리케이션간에 메세지를 교환하기 위해 사용되는 메세징 시스템

링크드인(LinkedIn)에서 개발해 2011년 초 오픈소스로 공개되었다.

아파치 카프카는 빅데이터를 분석할 때 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 필수도구로 인식

데이터 파이프라인 구성시 주로 사용되는 오픈소스 솔루션

카프카의 기본개념을 이해하기 쉽게 ‘메일’에 비교한 설명을 발견했다.

우리가 잘 알고 있는 메일의 경우 보내는 사람은 받는 사람과 상관 없이 메일 서버로 메시지를 보낼 수 있다.

보낸 메시지는 메일서버에 저장되어 있고, 받는 사람은 자기가 원하는 시간에 언제든지 메일을 볼 수 있게 된다. 카프카도 비슷하다.

프로듀서는 카프카로 메시지를 보내게 되고, 해당 메시지는 카프카에 저장되어 보관중이다.

그리고 컨슈머는 카프카에 저장되어 있는 메시지를 필요로 할때, 가져갈 수 있다.

배경 | 아파치 카프카를 왜 쓰는가?

소스어플리케이션 : 데이터전송, 타겟어플리케이션 : 데이터받음 -> 단방향이였지만 소스/타겟들이 점점 많아짐

실시간 트랜잭션(OLTP) 처리와 비동기 처리가 동시에 이루어지지만 통합된 전송 영역의 부재로 복잡도가 증가

파이프라인 관리가 어려움. 특정 부분을 수정해야할 때, 앞단부터 다 수정해야 할 수 있음

출처 https://needjarvis.tistory.com/599?category=925090

그러니까 카프카가 발신자와 수신자를 연결해준다.

발신자 (Publish) : 카프카에게 데이터를 전송하기만 하면 된다. 누가받을지는 신경안씀.

수신자 (Subscribe) : 수신자는 카프카에 원하는 토픽을 구독한다.

그래서 누가 보냈는지 신경안쓰고, 필요한 메세지만 구독하는 방식.

이전 point to point구조에 비해 매우 단순해지고 유지보수,에러발생,네트워크 트래픽의 장점까지 얻음

구조 | 카프카 아키텍쳐

카프카도입 전 (Point to Point 방식)

Point to Point 방식은 큐를 통해서 전달할 메세지를 전달하면 받는 사람이 큐에서 메세지를 사용한다

FIFO 큐처럼 받는 사람들은 모두 하나씩 큐를 가지고 있고, 보내는 사람들이 목적지 큐에 전달하면 받는사람이 꺼내읽음

->데이터연동의 복잡성이 증가

출처 https://freedeveloper.tistory.com/350?category=909995

기존엔 데이터 스토어 백엔드관리, 백엔드에 따라 포맷, 별도의 앱개발 필요했음

즉, 데이터전송라인이 많아짐 -> 배포/장애대응 어려워짐->데이터포맷의 변경사항이 생길때 유지보수어려워짐

카프카도입 후(Pub/Sub 방식)

중간에 Topic이 있다.

구독자가 특정 토픽이나 이벤트에 구독을 해 놓으면 해당토픽이나 이벤트에 대한 통지를 비동기 방식으로 받는다.

즉, Publisher가 Topic에 메세지를 보내면 해당 topic을 구독해돊은 모든 사용자들에게 메세지가 전송된다.

->프로듀서와 컨슈머를 분리해서 높은처리량 가능, 스케일아웃 가능

출처 https://freedeveloper.tistory.com/350?category=909995

차이점

– Point to Point방식은 메세지를 각각 1명의 사용자만 받을 수 있지만,

Pub/Sub방식은 토픽을 구독한 많은 사용자가 메세지를 받을 수 있다.

– Point to Point방식은 메세지를 받는 사람이 큐에서 꺼내읽는 방식이지만,

Pub/Sub방식은 토픽에서 꺼내오는게 아니라 토픽에서 BroadCast 되는 방식. 사용자들에게 메세지가 통보되는 개념

Pub/Sub방식 장점

카프카에만 데이터를 전달하면 필요한 곳에서 각자 가져갈 수 있음

카프카가 제공해주는 표준 포맷으로 연결되서 데이터를 주고받는게 부담이 덜해짐

용어 | 아파치 카프카 구성요소

간단하게 소스에서 카프카를 걸쳐 타겟으로 데이터를 전송하는 flow라고 볼 수 있다

소스어플리케이션(클릭로그,결제로그)–> 데이터전송->카프카–> 데이터전송 ->타겟어플리케이션(로그적재,로그처리)

이 과정을 아파치 카프카의 구성요소에 따라서 다시 구체화하면

프로듀서가 레코드를 생성하여 브로커로 전송하면,

전송된 레코드를 파티션에 신규오프셋과 함께 기록이 되고,

컨슈머가 브로커로부터 레코드를 요청하며 가져가는 flow가 된다.

일단 이 강의에선 3가지만 간단하게 보고, 나중에 더 구체적으로 찾아봐야겠다

1. Topic

일종의 ‘큐’, 카프카안에 topic가 있다.

즉, 프로듀셔와 컨슈머들이 카프카로 보낸 자신들의 메세지를 구분하기 위한 이름.

다수의 프로듀서, 컨슈머들이 동일한 카프카를 사용하면 메세지들이 뒤섞이기 때문에 토픽으로 구분한다.

2. Producer

큐에 데이터를 넣는다.

메세지를 생산해서 브로커의 토픽이름으로 보내는 서버 또는 어플

3. Consumer

큐안에 데이터를 가져온다.

브로커의 토픽 이름으로 저장된 메세지를 가져가는 서버 또는 어플

특징 | 아파치 카프카 특징

– Pub/Sub 방식 (publish-subscribe 모델)

Producer, publisher : 데이터 단위를 보내는 부분

Consumer, subscriber : 토픽이라는 메시지 저장소에 저장된 데이터를 가져가는 부분

중앙에 메세지 시스템 서버를 두고 메세지를 보내고(publish) 받는(subscribe) 형태의 통신모델

출처: Apache Kafka 0.8.1 Documentation

각각의 서버/서비스들은 모니터링이나 분석시스템의 상태 유무와 상관없이

카프카로 메세지를 보내는 역할만, 카프카에 저장된 메시지를 가져오는 역할만 하면 됨

즉, 역할이 완벽하게 분리가 되어 어느한쪽 시스템에서 문제가 발생해도 다른 시스템에 영향을 미칠 확률이 낮아짐

서버가 추가되더라도 카프카로만 보내면 되기 때문에 서버추가에 대한 부담감도 줄일 수 있음

참고로, pub/sub구조는 아파트 택배시스템과 유사하다고 참고한 자료에서 읽었따.

모든 택배원들이 동과 호수를 방문해서 택배를 직접 놓으면 오래걸리고, 택배기사님들도 힘듦

하지만 특정장소에 택배를 모아두는 방식은 택배기사는 장소에 보내기만하고, 주민들은 받기만 하니까 더 간단

– 디스크에 메세지를 저장하고 유지가능

컨슈머가 메세지를 읽어도 정해져 있는 보관주기 동안 저장

그래서 트래픽이 일시적으로 많거나 컨슈머에 오류가 있떠라고 메세지 손실이 없음

– 하나의 토픽에 여러 프로듀서, 여러 컨슈머 접근가능

– 확장용이

하나의 카프카 클러스터에 3대의 브로커로 시작해서 수십대의 브로커로 무중단 확장가능

– 고가용성

서버이슈에도 데이터를 손실없이 복구 가능

낮은 지연과 높은처리량으로 대용량 데이터 처리 가능

기존 메세징 시스템과 차이점

기존 메세징시스템 (ActiveMQ, RabbitMQ) 아파치 카프카 대용량의 실시간 로그 처리에 특화되어 설계 분산 시스템을 기본으로 설계 -> 분산 및 복제구성 쉬움 Producer가 broker에게 다수의 메시지를 전송할 때 각 메시지를 개별적으로 전송 다수의 메시지를 batch형태로 broker에게 한 번에 전달 가능

메시지를 기본적으로 메모리에 저장 메세지를 파일 시스템에 저장 broker가 consumer에게 메시지를 push해 주는 방식

consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식

참고

zzsza.github.io/data/2018/06/15/apache-kafka-intro/

twofootdog.tistory.com/86

epicdevs.com/17

dbjh.tistory.com/54

반응형

아파치 카프카 (Apache Kafka)란?

IT 인사이트 아파치 카프카 (Apache Kafka)란? 아크데이타 ・ URL 복사 본문 기타 기능 공유하기 신고하기 ​ ​ 세계 최대 비즈니스 네트워크 사이트인 LinkedIn 은 하나의 서비스에 과도하게 많은 시스템이 연결되어 있어 서비스를 유지하고 관리하는데 어려움을 겪고 있다. 또한 시스템 유지 보수 및 서비스 관리에도 많은 부담이 가해졌다. 이를 극복하기 위해 컨플루언트 공동 창업자인 ‘제이 크랩스(Jay Kreps)’는 카프카(Kafka)라는 메시징 분산 스트리밍 플랫폼을 고안하게 되었다. ​ 카프카는 웹사이트, 어플리케이션, 센서 등에 취합한 데이터를 스트림 파이프라인을 통해 실시간으로 관리하고 보내기 위한 분산 스트리밍 플랫폼이다. 데이터를 생성하는 어플리케이션과 데이터를 소비하는 어플리케이션 간의 중재자 역할을 함으로써 데이터의 전송 제어, 처리, 관리 역할을 한다. 카프카 시스템은 여러 요소(노드)와 함께 구성될 수 있어 카프카 클러스터 라고 하기도 하는데 다른 메시징 시스템과 마찬가지로 어플리케이션과 서버 간의 비동기 데이터 교환을 용이하게 하고, 하루에 수 조개의 이벤트 처리가 가능하게 하는 역할을 한다. 즉, 카프카는 플랫폼에 서비스를 연결하여 다양한 서비스에서 나오는 데이터 흐름을 실시간으로 제어하는 서비스의 중추역할을 하는 플랫폼이다. ​ ​ ​ ​ ​ ​ Kafka의 기본구성 요소 카프카의 구성도를 보기에 앞서 기본 구성요소를 살펴보자. ​ ​ ▶ Cluster : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합 ▶ Producer : 데이터를 만들어내어 전달하는 전달자의 역할 ▶ Consumer : 프로듀서에서 전달한 데이터를 브로커에 요청하여 메시지(데이터)를 소비하는 역할 ▶ Broker : 생산자와 소비자와의 중재자 역할을 하는 역할 ▶ Topic : 보내는 메시지를 구분하기 위한 카테고리화 ▶ Partition : 토픽을 구성하는 데이터 저장소로서 수평확장이 가능한 형태 ​ ​ 카프카 역시 여타 다른 서버 프로그램과 마찬가지로 Kafka도 listener를 통해 producer로부터 요청을 받아 처리하는 구조로 카프카에서는 KafkaServer가 기본적으로 broker역할을 하게 되며 producer와 consumer는 카프카에서 제공하는 API로 구현된 어플리케이션을 의미한다. 하나 이상의 broker로 아래와 같은 클러스터를 구성할 수 있는데, broker가 되는 각각의 KafkaServer는 자신의 식별자로 broker.id를 부여받게 되며 producer로부터 생성된 메시지를 저장할 위치정보와 클러스터 메타정보를 저장 및 관리할 Zookeeper 연결정보가 지정된다. Kafka Cluster는 다수의 브로커 정보를 관리하고 효과적인 leader election등을 수행하기 위해 Zookeeper를 이용하기 때문인데, 클러스터를 구성하는 특정 broker에 fail이 발생한 경우 컨트롤러는 변경된 leader partition의 정보를 update하기에 앞서 Zookeeper에 해당 정보를 저장하는 방식으로 운영된다. ​ ​ Kafka의 Pub-Sub 모델 카프카에서 발행/구독 모델은 송신자가 메시지를 특정 수신자에 직접적으로 보내는 프로그래밍 모델이 아닌, 발행자(Publisher)가 보내는 메시지를 Topic 이라는 카테고리로 묶어서 보내고 구독자(Subscriber)는 해당 Topic을 구독함으로써 메시지를 받는 프로그래밍 모델이다. ​ 출처 : 카프카 홈페이지 Kafka 의 특징 ​ 카프카의 특징을 살펴보자면 다음과 같다. ​ ​ 1- 카프카에 여러 전달자(Producer)가 동시에 메시지를 전송할 수 있고 반대로, 여러 소비자(Consumer)에서 동시에 메시지를 읽을 수 있다. ​ 2- 한 노드가 메시지를 전송하면 전달자(Producer)와 소비자(Consumer)를 중재하는 브로커에서 전달자가 전달한 메시지를 브로커의 동작에 영향을 주지 않고 처리 속도 및 장애 복구를 유지할 수 있게 하기 위해 일정 기간 동안 파일 형태로 저장한다. ​ 3- 시스템 트래픽이 높아지면 브로커를 추가해서 클러스터를 확장할 수 있다. ​ 4- 처리 속도가 저하되면 소비자(Consumer) 또는 생산자 (Producer)를 추가하여 처리량을 늘릴 수 있다. ​ 5- 소비자 (Consumer)가 프로듀서의 메시지 생성속도를 따라가지 못할 때 컨슈머를 그룹으로 묶어 프로듀서에서 보내는 속도와 읽는 속도의 균형을 맞출 수 있다. ​ Kafka 의 장/단점 이렇듯 카프카는 빠른 속도로 대용량의 데이터를 처리하는 데 용이하며 낮은 지연 시간으로 메시지를 빠르게 처리하는 것이 가능하다. 또한 복제, 파티셔닝 등과 같은 기능을 사용하여 카프카 시스템을 쉽게 확장시킬 수 있다. 전달할 메시지를 파일로 저장함으로써 데이터의 안정성과 신뢰성을 높일 수 있다. ​ 하지만 반면에 모니터링 및 관리 도구가 불편하여 메시지의 조정이 필요한 경우 카프카의 성능이 크게 저하된다는 단점을 지니고 있다. 또한 클러스터의 대기열 수가 증가하면 상태적으로 느리게 동작하는 경우가 있다. ​ ​ ​ Kafka 의 용도 카프카는 분산스트리밍 플랫폼으로 끊임없이 들어오는 데이터를 일괄적으로 묶어서 데이터를 처리하고 실시간으로 데이터를 처리하거나 가공하여 또 다른 서비스에 데이터를 전달하여 IoT 데이터 처리, 금융거래 사기방지 등에 사용된다. 뿐만 아니라 오픈마켓에서 사용자의 홈페이지 클릭 수, 상품을 바라보는 빈도 및 시간, 주문 및 환불 서비스 등 어플리케이션 사용자의 활동 분석을 통해 기업에서 전략적으로 비즈니스를 할 수 있도록 데이터를 수집/분석한다. ​ 카프카의 개발로 인해 많은 기업들이 업무를 함에 있어 혁신적으로 개선이 되었으며 현재 많은 기업들이 카프카를 이용하여 서비스 중이다. 대표적으로 넷플릭스, 트위터, 링크드인, 오라클 등에서 사용 중이다. ​ ​ ​ ​ ​ ​ ​ 인쇄

아파치 카프카(Apache Kafka) 아키텍처 및 동작 방식

| 아파치 카프카(Apache Kafka)란?

아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션입니다. 카프카는 대용량의 실시간 로그처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있습니다.

아파치 카프카는 현재 2.x 버전까지 나와있고 초기에 Producer, Consumer 기능에서 0.10.x 버전에서부터 Connectors와 Stream Processors가 추가되었습니다.

이 포스팅에서는 Producer, Consumer에 대해서만 다룰 것이며 카프카가 어떤 아키텍처로 구성되어 있고 어떻게 동작하는 지 간략하게 설명하도록 하겠습니다.

| 아파치 카프카의 특징(Apache Kafka Features)

■Publisher Subscriber 모델 : Publisher Subscriber 모델은 데이터 큐를 중간에 두고 서로 간 독립적으로 데이터를 생산하고 소비합니다. 이런 느슨한 결합을 통해 Publisher나 Subscriber가 죽을 시, 서로 간에 의존성이 없으므로 안정적으로 데이터를 처리할 수 있습니다. 또한 설정 역시 간단하게 할 수 있다는 장점이 있습니다.

■고가용성(High availability) 및 확장성(Scalability) : 카프카는 클러스터로서 작동합니다. 클러스터로서 작동하므로 Fault-tolerant 한 고가용성 서비스를 제공할 수 있고 분산 처리를 통해 빠른 데이터 처리를 가능하게 합니다. 또한 서버를 수평적으로 늘려 안정성 및 성능을 향상시키는 Scale-out이 가능합니다.

■디스크 순차 저장 및 처리(Sequential Store and Process in Disk) : 메세지를 메모리 큐에 적재하는 기존 메세지 시스템과 다르게 카프카는 메세지를 디스크에 순차적으로 저장합니다. 이로서 얻는 이점은 두 가지입니다.

1. 서버에 장애가 나도 메세지가 디스크에 저장되어 있으므로 유실걱정이 없습니다.

2. 디스크가 순차적으로 저장되어 있으므로 디스크 I/O가 줄어들어 성능이 빨라집니다.

■분산 처리(Distributed Processing) : 카프카는 파티션(Partition)이란 개념을 도입하여 여러개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있습니다. 이로서 메세지를 상황에 맞추어 빠르게 처리할 수 있습니다.

| 아파치 카프카 사용 이유 (The reason why we use kafka)

병렬처리에 의한 데이터 처리율 향상 : 카프카는 아래 보실 아키텍처에 보면 데이터를 병렬로 처리함으로서 데이터를 빠르고 효과적으로 처리할 수 있습니다. disk에 순차적으로 데이터를 적재하기 때문에 임의 접근(random access) 방식보다 훨씬 더 빠르게 데이터를 처리합니다. 데이터 유실 방지 : disk에 적재되기 때문에 만약 불의의 사고로 서버가 다운되었을 시에도 데이터가 유실되는 일 없이 재시작하여 기존 데이터를 안정적으로 처리 가능합니다.

클러스터링에 의한 고가용성 서비스 : Scale-out이 가능하여 시스템 확장이 용이하며 어떤 하나 혹은 몇 개의 서버가 다운되도 서비스 자체가 중단될 일 없이 시스템이 운용가능합니다.

| 아키텍처 및 구성(Architecture and Components)

카프카 공식 문서에 나온 카프카를 나타내는 간단한 아키텍처입니다. (0.9.x 기준)

<출처: https://kafka.apache.org/090/documentation.html>

카프카 클러스터를 중심으로 프로듀서와 컨슈머가 데이터를 push하고 pull하는 구조입니다. Producer, Consumer는 각기 다른 프로세스에서 비동기로 동작하고 있죠. 이 아키텍처를 좀 더 자세히 표현하면 다음과 같습니다.

위 그림을 설명하기 이전에 아키텍처를 구성하고 있는 구성요소들 먼저 설명하도록 하겠습니다.

■프로듀서(Producer) : 데이터를 발생시키고 카프카 클러스터(Kafka Cluster)에 적재하는 프로세스입니다.

■카프카 클러스터(Kafka Cluster) : 카프카 서버로 이루어진 클러스터를 말합니다. 카프카 클러스터를 이루는 각 요소는 다음과 같습니다.

– 브로커(Broker) : 카프카 서버를 말합니다.

– 주키퍼(Zookeeper) : 주키퍼(Zookeeper)는 분산 코디네이션 시스템입니다. 카프카 브로커를 하나의 클러스터로 코디네이팅하는 역할을 하며 나중에 이야기할 카프카 클러스터의 리더(Leader)를 발탁하는 방식도 주키퍼가 제공하는 기능을 이용합니다.

– 토픽(Topic) : 카프카 클러스터에 데이터를 관리할 시 그 기준이 되는 개념입니다. 토픽은 카프카 클러스터에서 여러개 만들 수 있으며 하나의 토픽은 1개 이상의 파티션(Partition)으로 구성되어 있습니다. 어떤 데이터를 관리하는 하나의 그룹이라 생각하시면 됩니다.

– 파티션(Partition) : 각 토픽 당 데이터를 분산 처리하는 단위입니다. 카프카에서는 토픽 안에 파티션을 나누어 그 수대로 데이터를 분산처리합니다. 카프카 옵션에서 지정한 replica의 수만큼 파티션이 각 서버들에게 복제됩니다.

– 리더, 팔로워(Leader, Follower) : 카프카에서는 각 파티션당 복제된 파티션 중에서 하나의 리더가 선출됩니다. 이 리더는 모든 읽기, 쓰기 연산을 담당하게 됩니다. 리더를 제외한 나머지는 팔로워가 되고 이 팔로워들은 단순히 리더의 데이터를 복사하는 역할만 하게 됩니다.

■컨슈머그룹(Consumer Group) : 컨슈머의 집합을 구성하는 단위입니다. 카프카에서는 컨슈머 그룹으로서 데이터를 처리하며 컨슈머 그룹 안의 컨슈머 수만큼 파티션의 데이터를 분산처리하게 됩니다.

위 그림에서는 Producer가 데이터를 카프카에 적재하고 있으며 그 저장된 데이터를 Consumer Group A와 B가 각각 자신이 처리해야될 Topic Foo와 Bar를 가져오는 그림입니다.

Foo와 Bar은 각각 3개의 파티션으로 나뉘어져 있으며 이 각각의 파티션들은 3개의 복제본으로 복제됩니다. 3개의 복제본 중에는 하나의 리더가 선출되게 되고(하늘색으로 칠해진 파티션) 이 리더가 모든 데이터의 읽기, 쓰기 연산을 담당하게 됩니다.

중요한 것은 이 파티션들은 운영 도중 그 수를 늘릴 수 있지만 절대 줄일 수 없습니다. 이 때문에 파티션을 늘리는 것은 신중하게 고려해서 결정해야될 문제가 됩니다.

카프카 클러스터에서 데이터를 가져오게 될 때는 컨슈머 그룹(Consumer Group)단위로 가져오게 됩니다. 이 컨슈머 그룹은 자신이 가져와야하는 토픽 안의 파티션의 데이터를 Pull하게 되고 각각 컨슈머 그룹안의 컨슈머들이 파티션이 나뉘어져 있는 만큼 데이터를 처리하게 됩니다.

| 파티션 읽기, 쓰기(Kafka Partition, Read, Write)

아파치 카프카에서의 쓰기, 읽기 연산은 카프카 클러스터 내의 리더 파티션들에게만 적용됩니다. 하늘색으로 칠해진 각 파티션들은 리더 파티션이며 이 파티션들에게 프로듀서가 쓰기 연산을 진행합니다. 그리고 리더 파티션에 쓰기가 진행되고 난 후 업데이트된 데이터는 각 파티션들의 복제본들에게로 복사됩니다.

아래는 프로듀서가 어떻게 각 파티션들에 Write 연산을 진행하는 지 설명하는 그림입니다.

위에서 언급했듯 카프카는 데이터를 순차적으로 디스크에 저장합니다. 따라서 프로듀서는 순차적으로 저장된 데이터 뒤에 붙이는 append 형식으로 write 연산을 진행하게 됩니다. 이 때 파티션들은 각각의 데이터들의 순차적인 집합인 오프셋(offset)으로 구성되어 있습니다.

컨슈머그룹의 각 컨슈머들은 파티션의 오프셋을 기준으로 데이터를 순차적으로 처리하게 됩니다. (먼저 들어온 순서부터) 중요한 것은, 컨슈머들은 컨슈머 그룹으로 나뉘어서 데이터를 분산 처리하게 되고 같은 컨슈머 그룹 내에 있는 컨슈머끼리 같은 파티션의 데이터를 처리할 수 없습니다.

파티션에 저장되어 있는 데이터들은 순차적으로 데이터가 저장되어 있으며 이 데이터들은 설정값에 따라 데이터를 디스크에 보관하게 됩니다. (2.x 기준 default 7일)

위 그림은 컨슈머 그룹단위로 그룹 내 컨슈머들이 각각의 파티션의 데이터를 처리하는 모습을 나타낸 것입니다.

만일 컨슈머와 파티션의 개수가 같다면 컨슈머는 각 파티션을 1:1로 맡게 됩니다. 만일 컨슈머 그룹 안의 컨슈머의 개수가 파티션의 개수보다 적을 경우 컨슈머 중 하나가 남는 파티션의 데이터를 처리하게 됩니다. 눈여겨 볼 것은 만일 컨슈머의 개수가 파티션의 개수보다 많을 경우 남는 컨슈머는 파티션이 개수가 많아질 때까지 대기하게 됩니다.

Apache Kafka 란 무엇인가요?

Apache Kafka는 빠르고 확장 가능한 작업을 위해 데이터 피드의 분산 스트리밍, 파이프 라이닝 및 재생을 위한 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 분산형 게시-구독 메시징 플랫폼입니다.

Kafka는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션입니다. Kafka 서버는 여러 데이터 센터에 분산되어 있을 수 있으며 여러 서버 인스턴스에 걸쳐 레코드 스트림(메시지)을 토픽으로 저장하여 데이터 지속성을 제공할 수 있습니다. 토픽은 레코드 또는 메시지를 키, 값 및 타임 스탬프로 구성된 일련의 튜플, 변경 불가능한 Python 객체 시퀀스로 저장합니다.

Apache Kafka의 사용 사례

Apache Kafka는 오늘날 시장에서 가장 빠르게 성장하는 오픈 소스 메시징 솔루션 중 하나입니다. 이는 주로 분산 시스템에 우수한 로깅 메커니즘을 제공하는 아키텍처 기반 설계 패턴 때문입니다.

실시간 로그 스트리밍을 위해 특별히 제작된 Apache Kafka는 다음 사항을 필요로 하는 애플리케이션에 적합합니다:

서로 다른 구성 요소 간의 안정적인 데이터 교환

애플리케이션 요구 사항 변경에 따라 메시징 워크로드를 분할하는 기능

데이터 처리를 위한 실시간 스트리밍

데이터/메시지 재생에 대한 기본 지원

Apache Kafka의 개념

토픽: 토픽은 게시/구독 메시징에서 상당히 보편적인 개념입니다. Apache Kafka 및 기타 메시징 솔루션에서 토픽은 지정된 데이터 스트림(일련의 레코드/메시지)에 대한 관심을 표시하는 데 사용되는 주소 지정 가능한 추상화입니다. 토픽은 게시 및 구독할 수 있으며 애플리케이션에서 주어진 데이터 스트림에 대한 관심을 표시하는 데 사용하는 추상화 계층입니다.

파티션 : Apache Kafka에서 토픽은 파티션이라는 일련의 순서 대기열로 세분화될 수 있습니다. 이러한 파티션은 연속적으로 추가되어 순차적 커밋 로그를 형성합니다. Kafka 시스템에서 각 레코드/메시지에는 지정된 파티션의 메시지 또는 레코드를 식별하는 데 사용되는 오프셋이라는 순차 ID가 할당됩니다.

영속성: Apache Kafka는 레코드/메시지가 게시될 때 지속적으로 유지하는 서버 클러스터를 유지 관리하여 작동합니다. Kafka 클러스터는 구성 가능한 보존 시간 제한을 사용하여 소비에 관계없이 주어진 레코드가 지속되는 기간을 결정합니다. 레코드/메시지가 보존 시간 제한 내에 있는 동안 레코드/메시지를 사용할 수 있습니다. 레코드/메시지가 이 보존 시간 제한을 초과하면 레코드/메시지가 삭제되고 공간이 확보됩니다.

토픽/파티션 확장 : Apache Kafka는 서버 클러스터로 작동하기 때문에 주어진 토픽/파티션에서 각 서버에 부하를 공유하여 토픽/파티션을 확장할 수 있습니다. 이 부하 공유를 통해 Kafka 클러스터의 각 서버는 주어진 토픽/파티션에 대한 레코드/메시지의 배포 및 영속성을 처리할 수 있습니다. 개별 서버가 모든 배포 및 영속성을 처리하는 동안 모든 서버는 서버가 실패할 경우 내결함성과 고가용성을 제공하는 데이터를 복제합니다. 파티션은 파티션 리더로 선택된 한개 서버와 팔로워 역할을 하는 다른 모든 서버들로 분할됩니다. 파티션 리더 인 서버는 데이터의 모든 배포 및 영속성 (읽기/쓰기)을 처리하고 팔로워 서버는 내결함성을 위한 복제 서비스를 제공합니다.

프로듀서: Apache Kafka에서 프로듀서 개념은 대부분의 메시징 시스템과 다르지 않습니다. 데이터(레코드/메시지) 프로듀서는 주어진 레코드/메시지가 게시되어야 하는 토픽(데이터 스트림)를 정의합니다. 파티션은 추가 확장성을 제공하는 데 사용되므로 프로듀서는 주어진 레코드/메시지가 게시되는 파티션도 정의할 수 있습니다. 프로듀서는 주어진 파티션을 정의할 필요가 없으며 파티션을 정의하지 않음으로써 토픽 파티션에서 순차 순환 대기 방식의 로드 밸런싱을 달성할 수 있습니다.

컨슈머: 대부분의 메시징 시스템과 마찬가지로 Kafka의 컨슈머는 레코드/메시지를 처리하는 엔터티입니다. 컨슈머는 개별 워크로드에서 독립적으로 작업하거나 지정된 워크로드에서 다른 컨슈머와 협력하여 작업하도록 구성할 수 있습니다(로드 밸런싱). 컨슈머는 컨슈머 그룹 이름을 기반으로 워크로드를 처리하는 방법을 관리합니다. 컨슈머 그룹 이름을 사용하면 컨슈머를 단일 프로세스 내, 여러 프로세스, 심지어 여러 시스템에 분산시킬 수 있습니다. 컨슈머 그룹 이름을 사용하여 컨슈머는 컨슈머 집합 전체에서 레코드/메시지 소비를 로드 밸런싱(동일한 컨슈머 그룹 이름을 가진 여러 컨슈머)하거나 토픽/파티션을 구독하는 각 컨슈머가 처리 메시지를 받도록 각 레코드/메시지를 고유하게 (고유한 컨슈머 그룹 이름을 가진 여러 컨슈머) 처리할 수 있습니다.

[Kafka] #1 – 아파치 카프카(Apache Kafka)란 무엇인가?

반응형

데이터 파이프라인(Data Pipeline)을 구축할 때 가장 많이 고려되는 시스템 중 하나가 ‘카프카(Kafka)’ 일 것이다. 아파치 카프카(Apache Kafka)는 링크드인(LinkedIn)에서 처음 개발된 분산 메시징 시스템이다.

2011년 오픈소스로 공개되었으며 이후 2012년 10월 아파치 인큐베이터를 종료했다. 현재 링크드인에서 카프카를 개발하던 제이 크렙스(Jay Kreps)를 비롯한 일부 엔지니어들이 ‘Confluent’라는 회사를 설립하여 카프카와 관련된 일을 하고 있다.

카프카라는 이름은 유명한 작가인 ‘프란츠 카프카(Franz Kafka)’에서 따왔다. (참조 : Quora)

I thought that since Kafka was a system optimized for writing using a writer’s name would make sense. I had taken a lot of lit classes in college and liked Franz Kafka. Plus the name sounded cool for an open source project. ​So basically there is not much of a relationship

제이 크렙스에 의하면, 쓰기에 최적화된 시스템이기 때문에 작가의 이름을 붙이는게 좋겠다고 생각하던 차에 대학에서 다양한 수업으로 접했던 프란츠 카프카의 이름을 따서 이름을 짓게되었고, 붙여보니 오픈소스 이름으로 괜찮은 이름이라 계속 사용하게 되었다고 한다. 카프카라는 이름이 아키텍처 혹은 구조와 크게 관련은 없다. 마치 하둡처럼?

Publish/Subscribe (펍/섭) 시스템

카프카는 기본적으로 Publish-Subscribe 모델을 구현한 분산 메시징 시스템이다. Publish-Subscribe 모델은 데이터를 만들어내는 프로듀서(Producer, 생산자), 소비하는 컨슈머(Consumer, 소비자) 그리고 이 둘 사이에서 중재자 역할을 하는 브로커(Broker)로 구성된 느슨한 결합(Loosely Coupled)의 시스템이다.

프로듀서는 브로커를 통해 메시지를 발행(Publish) 한다. 이 때 메시지를 전달할 대상을 명시하지는 않으며 관련 메시지를 구독(Subscribe) 할 컨슈머가 브로커에게 요청하여 가져가는 식이다. 마치 블로그 글을 작성하여 발행하면 블로그 글을 구독하는 독자들이 따로 읽어가는 형태를 생각하면 된다. (반대되는 개념으로는 글을 작성한 프로듀서가 구독하려는 컨슈머에게 직접 메일을 보내는 걸 생각하면 된다.)

카프카 역시 카프카 클러스터로 메시지를 전송할 수 있는 프로듀서와 카프카로부터 메시지를 읽어 갈 수 있는 컨슈머 클라이언트 API를 제공한다. 그 밖에 데이터 통합을 위한 커넥터(Connector)와 스트림 처리를 위한 스트림즈(Streams) API도 있지만 이 역시 크게 보면 프로듀서와 컨슈머의 확장이라고 볼 수 있다.

카프카에서 프로듀서는 특정 토픽(Topic)으로 메시지를 발행할 수 있다. 컨슈머 역시 특정 토픽의 메시지를 읽어 갈 수 있다. 카프카에서 토픽은 프로듀서와 컨슈머가 만나는 지점이라고 생각할 수 있다. (블로그의 RSS 피드 정도로 생각하면 되겠다. 티스토리는 카프카에 해당하며 티스토리에 존재하는 블로그 하나하나는 각각 하나의 토픽으로 대응될 수 있다. 프로듀서에 해당하는 블로거는 특정 블로그에 글을 작성하여 발행할 수 있고, 컨슈머에 해당하는 독자는 특정 블로그의 RSS를 구독하는 것을 생각하면 된다.)

카프카는 수평적인 확장(scale horizontally, scale out)을 위해 클러스터를 구성한다. 카프카를 통해 유통되는 메시지가 늘어나면 카프카 브로커의 부담(Load)이 증가하게 되어 클러스터의 규모를 확장할 필요가 있다. 카프카는 여러 브로커들의 클러스터링을 위해 아파치 주키퍼(Apache ZooKeeper)를 사용한다. 주키퍼를 사용하여 브로커의 추가 및 장애 상황을 간단하게 대응할 수 있다.

카프카 클러스터 위에서 프로듀서가 전송한 메시지는 중복 저장(Replication 되어 장애상황에서도 고가용성(High Availability)을 보장하게 된다. 프로듀서가 메시지를 카프카 클러스터로 전송하면 브로커는 또 다른 브로커에게 프로듀서의 메시지를 중복해서 저장한다. 만약 한 브로커에 장애가 생기더라도 중복 저장된 복사본을 컨슈머에게 전달 할 수 있으므로 장애 상황에 대비(Fault-tolerant) 할 수 있다.

카프카의 특징

링크드인에서 카프카를 개발 할 당시에도 다양한 메시징 시스템이 존재했었다. 하지만 링크드인에서 처음 개발 될 때 기존 메시징 시스템과 비교하여 장점으로 내세울 수 있는 몇 가지 특징을 가지도록 설계되었다.

1) 다중 프로듀서, 다중 컨슈머

카프카의 토픽에 여러 프로듀서가 동시에 메시지를 전송할 수 있다. 마찬가지로 카프카 토픽의 메시지를 여러 컨슈머들이 동시에 읽어 갈 수 있다. 뿐만 아니라 하나의 프로듀서가 여러 토픽에 메시지를 전송할 수도 있으며, 하나의 컨슈머가 여러 토픽에서 메시지를 읽어 갈 수도 있다. 특히 하나의 메시지를 여러 컨슈머가 읽어 갈 수 있는 측면이 카프카의 큰 강점으로 작용한다.

이러한 다중 프로듀서, 다중 컨슈머의 지원을 통해 하나의 카프카 시스템을 통해 다양한 애플리케이션이 데이터를 주고 받을 수 있게 되었으며, 데이터의 생산자/소비자 관계도 유연하게 구성할 수 있게 되었다.

2) 파일시스템에 저장

전통적인 메시징 시스템은 프로듀서가 전송한 메시지를 브로커의 메모리 상에 존재하는 큐(Queue)에 유지한다. 이후 컨슈머가 메시지를 읽어가면 큐에서 메시지를 제거한다. 프로듀서가 생성한 메시지는 브로커를 통해 컨슈머에 의해 빠른 시간내에 소비될 것이라고 가정하고 만들어졌기 때문이다.

카프카는 프로듀서가 생성한 메시지를 브로커가 위치한 서버의 파일 시스템에 저장한다. 따라서 컨슈머는 프로듀서가 생성한 메시지를 바로바로 소비하지 않아도 되며 카프카가 메시지를 보존하고 있는 기간내에서는 언제든지 읽어 갈 수 있다.

이런 방식은 프로듀서와 컨슈머의 속도 차이가 있을 때 유용하다. 예를 들어 컨슈머 쪽에 장애가 생겼거나 순간적인 네트워크 트래픽 폭주로 처리가 늦어졌을 때 브로커의 동작에 큰 영향을 주지 않으면서 처리 속도를 따라갈 수 있게 해준다. 또 한 컨슈머들이 데이터를 모았다가 처리하는 배치(batch) 처리를 가능하게 해주며, 컨슈머 쪽에서 에러가 생겼을 때 이전에 읽었던 데이터를 다시 읽을 수 있게 해준다.

카프카 브로커가 파일 시스템에 저장한 메시지는 관리자에 의해 설정된 일정 보존 기간동안 사용가능하며 이후 브로커가 위치한 서버의 파일 시스템에서 삭제된다.

3) 확장성(Scalability)

카프카 클러스터는 운영중에 확장이 용이하도록 설계되었다. 데이터 파이프라인을 구축한 초창기 적은 수의 브로커들로 클러스터를 운영하다가 시스템 트래픽이 높아지면 브로커를 추가해서 클러스터를 확장할 수 있다. 이른바 수평적인 확장 (Horizontally Scale, Scale out) 이 쉽게 이뤄진다.

카프카 토픽에 메시지를 전송하는 프로듀서 역시 운영중에 얼마든지 증가시킬 수 있다. 카프카에서 메시지를 읽어가는 컨슈머의 경우 컨슈머 그룹으로 묶이며 컨슈머 그룹에 컨슈머를 추가할 수 있다. 컨슈머 그룹에 컨슈머가 추가되면 컨슈머의 파티션 소유권(Ownership)이 재분배되는 리밸런스 과정을 거쳐 컨슈머 그룹에 속한 컨슈머들이 고르게 파티션을 할당 받게 된다. 여튼 컨슈머 역시 운영 중에 무난하게 추가될 수 있다.

카프카 토픽은 내부에서 파티션(Partition)이라는 세분화된 단위로 나뉘어 저장되는데 토픽의 파티션 개수도 운영중에 추가할 수 있다.

이런 모든 확장 작업이 카프카 운영에 심각한 부담을 줄 정도는 아니며 쉽고 간편하게 이루어 질 수 있도록 설계되었다.

4) 고성능

카프카는 대용량 실시간 로그 처리에 특화되어 있다. 일반적인 범용 메시징 시스템이 지원하는 몇 가지 기능을 포기하면서 높은 처리량(Throughput)을 갖도록 설계되었다. 예를 들어 IBM Websphere MQ 같은 경우 복수의 큐(Queue)에 메시지들을 원자적(Atomically)으로 전달 할 수 있는 트랜잭션(Transaction) 기능을 제공한다. JMS의 경우 컨슈머가 메시지를 소비했는지 여부를 알 수 있는 기능도 제공한다.

하지만 범용 메시징 시스템이 제공하는 이런 기능은 링크드인에서 크게 중요한 기능으로 생각되지는 않았다. 오히려 이런 기능을 제공하기 위해 메시징 시스템 내부에서 복잡한 처리와 병목현상 등이 발생하여 성능을 최대로 끌어낼 수 없었다.

카프카는 이런 기능을 배제하고 뛰어난 처리량(Throughput)을 갖도록 설계되었다. 불필요한 기능을 제외하고 내부적으로 배치처리, 분산 처리와 같은 다양한 기법을 사용해 성능을 처리량을 최대로 끌어냈다. (덕분에 튜닝해야 할 파라미터가 많아지긴 했다)

카프카를 소개한 netDB 2011에 게재된 “Kafka: a Distributed Messaging System for Log Processing” 논문에서 카프카의 처리량을 다른 메시지 시스템과 비교했다. 비교 대상은 Apache ActiveMQ v5.4, RabbitMQ v2.4이며 카프카의 배치 사이즈를 1과 50으로 설정한 내용도 함께 비교했다. (RabbitMQ와 ActiveMQ의 경우 별도의 배치 처리를 지원하지 않는 듯 해서 batch 1로 설정된 것으로 간주하고 실험을 했다고 한다)

실험에는 2대의 리눅스 머신이 사용되었다. 리눅스 머신의 사양은 8개의 2GHz 코어와 16GB 메인 메모리, RAID 10으로 구성된 6장의 디스크로 구성되었다. 둘 중 하나는 브로커로 사용되었으며 나머지 하나는 컨슈머와 프로듀서로 사용되었다.

카프카를 소개한 논문이니 카프카가 잘 나왔겠지. 여튼 뛰어난 프로듀서 처리량 성능을 보인다.

마찬가지로 뛰어난 컨슈머 처리량 성능을 보인다.

자세한 내용은 “Kafka: a Distributed Messaging System for Log Processing” 논문을 읽어보시길..

5) 컨슈머의 pull 방식

기존의 메시징 시스템의 경우 브로커가 컨슈머에게 데이터를 전달해주는 “Push 방식”을 채택한 경우가 많이 있다. 카프카는 컨슈머가 브로커에게서 메시지를 가져오는 “Pull 방식”을 채택했다.

Pull 방식을 사용하면 컨슈머의 처리량을 브로커가 고민할 필요가 없다. 컨슈머는 자신이 처리할 수 있는 만큼의 메시지만 브로커에게서 가져가면 되기 때문에 최적의 메시지처리 성능을 갖을 수 있다. 만일 컨슈머의 처리 속도가 프로듀서의 생산 속도보다 느리다면 컨슈머를 추가하여 처리량을 늘릴 수 있다. 또 한 메시지를 모았다가 한번에 처리할 수 있는 배치처리도 간단하게 구현할 수 있게 되었다.

카프카 살펴보기

1) 토픽(Topic)과 파티션(Partition) 그리고 세그먼트 파일(Segment File)

카프카에 전달되는 메시지 스트림의 추상화된 개념을 토픽(Topic)이라고 한다. 프로듀서는 메시지를 특정 토픽에 발행한다. 컨슈머는 특정 토픽에서 발행되는 메시지를 구독할 수 있다. 토픽은 프로듀서와 컨슈머가 만나는 접점이라고 생각하면 된다.

프로듀서가 메시지를 특정 토픽에 전송하면 카프카 클러스터는 토픽을 좀 더 세분화된 단위인 파티션(Partition)으로 나누어 관리한다. 기본적으로 프로듀서는 발행한 메시지가 어떤 파티션에 저장되는지 관여하지 않는다. (물론 메시지 키와 파티셔너를 이용하여 특정 파티션으로 메시지를 전송할 수 있도록 할 수도 있다.) 각 파티션은 카프카 클러스터를 구성하는 브로커들이 고루 나눠 갖는다. (카프카 클러스터의 브로커 중 한 녀석이 컨트롤러(Controller)가 되어 이 분배 과정을 담당한다. 컨트롤러는 카프카 클러스터의 반장 역할이라고 보면 된다)

특정 파티션으로 전달된 메시지에는 오프셋(Offset)이라고하는 숫자가 할당된다. 오프셋은 해당 파티션에서 몇 번째 메시지인지 알 수 있는 ID 같은 개념이라고 생각하면 된다. 오프셋을 이용해서 컨슈머가 메시지를 가져간다. 몇 번째 오프셋까지 읽었다, 몇 번째 오프셋부터 읽겠다는 요청을 할 수 있다. 오프셋은 파티션 내에서 유일한(Unique) 값을 갖는다.

카프카 브로커는 파티션에 저장된 메시지를 파일 시스템에 저장한다. 이 때 만들어지는 파일이 ‘세그먼트 파일(Segment File)’이다. 기본적으로 1GB까지 세그먼트 파일이 커지거나 일정 시간이 지나면 파일을 다시 만든다. 보존기간이 지난 메시지가 지워질 때 세그먼트 파일 단위로 지워진다.

2) 파티션의 복제(Replication)

카프카는 고가용성(High Availability)을 제공하기 위해 파티션 데이터의 복사본(Replication)을 유지할 수 있다. 몇 개의 복사본을 저장할 것인지는 리플리케이션 팩터(Replication Factor)로 저장할 수 있으며 토픽 별로 다르게 설정 할 수 있다.

만약 토픽의 리플리케이션 팩터를 N으로 설정하면 N개의 파티션 데이터 복사본이 생성되고 카프카 브로커가 겹치지 않게 나눠갔는다. N개의 복사본은 리플리카(Replica)라고 하며 N개중 1개의 리플리카가 리더(Leader)로 선정되어 클라이언트 요청을 담당한다. 나머지 N – 1 개의 리플리카는 팔로워(Follower)가 되어 리더의 변경사항을 따라가기만 한다. 프로듀서와 컨슈머의 쓰기, 읽기 요청은 리더 리플리카에만 전송되며 클라이언트 설정에 따라 팔로워들에게 전송되기까지 기다릴 수도 있고, 리더에게만 전송될 수도 있다.

리더의 변경사항을 잘 따라가면서 복사를 하는 팔로워는 ISR(In-Sync Replica)를 구성하며 리더 리플리카를 담당하는 브로커에 장애가 생겼을 때, ISR에 속한 리플리카가 새로운 리더로 선정되어 클라이언트 요청을 담당하게 된다. 만약 ISR에 있는 리플리카가 리더의 변경 사항을 미처 따라가지 못하면 ISR에서 빠지게 된다. (리더의 변경을 따라가지 못 한 팔로워가 새로운 리더가 되면 데이터가 유실되기 때문에..)

파티션의 리더와 팔로워는 다른 브로커에 할당해야 고가용성을 보장할 수 있다. 카프카 버전 0.10.0 부터는 랙(Rack)을 식별할 수 있는 정보도 명시할 수 있다. 즉, 데이터 센터에서 같은 랙에 있는 서버의 경우 전원이나 네트워크 스위치를 공유할 가능성이 있어 같이 장애가 발생할 수 있다. 리더와 팔로워 둘 중 하나는 장애에서 살아남아야 고가용성이 보장되기 때문에 다른 랙으로 할당할 수 있게 랙 정보를 입력할 수 있는 기능이 제공된다.

3) 프로듀서(Producer)와 컨슈머(Consumer), 컨슈머 그룹(Consumer Group)

카프카의 클라이언트는 기본적으로 프로듀서(Producer)와 컨슈머(Consumer)라는 두 가지 분류가 존재한다.

(출처 : Apache Documentation)

프로듀서(Producer)는 메시지를 생성하여 카프카에 전달하는 클라이언트를 의미한다. 프로듀서가 특정 토픽에 메시지를 전송하면 기본적으로 여러 파티션에 번갈아가며 전송되어 파티션을 골고루 사용하게 된다. 전송 순서가 중요한 메시지의 경우 메시지에 키(Key)값을 할당하고 이 키를 기반으로 특정 파티션에 전송되도록 파티셔너를 작성할 수도 있다.

프로듀서에서 유의해야 할 점은 서로 다른 파티션으로 전송된 메시지의 소비 순서는 보장되지 않는다는 것이다. 첫 번째 메시지가 0번 파티션으로 전송되고 두 번째 메시지가 1번 파티션으로 전송되었을 때, 컨슈머가 1번 파티션에 있는 두 번째 메시지를 먼저 소비할 수도 있다. 만약 메시지의 처리 순서가 중요한 경우라면 메시지 키와 파티셔너를 이용해 두 개의 메시지가 같은 파티션으로 전송되도록 추가적인 작업이 필요하다. 즉, 카프카로 전송된 메시지는 같은 파티션일 경우에만 순서가 보장된다.

(출처 : Apache Documentation)

컨슈머(Consumer)는 메시지를 카프카로부터 읽어가는 클라이언트다. 카프의 컨슈머는 컨슈머 그룹(Consumer Group)을 형성한다. 카프카의 토픽은 컨슈머 그룹 단위로 구독되어진다. 토픽의 파티션은 컨슈머 그룹 당 오로지 하나의 컨슈머의 소비만 소비될 수 있다. 파티션과 컨슈머의 이런 연결을 소유권(Ownership)이라고 부른다. 다시말해서 같은 컨슈머 그룹에 속한 컨슈머들이 동시에 동일한 파티션에서 메시지를 읽어갈 수 없다.

파티션과 컨슈머의 Ownership 관계는 브로커와 컨슈머의 구성이 변경되지 않는 이상 계속 유진된다. 즉, 컨슈머 그룹에 컨슈머가 추가 혹은 제거 된 경우 컨슈머 그룹내에서 파티션의 소유권을 재분배하는 리밸런싱(Rebalancing) 과정이 실행된다. 리밸런싱을 통해 컨슈머 그룹 내의 컨슈머들이 파티션을 고르게 할당받아 소비할 수 있게 된다. 카프카 클러스터에 브로커가 추가/제거 되는 경우 전체 컨슈머 그룹들에서 리밸런싱이 발생한다.

컨슈머 그룹의 컨슈머 수가 토픽의 파티션 수보다 많은 경우, 파티션 개수만큼의 컨슈머만 동작하며 나머지 잉여 컨슈머들은 놀게 된다. 따라서 파티션 개수와 컨슈머 그룹내 컨슈머 개수의 절절한 조정이 필요하다.

컨슈머 그룹은 각 파티션에 대해 오프셋(Offset) 값을 할당받는다. 이 오프셋은 파티션에 저장된 메시지에 할당된 오프셋 값으로 컨슈머 그룹이 해당 파티션에서 어디까지 읽었는지를 의미한다. 따라서 특정 컨슈머 그룹에 컨슈머가 추가, 제거되어 리밸런싱이 일어났을 때 다른 컨슈머가 파티션을 할당받아도 내 컨슈머 그룹이 어디까지 읽었는지 기록이 유지되기 때문에 이어서 처리할 수 있게 된다.

컨슈머가 카프카로부터 메시지를 읽어서 처리한 다음 ‘여기까지 읽어서 처리했어요’라고 컨슈머 그룹에 할당된 오프셋을 변경하는 작업을 오프셋 커밋(Commit) 이라고 한다. 오프셋 커밋을 잘 처리하지 않으면 카프카 클라이언트를 사용하는 애플리케이션에서 메시지 누락이 발생하거나 불필요한 중복 처리가 발생할 수 있으므로 잘 이해하고 사용해야한다.

4) Kafka와 Filesystem

카프카로 전송된 메시지는 카프카 내부에서 세그먼트 파일 형태로 저장된다. 파일을 파일시스템에 기록하여 메시지의 영속성(Persistence)을 얻는다. 즉 나중에 다시 특정 메시지를 소비하고 싶을 때 파일 시스템에 저장된 메시지를 읽어서 컨슈머에게 전송할 수 있는 것이다.

카프카는 파일 시스템에 세그먼트 파일을 쓰는 동작에서 별도의 버퍼 캐시를 구현하는 대신 운영체제의 페이지 캐시를 사용했다. 운영체제는 사용하지 않는 메모리를 파일 시스템의 페이지 캐시로 사용하며, 사용자가 요청하지 않아도 미리 읽기(Read Ahead) 동작을 통해 앞으로 읽을 가능성이 있는 뒤쪽 내용을 미리 메모리를 읽어들이는 최적화를 진행한다. 또 카프카 내부에서 버퍼캐시를 운영하지 않기 때문에 JVM에 의해 발생할 수 있는 GC(Garbage Collection) 오버헤드도 줄인다. 또 한 브로커를 재시작하는 경우에도 페이지 캐시는 커널 영역에 남아있으므로 웜업되어 있는 상태로 서비스를 시작할 수 있게 된다.

5) 효율성(Efficiency)

카프카는 효율성(Efficiency)을 극대화하기 위해 매우 노력했다.

우선 메시지의 크기가 작은 경우 네트워크 오버헤드가 상대적으로 커질 수 있는 상황을 해소하기위해 메시지 셋(Message Set)단위로 메시지를 모아서 처리하는 배치(Batch) 처리를 가능하도록 기능을 제공했다. 메시지를 모아서 처리하는 배치를 이용해서 네트워크 오버헤드도 줄일 수 있고, 디스크에 최대한 연속적으로 메시지를 쓸 수 있는 순차처리의 장점을 얻을 수도 있다.

아파치 카프카는 손쉽게 데이터 파이프라인을 구축할 수 있는 오픈소스 프로젝트다. 손쉽게 사용할 수 있지만 제대로 사용하고 튜닝하려면 내부 동작을 잘 알아야 한다. 관련된 내부 동작 공부를 심도있게 해야할 필요가 있을 것 같다.

References

– Kafka, the definitive guide

– Kafka: a Distributed Messaging System for Log Processing, netDB 11

– Apache Kafka – Introduction

반응형

키워드에 대한 정보 아파치 카프카

다음은 Bing에서 아파치 카프카 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka?

  • apache kafka
  • 카프카
  • 아파치카프카
  • 빅데이터
  • bigdata
  • 개발자
  • 빅데이터개발
  • kafka

빅데이터의 #기본 #💁‍♂️ #아파치 #카프카! #개요 #및 #설명 # #| #What #is #apache #kafka?


YouTube에서 아파치 카프카 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 빅데이터의 기본 💁‍♂️ 아파치 카프카! 개요 및 설명 | What is apache kafka? | 아파치 카프카, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment