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는 메모리가 회수될 때 성능 저하 없이 모든 여유 메모리를 디스크 캐싱으로 기꺼이 전환 합니다.
일괄 처리
- 설계에 따른 병렬 쓰기 및 읽기
- 일괄 처리는 생산자에서 브로커로 또는 브로커에서 파일 시스템으로 데이터 전송을 위한 주요 버스터입니다.
파일 보내기의 영향을 이해하려면 파일에서 소켓으로 데이터를 전송하기 위한 공통 데이터 경로를 이해하는 것이 중요합니다.
- 운영 체제는 디스크에서 커널 공간의 페이지 캐시로 데이터를 읽습니다.
- 응용 프로그램은 커널 공간에서 사용자 공간 버퍼로 데이터를 읽습니다.
- 응용 프로그램은 데이터를 다시 커널 공간에 소켓 버퍼에 씁니다.
- 운영 체제는 소켓 버퍼에서 네트워크를 통해 전송되는 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
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit