아파치 카프카
Apache Kafka| 원저작자 | 링크드인 |
|---|---|
| 개발자 | Apache 소프트웨어 재단 |
| 초기 릴리즈 | 2011년 1월, 전([2] |
| 안정된 릴리스 | 3.2.0 / 2022년[3] 5월 9일 |
| 저장소 | |
| 기입처 | 스칼라, 자바 |
| 운영 체제 | 크로스 플랫폼 |
| 유형 | 스트림 처리, 메시지 브로커 |
| 면허증. | Apache 라이센스 2.0 |
| 웹 사이트 | kafka |
Apache Kafka는 분산 이벤트 스토어 및 스트림 처리 플랫폼입니다.Java 및 Scala로 작성된 Apache Software Foundation에 의해 개발된 오픈 소스 시스템입니다.이 프로젝트는 실시간 데이터 피드를 처리할 수 있는 높은 처리량과 낮은 지연 시간의 유니파이드 플랫폼을 제공하는 것을 목표로 합니다.Kafka는 Kafka Connect를 통해 외부 시스템(데이터 Import/export용)에 접속할 수 있습니다.또한 Kafka Streams 라이브러리를 제공하여 애플리케이션을 스트림 처리할 수 있습니다.Kafka는 효율성에 최적화된 바이너리 TCP 기반 프로토콜을 사용하며, 네트워크 라운드 트립의 오버헤드를 줄이기 위해 메시지를 자연스럽게 그룹화하는 "메시지 세트" 추상화에 의존합니다.이것에 의해, 「더 큰 네트워크 패킷, 보다 큰 시퀀셜 디스크 조작, 연속하는 메모리 블록[...]에 연결됩니다.이것에 의해, Kafka는 랜덤 메시지의 버스트 스트림을 [4]리니어 기입으로 변환할 수 있습니다.」
역사
Kafka는 원래 Linked In에서 개발되었으며, 이후 2011년 초에 오픈 소스로 출시되었습니다.Jay Kreps, Neha Narkhede 및 Jun Rao는 Kafka를 [5]공동창립하는 데 도움을 주었다.Apache Incubator 졸업식은 2012년 10월 23일에 실시되었습니다.Jay Kreps는 이 소프트웨어가 "작성에 최적화된 시스템"이라는 이유로 저자인 Franz Kafka의 이름을 따서 이 소프트웨어의 이름을 짓기로 선택했고, 그는 Kafka의 [6]작품을 좋아했다.
적용들
Apache Kafka는 커밋 로그를 기반으로 하며 사용자가 이를 구독하고 원하는 수의 시스템 또는 실시간 응용 프로그램에 데이터를 게시할 수 있습니다.예를 들어 Uber에서 승객 및 운전자 매칭 관리, British Gas Smart Home에 대한 실시간 분석 및 예측 유지 관리 제공, LinkedIn [7]전체에 걸쳐 수많은 실시간 서비스 수행 등이 있습니다.
아키텍처
Kafka는 생산자라고 불리는 임의의 많은 프로세스에서 온 키 가치 메시지를 저장합니다.데이터는, 다른 「토픽」내의 다른 「파티션」으로 분할할 수 있습니다.파티션 내에서 메시지는 오프셋(파티션 내 메시지 위치)에 따라 엄밀하게 정렬되며 타임스탬프와 함께 인덱싱되어 저장됩니다."소비자"라고 불리는 다른 프로세스는 파티션에서 메시지를 읽을 수 있습니다.스트림 처리를 위해 Kafka는 Kafka에서 데이터를 소비하는 Java 애플리케이션을 쓰고 결과를 Kafka에 다시 쓸 수 있는 Streams API를 제공합니다.Apache Kafka는 Apache Apex, Apache Beam, Apache Flink, Apache Spark, Apache Storm 및 Apache NiFi와 같은 외부 스트림 처리 시스템과도 작동합니다.
Kafka는 하나 이상의 서버(브로커라고 함)로 구성된 클러스터에서 실행되며 모든 항목의 파티션이 클러스터 노드에 분산됩니다.또한 파티션은 여러 브로커에게 복제됩니다.이 아키텍처를 통해 Kafka는 대량의 메시지 스트림을 폴트 톨러런스 방식으로 전송할 수 있으며 Java Message Service(JMS), Advanced Message Queuing Protocol(AMQP) 등의 기존 메시징 시스템을 대체할 수 있게 되었습니다.0.11.0.0 릴리스 이후 Kafka는 Streams API를 사용하여 정확히 한 번의 스트림 처리를 제공하는 트랜잭션 쓰기를 제공합니다.
Kafka는 다음 두 가지 유형의 토픽을 지원합니다.레귤러와 컴팩트.일반 토픽은 보존 시간 또는 스페이스 바운드로 설정할 수 있습니다.지정된 보존 시간보다 오래된 레코드가 있거나 파티션의 공간 제한이 초과된 경우 Kafka는 오래된 데이터를 삭제하여 저장 공간을 확보할 수 있습니다.기본적으로 항목은 7일의 보존 시간으로 구성되지만 데이터를 무기한으로 저장할 수도 있습니다.압축된 토픽의 경우 레코드는 시간 또는 공간 경계에 따라 만료되지 않습니다.대신, Kafka는 이후 메시지를 동일한 키를 사용하여 오래된 메시지에 대한 업데이트로 취급하며 키별로 최신 메시지를 삭제하지 않습니다.사용자는 특정 키에 대해 null-value를 사용하여 이른바 툼스톤메시지를 작성함으로써 메시지를 완전히 삭제할 수 있습니다.
Kafka에는 5개의 주요 API가 있습니다.
- Producer API: 응용 프로그램에서 레코드 스트림을 게시할 수 있습니다.
- Consumer API – 응용 프로그램이 토픽을 구독하고 레코드 스트림을 처리할 수 있도록 합니다.
- 커넥터 API – 주제를 기존 응용 프로그램에 연결할 수 있는 재사용 가능한 생산자 및 소비자 API를 실행합니다.
- Streams API – 이 API는 입력 스트림을 출력으로 변환하여 결과를 생성합니다.
- 관리 API – Kafka 토픽, 브로커 및 기타 Kafka 오브젝트를 관리하기 위해 사용됩니다.
소비자 및 생산자 API는 기본 메시징 프로토콜을 통해 Kafka의 핵심 기능에서 분리됩니다.이를 통해 Kafka에 번들된 Java API만큼 효율적인 모든 프로그래밍 언어로 호환되는 API 계층을 작성할 수 있습니다.Apache Kafka 프로젝트는 이러한 서드파티 API 목록을 유지합니다.
카프카 API
API 연결
Kafka Connect(또는 Connect API)는 다른 시스템에서 데이터를 Import/export하는 프레임워크입니다.Kafka 0.9.0.0 릴리즈에서 추가되었으며 내부적으로 Producer API와 Consumer API를 사용합니다.Connect 프레임워크 자체는 다른 시스템에서 데이터를 읽고 쓰는 실제 로직을 구현하는 이른바 "커넥터"를 실행합니다.Connect API는 커스텀커넥터를 구축하기 위해 구현해야 하는 프로그래밍 인터페이스를 정의합니다.널리 사용되는 데이터 시스템용 오픈 소스 및 상용 커넥터는 이미 많이 있습니다.그러나 Apache Kafka 자체에는 프로덕션용 커넥터가 포함되어 있지 않습니다.
스트림 API
Kafka Streams(또는 Streams API)는 Java로 작성된 스트림 처리 라이브러리입니다.Kafka 0.10.0.0 릴리즈에서 추가되었습니다.라이브러리를 사용하면 확장 가능하고 탄력적이며 완전한 내결함성을 갖춘 스테이트풀 스트림 처리 애플리케이션을 개발할 수 있습니다.메인 API는 필터, 맵, 그룹화, 윈도우 설정, 집약, 조인 및 테이블 개념과 같은 고급 연산자를 제공하는 Stream Processing Domain Specific Language(DSL; 스트림 처리 도메인 고유 언어)입니다.또한 프로세서 API를 사용하여 보다 낮은 수준의 개발 접근방식을 위한 커스텀 오퍼레이터를 구현할 수 있습니다.DSL과 프로세서 API를 혼재시킬 수도 있습니다.스테이트풀 스트림 처리를 위해 Kafka Streams는 RocksDB를 사용하여 로컬오퍼레이터 상태를 유지합니다.RocksDB는 디스크에 쓸 수 있기 때문에 유지되는 상태는 사용 가능한 메인 메모리보다 클 수 있습니다.폴트 톨러런스를 위해 로컬 상태 저장소에 대한 모든 업데이트도 Kafka 클러스터의 항목에 기록됩니다.그러면 이러한 항목을 읽고 모든 데이터를 RocksDB로 공급하여 상태를 다시 생성할 수 있습니다.Streams API의 최신 버전은 2.8.[8]0입니다.이 링크에는 [9]최신 버전으로 업그레이드하는 방법에 대한 정보도 포함되어 있습니다.
버전 호환성
버전 0.9.x까지 Kafka 브로커는 이전 클라이언트와의 하위 호환성이 있습니다.Kafka 0.10.0.0 이후 브로커는 새로운 클라이언트와도 호환성이 있습니다.새 클라이언트가 이전 브로커에 연결된 경우 브로커가 지원하는 기능만 사용할 수 있습니다.Streams API의 경우 버전 0.10.1.0부터 완전한 호환성이 시작됩니다.Kafka Streams 응용 프로그램은 0.10.0 이전의 브로커와 호환되지 않습니다.
성능
엔드 투 엔드의 퍼포먼스를 감시하려면 Kafka가 소비자 [10][11]간의 조정에 사용하는 ZooKeeper 모니터링과 더불어 브로커, 소비자 및 생산자의 메트릭을 추적해야 합니다.현재 Kafka 성능을 추적하는 모니터링 플랫폼이 여러 개 있습니다.Kafka 데이터 수집은 [12]이러한 플랫폼과 더불어 JConsole을 비롯한 Java에 일반적으로 번들되는 도구를 사용하여 수행할 수도 있습니다.
「 」를 참조해 주세요.
- Rabbit MQ
- 레디스
- 아파치 플링크
- 아파치 샘자
- Apache Spark 스트리밍
- 데이터 전송 서비스
- 엔터프라이즈 통합 패턴
- 엔터프라이즈 메시징 시스템
- 스트리밍 분석
- 이벤트 중심 SOA
- Hortonworks 데이터 흐름
- 메시지 지향 미들웨어
- 서비스 지향 아키텍처
레퍼런스
- ^ "Apache Kafka at GitHub". github.com. Retrieved 5 March 2018.
- ^ "Open-sourcing Kafka, LinkedIn's distributed message queue". Retrieved 27 October 2016.
- ^ https://github.com/apache/kafka/releases/tag/3.2.0; 발행일 : 2022년 5월 9일
- ^ "Efficiency". kafka.apache.org. Retrieved 2019-09-19.
- ^ Li, S. (2020)그는 고액 연봉의 직장을 LinkedIn에서 떠나 당신이 들어본 적 없는 틈새에 45억 달러의 사업을 세웠다.포브스.Forbes_Kreps에서 2021년 6월 8일 취득.
- ^ "What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?". Quora. Retrieved 2017-06-12.
- ^ "What is Apache Kafka". confluent.io. Retrieved 2018-05-04.
- ^ "Apache Kafka". Apache Kafka. Retrieved 2021-09-10.
- ^ "Apache Kafka". Apache Kafka. Retrieved 2021-09-10.
- ^ "Monitoring Kafka performance metrics". 2016-04-06. Retrieved 2016-10-05.
- ^ Mouzakitis, Evan (2016-04-06). "Monitoring Kafka performance metrics". datadoghq.com. Retrieved 2016-10-05.
- ^ "Collecting Kafka performance metrics - Datadog". 2016-04-06. Retrieved 2016-10-05.