• 카프카란?
- 분산형 스트리밍 플랫폼(A distributed streaming platform)
- LinkedIn에서 여러 구직 및 채용 정보들을 한곳에서 처리(발행-구독) 할 수 있는 플랫폼으로 개발이 시작
(발행/구독: publish-subscribe 은 메시지를 특정 수신자에게 직접적으로 보내주는 시스템이 아니고, 메시지를 받기를 원하는 사람이 해당 토픽(topic)을 구독함으로써 메시지를 읽어 올 수 있다.)
• 특징
- 대용량 실시간 로그처리에 특화되어 설계된 메시징 시스템으로 TPS가 매우 우수
- 메시지를 메모리에 저장하는 기존 메시징 시스템과는 달리 파일에 저장을 하는데 그로 인해 카프카를 재 시작해도 메시지 유실 우려가 감소
- 대용량처리에 특화 : 컨슈머(Consumer)가 브로커(Broker)로부터 메시지를 직접 가져가는 PULL방식으로 동작 > 컨슈머는 자신의 처리능력만큼의 메시지만 가져와 최적의 성능
- 확장성(scale-out)과 고가용성(high availability)을 위하여 broker들이 클러스터로 구성되어 동작하도록 설계되어있다. 심지어 broker가 1개 밖에 없을 때에도 클러스터로써 동작한다. 클러스터 내의 broker에 대한 분산 처리는 Apache ZooKeeper가 담당
참고 : http://kafka.apache.org/documentation/
출처 : https://team-platform.tistory.com/m/11
• 주키퍼란?
- 주키퍼는(Zookeeper)는 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트입니다. 이러한 어플리케이션의 목적은 개발자가 코디네이션 로직보다는 비즈니스 핵심 로직에 집중하게끔 지원하는 역할
• 주키퍼 사용용도
- 주키퍼는 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 주로 사용
-
설정 관리(Configuration management) : 클러스터의 설정 정보를 최신으로 유지하기 위한 조율 시스템으로 사용됩니다.
-
클러스터 관리(Cluster management) : 클러스터의 서버가 추가되거나 제외될 때 그 정보를 클러스터 안 서버들이 공유하는 데 사용됩니다.
-
리더 채택(Leader selection) : 다중 어플리케이션 중에서 어떤 노드를 리더로 선출할 지를 정하는 로직을 만드는 데 사용됩니다. 주로 복제된 여러 노드 중 연산이 이루어지는 하나의 노드를 택하는 데 사용됩니다.
-
락, 동기화 서비스(Locking and synchronization service) : 클러스터에 쓰기 연산이 빈번할 경우 경쟁상태에 들어갈 가능성이 커집니다. 이는 데이터 불일치를 발생시킵니다. 이 때, 클러스터 전체를 대상을 동기화해( 락을 검 ) 경쟁상태에 들어갈 경우를 사전에 방지합니다.
출처: https://engkimbs.tistory.com/660