Kafka 아키텍처 및 내부

in kr-dev •  2 years ago 

Apache Kafka Architecture, 해당 구성 요소 및 구성 요소에 대한 Kafka의 내부 구조에 대해 설명합니다.

왜 카프카인가?

  • 여러 생산자
  • 다중 소비자
  • 디스크 기반 지속성
  • 오프라인 메시징
  • 메시지 재생
  • 분산
  • 뛰어난 확장성
  • 짧은 대기 시간
  • 높은 볼륨
  • 결함 허용
  • 실시간 처리

아파치 카프카 아키텍처

단일 클러스터: Apache Kafka

구성 요소:

  • 브로커
  • 생산자
  • 소비자
  • 메시지
  • 사육사
  • 주제

브로커:

  • Kafka 메시징 시스템의 핵심 구성 요소
  • Zookeeper와 협력하여 토픽 로그를 호스팅하고 파티션에 대한 리더 및 팔로워를 유지합니다.
  • Kafka 클러스터는 하나 이상의 브로커로 구성됩니다.
  • 클러스터 전체에서 파티션 복제 유지

생산자:

  • 주제에 메시지 게시
  • 메시지는 주제 중 하나에 추가됩니다.
  • Kafka 클러스터의 사용자 중 한 명입니다.
  • Kafka는 파티션별로 메시지 순서를 유지하지만 파티션 전체에서는 유지하지 않습니다.

메시지:

  • Kafka 메시지는 바이트 배열로 구성되며 여기에 추가로 Key라는 선택적 메타데이터가 있습니다.
  • 사용자 지정 키를 생성하여 파티션에 제어된 방식으로 메시지를 저장할 수 있습니다. 특정 키가 있는 메시지가 특정 파티션에 기록되는 것과 같습니다.(키를 해시하여 파티션 번호를 얻음)
  • Kafka는 또한 일괄 처리 모드에서 메시지를 작성할 수 있으므로 각 메시지에 대한 네트워크 왕복을 줄일 수 있습니다. 네트워크를 통해 운송하는 동안 배치가 압축됩니다.
  • 배치 모드는 처리량을 증가시키지만 대기 시간을 감소시키므로 대기 시간과 처리량 사이에 균형이 있습니다.

소비자

  • 주제의 메시지 구독자
  • 하나 이상의 소비자가 소비자 그룹이라고 하는 다른 파티션의 주제를 구독할 수 있습니다.
  • 동일한 소비자 그룹의 두 소비자는 동일한 파티션의 메시지를 구독할 수 없습니다.
  • 각 소비자는 구독 파티션에 대한 오프셋을 유지합니다.
  • 소비자는 토픽 파티션의 이미 읽은 오프셋을 찾아 메시지 구독을 재생할 수 있습니다.

주제:

  • 파일 시스템의 폴더처럼 간주될 수 있음
  • 생산자는 주제에 메시지를 게시하고 소비자는 여기에서 메시지를 사용합니다.
  • 메시지가 주제에 추가됨
  • 각 메시지는 오프셋이라는 특정 위치의 주제에 게시됩니다. 메시지의 위치가 오프셋 번호로 식별됨을 의미합니다.
  • 각 주제에 대해 Kafka 클러스터는 분할된 로그를 유지합니다.
  • 각 파티션은 단일 서버에서 호스팅되며 내결함성을 위해 구성 가능한 수의 서버에 복제될 수 있습니다.
  • 각 파티션에는 "리더" 역할을 하는 하나의 서버와 "팔로워" 역할을 하는 0개 이상의 서버가 있습니다.
  • Kafka는 파티션별로 메시지 순서를 제공하지만 파티션 전체에서는 제공하지 않습니다.
  • 주제 명명 규칙
<루트 네임스페이스>.<제품>.<제품별 계층> <앱 유형>.<앱 이름>.<데이터 집합 이름>.<처리 단계> <앱 유형>.<데이터 집합 이름>.<데이터>

다중 클러스터: Apache Kafka

멀티 클러스터 사용: Kafka 클러스터

상용 버전: Confluent Kafka

추가 구성 요소

  • 개발 및 연결: 커넥터, REST 프록시, KSQL
  • 데이터 호환성: 스키마 레지스트리
  • Enterprise Operation: Replicator, Connector, 자동 데이터 균형
  • 관리 및 모니터링: 제어 센터, 보안

Kafka가 초고속인 이유는 무엇입니까?

고집

  • Kafka는 파일 시스템을 사용하여 메시지를 저장하고 캐싱합니다.
  • 최근 디스크의 성능이 크게 향상되었습니다.
  • 최신 운영 체제는 큰 블록 배수의 데이터를 미리 가져오고 더 작은 논리적 쓰기를 큰 물리적 쓰기로 그룹화하는 미리 읽기 및 뒤에 쓰기 기술을 제공합니다.
  • 디스크는 디스크 캐싱을 위한 주 메모리 사용이 크게 증가함에 따라 지원합니다. 최신 OS는 메모리가 회수될 때 성능 저하 없이 모든 여유 메모리를 디스크 캐싱으로 기꺼이 전환 합니다.

일괄 처리

  • 설계에 따른 병렬 쓰기 및 읽기
  • 일괄 처리는 생산자에서 브로커로 또는 브로커에서 파일 시스템으로 데이터 전송을 위한 주요 버스터입니다.

파일 보내기의 영향을 이해하려면 파일에서 소켓으로 데이터를 전송하기 위한 공통 데이터 경로를 이해하는 것이 중요합니다.

  1. 운영 체제는 디스크에서 커널 공간의 페이지 캐시로 데이터를 읽습니다.
  2. 응용 프로그램은 커널 공간에서 사용자 공간 버퍼로 데이터를 읽습니다.
  3. 응용 프로그램은 데이터를 다시 커널 공간에 소켓 버퍼에 씁니다.
  4. 운영 체제는 소켓 버퍼에서 네트워크를 통해 전송되는 NIC 버퍼로 데이터를 복사합니다.

이것은 분명히 비효율적이며 4개의 사본과 2개의 시스템 호출이 있습니다.

  • 위의 제로 복사 최적화를 사용하면 데이터가 메모리에 저장되고 읽을 때마다 사용자 공간으로 복사되는 대신 페이지 캐시에 정확히 한 번 복사되고 소비할 때마다 재사용됩니다. 이를 통해 네트워크 연결 제한에 근접하는 속도로 메시지를 사용할 수 있습니다.

종단 간 일괄 압축

Kafka는 압축된 형식으로 메시지 배치를 작성하고 로그에 압축된 상태로 유지되며 소비자만 압축을 풉니다.

Kafka는 GZIP, Snappy, LZ4 및 ZStandard 압축 프로토콜을 지원합니다.

밀기 대 당기기

  • 메시징 시스템은 pull 또는 push를 할 수 있습니다.

푸시

  • 소비자는 생산자의 메시지 범람에 압도될 수 있음
  • 다양한 소비자를 상대하기 어려움.

당기다

  • 소비자는 브로커에서 용량에 따라 레코드를 가져올 수 있습니다.
  • 소비자별로 데이터를 가져오기 위해 일괄 처리가 생성됩니다.
  • Kafka는 시간 수정 간격 또는 필요한 바이트 크기에 따라 배치를 가져올 수 있습니다.

로그 압축

  • 로그 압축은 Kafka가 단일 토픽 파티션에 대한 데이터 로그 내에서 각 메시지 키에 대해 최소한 마지막으로 알려진 값을 항상 유지하도록 합니다.
  • 애플리케이션 충돌 또는 시스템 오류 후 상태 복원 또는 운영 유지 관리 중 애플리케이션 재시작 후 캐시 다시 로드와 같은 사용 사례 및 시나리오를 다룹니다.
  • 로그 압축은 거친 시간 기반 보존이 아니라 더 세분화된 레코드당 보존을 제공하는 메커니즘입니다.
  • 아이디어는 동일한 기본 키로 최신 업데이트가 있는 레코드를 선택적으로 제거하는 것입니다.

카프카 테스트

주제 만들기

  • 이제 하나의 Kafka 서버가 실행 중인 경우(독립 실행형 설정) 복제 요소 1로 이름이 "test.topic"인 주제를 만듭니다.
  • 2개 이상의 Kafka 서버가 실행 중인 클러스터가 있는 경우 그에 따라 복제 요소를 증가시켜 데이터 가용성을 높이고 내결함성 시스템처럼 작동할 수 있습니다.
  • C:\kafka_2.11–0.9.0.0\bin\windows 위치에서 새 명령 프롬프트를 열고 다음 명령을 입력하고 Enter 키를 누릅니다.
kafka-topics.bat -- --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test.topic 생성

생산자 만들기

  • C:\kafka_2.11–0.9.0.0\bin\windows 위치에서 새 명령 프롬프트를 엽니다.
  • 생산자를 시작하려면 다음 명령을 입력하십시오.

kafka-console-producer.bat — broker-list localhost:9092 --topic test.topic

소비자 시작

  • C:\kafka_2.11–0.9.0.0\bin\windows와 같은 위치에서 새 명령 프롬프트를 다시 엽니다.
  • 이제 다음 명령을 입력하여 소비자를 시작합니다.

kafka-console-consumer.bat — zookeeper localhost:2181 — topic test.topic

  • 이제 두 개의 명령 창에서 생산자와 소비자를 실행합니다.
  • 생산자 명령 프롬프트에 아무 것도 입력하고 Enter 키를 누르면 다른 소비자 명령 프롬프트에서 메시지를 볼 수 있어야 합니다.

기타 유용한 Kafka 명령

  • 목록 주제:
kafka-topics.bat --list --zookeeper localhost:2181
  • 주제 설명
kafka-topics.bat --describe --zookeeper localhost:2181 --topic [주제 이름]
  • 처음부터 메시지 읽기

kafka-console-consumer.bat --zookeeper localhost:2181 --topic [Topic Name] --from-beginning

  • 주제 삭제

kafka-run-class.bat kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181

데이터 디렉토리

데이터 디렉토리를 tmp로 설정하고 5개의 파티션이 있는 송장이라는 주제를 생성했다고 가정합니다. 데이터 디렉토리의 구조는 다음과 같습니다.

주제 - 5개의 파티션이 있는 인보이스

주제 인보이스의 추가 구조는 다음과 같습니다.

송장 주제

파일 형식:

  • 인덱스
  • 통나무
  • 타임 인덱스

출처 : https://mail-narayank.medium.com/kafka-architecture-internal-d0b3334d1df

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.