Apache Kafka-워크 플로우
지금까지 Kafka의 핵심 개념에 대해 논의했습니다. 이제 Kafka의 워크 플로우에 대해 조명 해 보겠습니다.
Kafka는 단순히 하나 이상의 파티션으로 분할 된 주제 모음입니다. Kafka 파티션은 선형 적으로 정렬 된 메시지 시퀀스로, 각 메시지는 인덱스 (오프셋이라고 함)로 식별됩니다. Kafka 클러스터의 모든 데이터는 분리 된 파티션 결합입니다. 수신 메시지는 파티션 끝에 기록되고 메시지는 소비자가 순차적으로 읽습니다. 메시지를 서로 다른 브로커에 복제하여 내구성을 제공합니다.
Kafka는 빠르고 안정적이며 지속적인 내결함성 및 제로 다운 타임 방식으로 pub-sub 및 큐 기반 메시징 시스템을 모두 제공합니다. 두 경우 모두 생산자는 단순히 주제에 메시지를 보내고 소비자는 필요에 따라 한 가지 유형의 메시징 시스템을 선택할 수 있습니다. 소비자가 원하는 메시징 시스템을 선택할 수있는 방법을 이해하려면 다음 섹션의 단계를 따르십시오.
Pub-Sub 메시징의 워크 플로
다음은 Pub-Sub 메시징의 단계별 워크 플로입니다.
생산자는 정기적으로 주제에 메시지를 보냅니다.
Kafka 브로커는 특정 주제에 대해 구성된 파티션에 모든 메시지를 저장합니다. 메시지가 파티션간에 동일하게 공유되도록합니다. 생산자가 두 개의 메시지를 보내고 두 개의 파티션이있는 경우 Kafka는 첫 번째 파티션에 하나의 메시지를 저장하고 두 번째 파티션에 두 번째 메시지를 저장합니다.
소비자는 특정 주제를 구독합니다.
소비자가 토픽을 구독하면 Kafka는 토픽의 현재 오프셋을 소비자에게 제공하고 오프셋을 Zookeeper 앙상블에 저장합니다.
소비자는 새 메시지에 대해 정기적 인 간격 (예 : 100Ms)으로 Kafka를 요청합니다.
Kafka는 생산자로부터 메시지를 받으면 이러한 메시지를 소비자에게 전달합니다.
소비자는 메시지를 수신하고 처리합니다.
메시지가 처리되면 소비자는 Kafka 브로커에 승인을 보냅니다.
Kafka가 승인을 받으면 오프셋을 새 값으로 변경하고 Zookeeper에서 업데이트합니다. 오프셋이 Zookeeper에서 유지되기 때문에 소비자는 서버 격분 중에도 다음 메시지를 올바르게 읽을 수 있습니다.
위의 흐름은 소비자가 요청을 중지 할 때까지 반복됩니다.
소비자는 언제든지 원하는 주제의 오프셋으로 되감기 / 건너 뛰고 모든 후속 메시지를 읽을 수 있습니다.
대기열 메시징 / 소비자 그룹의 워크 플로
단일 소비자 대신 대기열 메시징 시스템에서 동일한 그룹 ID를
가진 소비자 그룹
이 주제를 구독합니다. 간단히 말해서, 동일한 그룹 ID
로 주제를 구독하는 소비자 는 단일 그룹으로 간주되고 메시지가 그들간에 공유됩니다. 이 시스템의 실제 작업 흐름을 확인하겠습니다.
생산자는 일정한 간격으로 주제에 메시지를 보냅니다.
Kafka는 이전 시나리오와 유사한 특정 주제에 대해 구성된 파티션에 모든 메시지를 저장합니다.
단일 소비자가 특정 주제를 구독 하고
그룹 ID
가Group-1 인
Topic-01
이라고 가정 합니다.Kafka는 새 소비자 가
Group-1
과 동일한그룹 ID
로 동일한 주제 인Topic-01
을 구독 할 때까지 Pub-Sub 메시징과 동일한 방식으로 소비자와 상호 작용합니다 .새 소비자가 도착하면 Kafka는 작업을 공유 모드로 전환하고 두 소비자간에 데이터를 공유합니다. 이 공유는 소비자 수가 특정 주제에 대해 구성된 파티션 수에 도달 할 때까지 계속됩니다.
소비자 수가 파티션 수를 초과하면 기존 소비자 중 하나가 구독을 취소 할 때까지 새 소비자는 더 이상 메시지를받지 않습니다. 이 시나리오는 Kafka의 각 소비자에게 최소 하나의 파티션이 할당되고 모든 파티션이 기존 소비자에게 할당되면 새 소비자가 기다려야하기 때문에 발생합니다.
이 기능을
소비자 그룹
이라고도 합니다. 같은 방식으로 Kafka는 매우 간단하고 효율적인 방식으로 두 시스템의 장점을 모두 제공합니다.
ZooKeeper의 역할
Apache Kafka의 중요한 종속성은 분산 구성 및 동기화 서비스 인 Apache Zookeeper입니다. Zookeeper는 Kafka 브로커와 소비자 간의 조정 인터페이스 역할을합니다. Kafka 서버는 Zookeeper 클러스터를 통해 정보를 공유합니다. Kafka는 주제, 브로커, 소비자 오프셋 (큐 리더) 등에 대한 정보와 같은 기본 메타 데이터를 Zookeeper에 저장합니다.
모든 중요한 정보가 Zookeeper에 저장되고 일반적으로이 데이터를 앙상블 전체에 복제하기 때문에 Kafka 브로커 / Zookeeper의 실패는 Kafka 클러스터의 상태에 영향을주지 않습니다. Kafka는 Zookeeper가 다시 시작되면 상태를 복원합니다. 이렇게하면 Kafka의 다운 타임이 없습니다. Kafka 브로커 간의 리더 선택은 리더 실패시 Zookeeper를 사용하여 수행됩니다.
더 사육사의 내용을 참조하십시오 사육사
다음 장에서 시스템에 Java, ZooKeeper 및 Kafka를 설치하는 방법에 대해 계속 설명하겠습니다.