Type Here to Get Search Results !

Apache Kafka(아파치 카프카) 소개

이 글에서는 Apache Kafka(아파치 카프카) 공식 홈페이지에 있는 Kafka 소개(Introduction)를 이해하고 번역해서 설명합니다. 

이 문서는 단순 번역이 아닌 이해를 바탕으로 번역한 것임을 참고하십시오. 


영문 원문은 다음 링크를 참고하십시오. 

Apache Kafka

이벤트 스트리밍이란 무엇입니까?

이벤트 스트리밍은 인체의 중추 신경계에 해당하는 디지털 기능입니다. 비즈니스가 점차 소프트웨어로 정의되고 자동화되고 더 많은 소프트웨어가 소프트웨어 사용자로 동작하는  'always-on' 세상을 위한 기술 기반입니다.




기술적으로 말하면 이벤트 스트리밍(event streaming)은 데이터베이스, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스에서 이벤트 스트림의 형태로 데이터를 실시간으로 캡처하는 사용 방법(real-time data capturing practice)입니다. 나중에 검색할 수 있도록 이러한 이벤트 스트림을 지속적으로 저장합니다. 실시간 혹은 모아서 이벤트 스트림을 조작, 처리 및 반응합니다. 필요에 따라 이벤트 스트림을 다른 대상 기술로 라우팅합니다. 따라서 이벤트 스트리밍은 데이터의 지속적인 흐름과 해석을 보장하여 올바른 정보가 적시에 올바른 위치에 있도록 합니다.


무엇을 위해 이벤트 스트리밍을 사용할 수 있습니까?

이벤트 스트리밍은 수 많은 산업 및 조직의 다양한 사례에 적용됩니다 . 다음과 같은 많은 예가 있습니다.

  • 증권 거래소, 은행, 보험 등에서 실시간으로 결제 및 금융 거래를 처리.
  • 물류 및 자동차 산업과 같은 자동차, 트럭, 함대 및 선적을 실시간으로 추적하고 모니터링.
  • 공장 및 풍력 단지와 같은 IoT 장치 또는 기타 장비에서 센서 데이터를 지속적으로 캡처하고 분석.
  • 소매, 호텔 및 여행 산업, 모바일 애플리케이션과 같은 고객 상호 작용 및 주문을 수집하고 즉시 반응.
  • 병원 치료 중인 환자를 모니터링하고 상태 변화를 예측하여 응급 상황에서 적시에 치료.
  • 회사의 여러 부서에서 생성된 데이터를 연결, 저장 및 사용 가능하게 만드는 것.
  • 데이터 플랫폼, 이벤트 기반 아키텍처 및 마이크로서비스의 기반 역할.

Apache Kafka®는 이벤트 스트리밍 플랫폼입니다. 그게 무슨 뜻이야?


Kafka는 세 가지 주요 기능을 결합하여 전투 테스트(battle-tested)¹를 거친 단일 솔루션으로 종단간 이벤트 스트리밍에 대한 사용예를 구현할 수 있습니다 .

  • 다른 시스템에서 데이터를 지속적으로 가져오기(import)/내보내기(export)를 포함하여 이벤트 스트림을 게시 - publish (write) 하고 구독 - subscribe (read) 합니다.
  • 사용자가 원하는 기간 동안 지속적이고 안정적으로 이벤트 스트림을 저장합니다.
  • 이벤트 발생 또는 모아진 이벤트 스트림을 처리합니다.
그리고 이 모든 기능은 분산되고 확장성이 뛰어나고 탄력적이며 내결함성이 있고 안전한 방식(distributed, highly scalable, elastic, fault-tolerant, and secure manner)으로 제공됩니다. Kafka는 베어메탈 하드웨어², 가상 머신, 컨테이너, 온프레미스 및 클라우드에 배포할 수 있습니다. Kafka 환경을 직접 관리할 수 있고, 다양한 공급업체에서 제공하는 완전 관리형 서비스 중에서 선택할 수 있습니다.

1. 전투 테스트: 
"배틀 테스트"는 전쟁에서 사용되어 신뢰성과 효과성이 입증된 것을 의미합니다. 또한 전투에서 경험하고 강화된 것을 의미하기도 합니다. 이 용어는 종종 실제 상황에서 테스트에 성공적으로 통과한 것을 묘사하는 데 사용됩니다.
2. 베어메탈 하드웨어: 
베어메탈 하드웨어는 기본 운영 체제(OS) 또는 설치된 소프트웨어가 없는 컴퓨터 시스템을 의미합니다. "베어메탈"이란 용어는 원래 소프트웨어가 설치되지 않은 하드웨어를 의미했습니다. 따라서 베어메탈에 운영 체제가 설치되면 하드웨어 자원에 직접 액세스 할 수 있습니다. 이는 가상 머신이나 컨테이너에서 운영 체제를 실행하는 것과 다른 의미를 표현하기위해 사용됩니다.


Kafka는 간단히 말해서 어떻게 작동합니까?

Kafka는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버 와 클라이언트로 구성된 분산 시스템입니다 . 온프레미스 및 클라우드 환경의 베어메탈 하드웨어, 가상 머신 및 컨테이너에 배포할 수 있습니다.

서버(Servers) : Kafka는 여러 데이터 센터 또는 클라우드 지역에 걸쳐 있을 수 있는 하나 이상의 서버 클러스터로 실행됩니다. 이러한 서버 중 일부는 브로커라고 하는 스토리지 계층을 형성합니다. 다른 서버는 Kafka Connect를 실행하여 데이터를 이벤트 스트림으로 지속적으로 import/export하여 Kafka를 관계형 데이터베이스 및 기타 Kafka 클러스터와 같은 기존 시스템과 통합합니다. 미션 크리티컬 사용 사례를 구현할 수 있도록 Kafka 클러스터는 확장성이 뛰어나고 내결함성이 있습니다. 서버 중 하나에 오류가 발생하면 다른 서버가 작업을 이어받아 데이터 손실 없이 지속적인 운영을 보장합니다.

클라이언트(Clients) : 네트워크 문제나 시스템 오류가 발생한 경우에도 내결함성을 보장하면서 이벤트 스트림을 대규모로 병렬로 읽고 쓰고 처리하는 분산 애플리케이션 및 마이크로 서비스를 작성할 수 있습니다. Kafka는 Kafka 커뮤니티에서 제공하는 수십 개의 클라이언트로 보강된 일부 클라이언트와 함께 제공됩니다 . 클라이언트는 Java 및 Scala에서 사용할 수 있는 고 수준 Kafka Streams 라이브러리를 포함합니다. Go, Python, C/C++ 및 기타 여러 다른프로그래밍 언어를 위한 REST API를 제공합니다. 

 

주요 개념 및 용어

이벤트는 실 세계 혹은 당신의 사업에서 "어떤 일이 일어났다"는 사실을 기록합니다. 문서에서는 레코드 또는 메시지라고도 합니다. Kafka에서 데이터를 읽거나 쓸 때 이벤트 형식으로 수행합니다. 개념적으로 이벤트에는 키, 값, 타임스탬프 및 선택적(optional) 메타데이터 헤더(metadata headers)가 있습니다. 다음은 예제 이벤트입니다.

이벤트 키(Event Key): "Alice"

이벤트 값(Event Value): "Bob에게 $200 지불"

이벤트 타임스탬프(Event Timestamp): "2020년 6월 25일 오후 2:06"

Producers(생산자)는 이벤트를 Kafka에 게시(publish) - 쓰기(write)하는 클라이언트 애플리케이션이고 Consumers(소비자)는 이러한 이벤트를 구독(읽고 처리)하는 애플리케이션입니다. Kafka에서 Producer(생산자)와 Consumers(소비자)는 서로 완전히 분리되어 있으며 Kafka의 높은 확장성을 달성하기 위한 핵심 설계 요소입니다. 예를 들어 Producer(생산자)는 Consumers(소비자)를 기다릴 필요가 없습니다. Kafka는 이벤트를 정확히 한 번 처리하는 기능과 같은 다양한 것들을 보장합니다.


이벤트는 토픽(topic)으로 구성되고 영구적으로 저장됩니다. 매우 단순화된 토픽은 파일 시스템의 폴더와 유사하며 이벤트는 해당 폴더의 파일입니다. 예제 토픽 이름은 "결제"일 수 있습니다. Kafka의 토픽은 항상 다중 생산자이자 다중 구독자(multi-producer and multi-subscriber)입니다. 하나의 토픽에는 이벤트를 게시(publish)하는 0개, 1개 또는 많은 Producer(생산자)와 이러한 이벤트를 구독하는 0개, 1개 또는 많은 Consumer(소비자)가 있을 수 있습니다. 토픽의 이벤트는 필요한 만큼 자주 읽을 수 있습니다. 기존 메시징 시스템과 달리 이벤트는 소비 후 삭제되지 않습니다. 대신 Kafka가 주제별 구성 설정을 통해 이벤트를 유지해야 하는 기간을 정의합니다. 그 후에는 이전 이벤트가 삭제됩니다. Kafka의 성능은 데이터 크기와 관련하여 실질적으로 일정하므로 장기간 데이터를 저장해도 괜찮습니다.


토픽은 파티션(partitioned) 됩니다 . 즉, 토픽이 다른 Kafka 브로커에 있는 여러 "buckets(버킷)"에 분산되어 있습니다. 데이터의 이러한 분산 배치는 클라이언트 애플리케이션이 여러 브로커에서 동시에 데이터를 읽고 쓸 수 있도록 하기 때문에 확장성에 매우 중요합니다. 새 이벤트가 토픽에 게시되면 실제로 토픽의 파티션 중 하나에 추가됩니다. 동일한 이벤트 키(예: 고객 또는 차량 ID)가 있는 이벤트는 동일한 파티션에 기록되며 Kafka는 지정된 토픽 파티션의 소비자가 항상 해당 파티션의 이벤트를 작성된 순서와 정확히 동일한 순서로 읽을 것임을 보장합니다.

그림: 이 예제 항목에는 4개의 파티션 P1–P4가 있습니다. 서로 다른 두 Producer client( 생산자 클라이언트 )가 네트워크를 통해 토픽(Topic)의 파티션에 이벤트를 작성하여 서로 독립적으로 새로운 이벤트를 토픽에 게시하고 있습니다. 키가 같은 이벤트(그림에서 색상으로 표시됨)는 동일한 파티션에 기록됩니다. 두 Producer client는 동일한 파티션에 쓸(publish/write)수도 있습니다.



데이터 내결함성 및 고가용성을 만들기 위해 모든 토픽을 지역 또는 데이터 센터 간에도 복제(replicated)할 수 있으므로 문제가 발생할 경우를 대비하여 항상 데이터 사본을 가지고 있는 여러 브로커를 둘 수 있습니다. 일반적인 프로덕션 설정은 3-복제 입니다. 즉, 항상 데이터 복사본이 3개 있습니다. 이 복제는 토픽 파티션에서 수행됩니다.

이 입문서는 소개하기에 충분하지만, 관심이 있는 경우 설명서의 디자인 섹션에서 Kafka의 다양한 개념을 자세히 설명하고 있으니 참고하시기 바랍니다. 

Kafka API

관리 작업을 위한 명령줄 도구(Command line tool) 외에도 Kafka에는 Java 및 Scala용 5가지 핵심 API가 있습니다.

  • 토픽, 브로커 및 기타 Kafka 개체를 관리하고 검사하는 Admin API.
  • 하나 이상의 Kafka 주제에 이벤트 스트림을 게시(쓰기)-publish(wirte)하기 위한 Producer API .
  • 하나 이상의 토픽을 구독(읽기)-subscribe(read)하고 생성된 이벤트 스트림을 처리하는 Consumer API.
  • Kafka Streams API는 스트림 처리 애플리케이션 및 마이크로 서비스를 구현합니다. 변환, 집계 및 조인과 같은 상태 저장 작업, 창 설정, 이벤트 시간 기반 처리 등을 포함하여 이벤트 스트림을 처리하는 상위 수준 기능을 제공합니다. 하나 이상의 토픽에 대한 출력을 생성하기 위해 하나 이상의 토픽에서 입력을 읽어 입력 스트림을 출력 스트림으로 효과적으로 변환합니다.
  • Kafka Connect API는 Kafka와 통합할 수 있도록 외부 시스템 및 애플리케이션에서 이벤트 스트림을 사용(읽기) 또는 생성(쓰기)하는 재사용 가능한 데이터 Import/Export 커넥터를 구축하고 실행합니다. 예를 들어 PostgreSQL과 같은 관계형 데이터베이스에 대한 커넥터는 테이블 집합에 대한 모든 변경 사항을 캡처할 수 있습니다. 그러나 실제로는 Kafka 커뮤니티가 이미 수백 개의 바로 사용할 수 있는 커넥터를 제공하기 때문에 일반적으로 자체 커넥터를 구현할 필요가 없습니다.

다음으로 해야 할 것

Tags