RHEL에서 Apache Kafka에 Streams 사용
Red Hat Enterprise Linux에서 Apache Kafka 2.8용 Streams 배포 구성 및 관리
초록
머리말 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat 문서에 관한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
문서 개선을 위한 의견에 감사드립니다.
개선 사항을 제안하려면 Jira 문제를 열고 제안된 변경 사항을 설명합니다. 귀하의 요청을 신속하게 처리할 수 있도록 가능한 한 자세한 정보를 제공하십시오.
사전 요구 사항
-
Red Hat 고객 포털 계정이 있어야 합니다. 이 계정을 사용하면 Red Hat Jira Software 인스턴스에 로그인할 수 있습니다.
계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.
프로세스
- 다음: 생성 문제를 클릭합니다.
- 요약 텍스트 상자에 문제에 대한 간략한 설명을 입력합니다.
설명 텍스트 상자에 다음 정보를 입력합니다.
- 문제를 발견한 페이지의 URL입니다.
-
문제에 대한 자세한 설명입니다.
다른 필드에 있는 정보는 기본값에 따라 그대로 둘 수 있습니다.
- 보고자 이름을 추가합니다.
- 생성 을 클릭하여 Jira 문제를 문서 팀에 제출합니다.
피드백을 제공하기 위해 시간을 내어 주셔서 감사합니다.
1장. Apache Kafka용 스트림 개요 링크 복사링크가 클립보드에 복사되었습니다!
AMQ 스트림은 Apache Kafka 프로젝트를 기반으로 확장성이 뛰어난 분산 고성능 데이터 스트리밍을 지원합니다.
주요 구성 요소는 다음과 같습니다.
- Kafka 브로커
- 클라이언트 생성에서 클라이언트 사용으로 레코드 전달을 담당하는 메시징 브로커입니다.
- Kafka Streams API
- 스트림 프로세서 애플리케이션 작성을 위한 API입니다.
- 생산자 및 소비자 API
- Kafka 브로커 간에 메시지를 생성하고 사용하기 위한 Java 기반 API입니다.
- Kafka Bridge
- Apache Kafka Kafka 브리지의 스트림은 HTTP 기반 클라이언트가 Kafka 클러스터와 상호 작용할 수 있는 RESTful 인터페이스를 제공합니다.
- Kafka Connect
- Connector 플러그인을 사용하여 Kafka 브로커와 기타 시스템 간에 데이터를 스트리밍하는 툴킷입니다.
- Kafka MirrorMaker
- 데이터 센터 내 또는 여러 개의 Kafka 클러스터 간에 데이터를 복제합니다.
- Kafka Exporter
- 모니터링을 위해 Kafka 메트릭 데이터 추출에 사용되는 내보내기입니다.
Kafka 브로커의 클러스터는 이러한 모든 구성 요소를 연결하는 허브입니다.
그림 1.1. Apache Kafka 아키텍처용 스트림
1.1. Kafka 브리지를 사용하여 Kafka 클러스터 연결 링크 복사링크가 클립보드에 복사되었습니다!
Streams for Apache Kafka Bridge API를 사용하여 소비자를 생성 및 관리하고 기본 Kafka 프로토콜 대신 HTTP를 통해 레코드를 보내고 받을 수 있습니다.
Kafka 브리지를 설정하면 Kafka 클러스터에 대한 HTTP 액세스를 구성합니다. 그런 다음 Kafka Bridge를 사용하여 클러스터에서 메시지를 생성 및 사용하고 REST 인터페이스를 통해 다른 작업을 수행할 수 있습니다.
1.2. 문서 규칙 링크 복사링크가 클립보드에 복사되었습니다!
user-replaced 값
교체 가능 값이라고도 하는 사용자 교체 값은 굵은 대괄호(< >)로 표시됩니다. 밑줄( _)은 다중 단어 값에 사용됩니다. 값이 코드 또는 명령을 참조하는 경우 monospace 도 사용됩니다.
예를 들어 다음 코드는 < bootstrap_address > 및 < topic_name >을 고유한 주소와 주제 이름으로 교체해야 함을 보여줍니다.
bin/kafka-console-consumer.sh --bootstrap-server <broker_host>:<port> --topic <topic_name> --from-beginning
bin/kafka-console-consumer.sh --bootstrap-server <broker_host>:<port> --topic <topic_name> --from-beginning
2장. FIPS 지원 링크 복사링크가 클립보드에 복사되었습니다!
연방 정보 처리 표준(FIPS)은 컴퓨터 보안 및 상호 운용성을 위한 표준입니다. Apache Kafka용 Streams와 함께 FIPS를 사용하려면 시스템에 FIPS 호환 OpenJDK(Open Java Development Kit)가 설치되어 있어야 합니다. RHEL 시스템이 FIPS가 활성화된 경우 OpenJDK는 Apache Kafka용 Streams를 실행할 때 FIPS 모드로 자동 전환합니다. 이렇게 하면 Apache Kafka용 Streams가 OpenJDK에서 제공하는 FIPS 호환 보안 라이브러리를 사용합니다.
최소 암호 길이
FIPS 모드에서 실행하는 경우 SCRAM-SHA-512 암호는 32자 이상이어야 합니다. 암호 길이 32자 미만의 사용자 지정 구성이 있는 Kafka 클러스터가 있는 경우 구성을 업데이트해야 합니다. 암호가 32자보다 짧은 사용자가 있는 경우 필요한 길이로 암호를 다시 생성해야 합니다.
2.1. FIPS 모드가 활성화된 Apache Kafka용 스트림 설치 링크 복사링크가 클립보드에 복사되었습니다!
RHEL에 Apache Kafka용 Streams를 설치하기 전에 FIPS 모드를 활성화합니다. 나중에 FIPS 모드를 활성화하는 대신 FIPS 모드가 활성화된 RHEL을 설치하는 것이 좋습니다. 설치 중에 FIPS 모드를 활성화하면 시스템이 FIPS 승인 알고리즘 및 지속적인 모니터링 테스트로 모든 키를 생성합니다.
FIPS 모드에서 RHEL을 실행하는 경우 Apache Kafka 구성에 대한 Streams가 FIPS와 호환되는지 확인해야 합니다. 또한 Java 구현도 FIPS와 호환되어야 합니다.
FIPS 모드에서 RHEL에서 Apache Kafka용 Streams를 실행하려면 FIPS 호환 JDK가 필요합니다.
프로세스
FIPS 모드에서 RHEL을 설치합니다.
자세한 내용은 RHEL 문서의 보안 강화 정보를 참조하십시오.
- Apache Kafka용 Streams 설치를 진행합니다.
FIPS 호환 알고리즘 및 프로토콜을 사용하도록 Apache Kafka의 Streams를 구성합니다.
사용하는 경우 다음 구성이 호환되는지 확인합니다.
- SSL 암호화 제품군 및 TLS 버전은 JDK 프레임워크에서 지원해야 합니다.
- SCRAM-SHA-512 암호는 최소 32자 이상이어야 합니다.
설치 환경과 Apache Kafka 구성용 스트림이 FIPS 요구 사항이 변경됨에 따라 계속 호환되는지 확인합니다.
3장. 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka의 스트림은 Kafka 구성 요소에 대한 설치 아티팩트가 포함된 ZIP 파일에 배포됩니다.
Kafka Bridge에는 별도의 설치 파일이 있습니다. Kafka 브리지 설치 및 사용에 대한 자세한 내용은 Apache Kafka Kafka 브리지용 Streams 사용을 참조하십시오.
3.1. 설치 환경 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka용 스트림은 Red Hat Enterprise Linux에서 실행됩니다. 호스트(노드)는 물리적 또는 VM(가상 머신)일 수 있습니다. Kafka 구성 요소를 설치하려면 Apache Kafka용 Streams와 함께 제공되는 설치 파일을 사용합니다. 단일 노드 또는 다중 노드 환경에 Kafka를 설치할 수 있습니다.
- 단일 노드 환경
- 단일 노드 Kafka 클러스터는 단일 호스트에서 Kafka 구성 요소의 인스턴스를 실행합니다. 이 구성은 프로덕션 환경에 적합하지 않습니다.
- 다중 노드 환경
- 다중 노드 Kafka 클러스터는 여러 호스트에서 Kafka 구성 요소의 인스턴스를 실행합니다.
별도의 호스트에서 Kafka 및 Kafka Connect와 같은 기타 Kafka 구성 요소를 실행하는 것이 좋습니다. 이러한 방식으로 구성 요소를 실행하면 각 구성 요소를 보다 쉽게 유지 관리하고 업그레이드할 수 있습니다.
Kafka 클라이언트는 bootstrap.servers 구성 속성을 사용하여 Kafka 클러스터에 대한 연결을 설정합니다. 예를 들어 Kafka Connect 구성 속성에 Kafka 브로커가 실행 중인 호스트의 호스트 이름과 포트를 지정하는 bootstrap.servers 값이 포함되어야 합니다. Kafka 클러스터가 여러 Kafka 브로커가 있는 두 개 이상의 호스트에서 실행 중인 경우 각 브로커의 호스트 이름과 포트를 지정합니다. 각 Kafka 브로커는 node.id 로 식별됩니다.
3.1.1. 데이터 스토리지 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
효율적인 데이터 스토리지 인프라는 Apache Kafka에 대한 Streams의 최적의 성능에 필수적입니다.
블록 스토리지가 필요합니다. NFS와 같은 파일 스토리지는 Kafka에서 작동하지 않습니다.
블록 스토리지에 대해 다음 옵션 중 하나를 선택합니다.
- Amazon Elastic Block Store(EBS)와 같은 클라우드 기반 블록 스토리지 솔루션
- 로컬 스토리지
- 파이버 채널 또는 iSCSI와 같은 프로토콜에서 액세스하는 SAN(Storage Area Network) 볼륨
3.1.2. 파일 시스템 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 메시지를 저장하기 위해 파일 시스템을 사용합니다. Apache Kafka의 스트림은 Kafka와 함께 일반적으로 사용되는 XFS 및 ext4 파일 시스템과 호환됩니다. 파일 시스템을 선택하고 설정할 때 배포의 기본 아키텍처 및 요구 사항을 고려하십시오.
자세한 내용은 Kafka 문서 의 파일 시스템 선택을 참조하십시오.
3.1.3. Apache Kafka 및 Zoo Cryostat 스토리지 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka 및 Zoo Cryostat에 대해 별도의 디스크를 사용합니다.
Kafka는 여러 디스크 또는 볼륨의 데이터 스토리지 구성인 JBOD(디스크 Bunch) 스토리지를 지원합니다. JBOD는 Kafka 브로커에 대해 향상된 데이터 스토리지를 제공합니다. 또한 성능을 향상시킬 수 있습니다.
SSD(Solid-State Drive)는 필수는 아니지만 여러 주제로 데이터를 보내고 비동기적으로 수신하는 대규모 클러스터에서 Kafka의 성능을 향상시킬 수 있습니다. SSD는 Zoo Cryostat에서 특히 효과적이며 빠르고 짧은 대기 시간 데이터 액세스가 필요합니다.
Kafka 및 Zoo Cryostat 둘 다 데이터 복제가 내장되어 있기 때문에 복제된 스토리지를 프로비저닝할 필요가 없습니다.
3.2. Apache Kafka용 스트림 다운로드 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka용 Streams의 ZIP 파일 배포는 Red Hat 웹 사이트에서 다운로드할 수 있습니다. Apache Kafka 소프트웨어 다운로드 페이지 에서는 Streams for Apache Kafka에서 최신 버전의 Apache Kafka를 다운로드할 수 있습니다.
-
Kafka 및 기타 Kafka 구성 요소의 경우
amq-streams-<version>-bin.zip 파일을 다운로드합니다. Kafka Bridge의 경우
amq-streams-<version>-bridge-bin.zip파일을 다운로드합니다.설치 지침은 Apache Kafka Kafka 브리지용 스트림 사용을 참조하십시오.
3.3. Kafka 설치 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka ZIP 파일의 Streams를 사용하여 Red Hat Enterprise Linux에 Kafka를 설치합니다. 단일 노드 또는 다중 노드 환경에 Kafka를 설치할 수 있습니다. 이 절차에서는 단일 Kafka 브로커 및 Zoo Cryostat 인스턴스가 단일 호스트(노드)에 설치됩니다.
Apache Kafka 설치 파일의 Streams에는 Kafka Connect, Kafka MirrorMaker 2, Kafka Bridge와 같은 다른 Kafka 구성 요소를 실행하기 위한 바이너리가 포함되어 있습니다. 단일 노드 환경에서는 Kafka를 설치한 동일한 호스트에서 이러한 구성 요소를 실행할 수 있습니다. 그러나 설치 파일을 추가하고 별도의 호스트에서 다른 Kafka 구성 요소를 실행하는 것이 좋습니다.
Apache Zoo Cryostat는 신뢰할 수 있는 분산 조정을 위해 클러스터 조정 서비스를 제공합니다. Kafka는 구성 데이터를 저장하고 클러스터 조정을 위해 Zoo Cryostat를 사용합니다. Kafka를 실행하기 전에 Zoo Cryostat 클러스터를 준비해야 합니다.
다중 노드 환경을 사용하는 경우 두 개 이상의 호스트에 Kafka 브로커 및 Zoo Cryostat 인스턴스를 설치합니다. 각 호스트에 대해 설치 단계를 반복합니다. 각 Zoo Cryostat 인스턴스 및 브로커를 식별하려면 구성에 고유한 ID를 추가합니다. 자세한 내용은 4장. 다중 노드 환경 실행의 내용을 참조하십시오.
사전 요구 사항
- 설치 파일을 다운로드했습니다.
- Red Hat Enterprise Linux 릴리스 노트의 Streams for Apache Kafka 2.8에서 지원되는 구성을 검토했습니다.
-
Red Hat Enterprise Linux에 admin(
root) 사용자로 로그인했습니다.
프로세스
호스트에 Zoo Cryostat와 함께 Kafka를 설치합니다.
새
kafka사용자 및 그룹을 추가합니다.groupadd kafka useradd -g kafka kafka passwd kafka
groupadd kafka useradd -g kafka kafka passwd kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow amq-streams-<version>-bin.zip파일의 내용을/opt/kafka디렉토리로 추출합니다.unzip amq-streams-<version>-bin.zip -d /opt mv /opt/kafka*redhat* /opt/kafka
unzip amq-streams-<version>-bin.zip -d /opt mv /opt/kafka*redhat* /opt/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/kafka디렉터리의 소유권을kafka사용자로 변경합니다.chown -R kafka:kafka /opt/kafka
chown -R kafka:kafka /opt/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Zoo Cryostat 데이터를 저장하기 위한
/var/lib/zookeeper디렉토리를 생성하고 소유권을kafka사용자로 설정합니다.mkdir /var/lib/zookeeper chown -R kafka:kafka /var/lib/zookeeper
mkdir /var/lib/zookeeper chown -R kafka:kafka /var/lib/zookeeperCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 데이터를 저장하기 위한
/var/lib/kafka디렉터리를 생성하고 소유권을kafka사용자로 설정합니다.mkdir /var/lib/kafka chown -R kafka:kafka /var/lib/kafka
mkdir /var/lib/kafka chown -R kafka:kafka /var/lib/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 Kafka의 기본 구성을 단일 노드 클러스터로 실행할 수 있습니다.
설치를 사용하여 동일한 호스트에서 Kafka Connect와 같은 다른 Kafka 구성 요소를 실행할 수도 있습니다.
다른 구성 요소를 실행하려면 구성 요소 구성에서
bootstrap.servers속성을 사용하여 Kafka 브로커에 연결할 호스트 이름과 포트를 지정합니다.동일한 호스트에서 단일 Kafka 브로커를 가리키는 부트스트랩 서버 구성의 예
bootstrap.servers=localhost:9092
bootstrap.servers=localhost:9092Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러나 별도의 호스트에 Kafka 구성 요소를 설치하고 실행하는 것이 좋습니다.
(선택 사항) 별도의 호스트에 Kafka 구성 요소를 설치합니다.
-
각 호스트의
/opt/kafka디렉터리에 설치 파일을 추출하고 설치하는 단계를 반복합니다. Kafka 브로커를 실행하는 다중 노드 환경의 호스트(또는 멀티 노드 환경의 호스트)에 구성 요소를 연결하는
bootstrap.servers구성을 추가합니다.다른 호스트의 Kafka 브로커를 가리키는 부트스트랩 서버 구성의 예
bootstrap.servers=kafka0.<host_ip_address>:9092,kafka1.<host_ip_address>:9092,kafka2.<host_ip_address>:9092
bootstrap.servers=kafka0.<host_ip_address>:9092,kafka1.<host_ip_address>:9092,kafka2.<host_ip_address>:9092Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka Connect,MirrorMaker 2 및 Kafka 브리지 에 대해 이 구성을 사용할 수 있습니다.
-
각 호스트의
3.4. 단일 노드 Kafka 클러스터 실행 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 동일한 호스트에서 실행 중인 단일 Apache Zookafka 노드와 단일 Apache Kafka 노드로 구성된 Apache Kafka 클러스터의 기본 스트림을 실행하는 방법을 보여줍니다. 기본 구성 파일은 Kafka에 사용됩니다.
Apache Kafka 클러스터용 단일 노드 스트림은 안정성과 고가용성을 제공하지 않으며 개발 목적으로만 적합합니다.
사전 요구 사항
- Apache Kafka의 스트림이 호스트에 설치되어 있습니다.
클러스터 실행
Kafka 클러스터의 고유 ID를 생성합니다.
kafka-storage툴을 사용하여 이 작업을 수행할 수 있습니다./opt/kafka/bin/kafka-storage.sh random-uuid
/opt/kafka/bin/kafka-storage.sh random-uuidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령에서 ID를 반환합니다.
참고KRaft 모드에서는 클러스터 ID가 필요합니다.
Kafka 구성 파일
/opt/kafka/config/server.properties를 편집합니다.log.dirs옵션을/var/lib/kafka/:로 설정합니다.log.dirs=/var/lib/kafka/
log.dirs=/var/lib/kafka/Copy to Clipboard Copied! Toggle word wrap Toggle overflow kafka사용자로 전환합니다.su - kafka
su - kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 시작:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
process ID kafka.Kafka /opt/kafka/config/server.properties
process ID kafka.Kafka /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. 주제에서 메시지 전송 및 수신 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Kafka 콘솔 생산자 및 소비자 클라이언트를 시작하고 이를 사용하여 여러 메시지를 보내고 수신하는 방법을 설명합니다.
새 주제는 1단계에서 자동으로 생성됩니다. 주제 자동 생성은 auto.create.topics.enable 구성 속성을 사용하여 제어됩니다(기본적으로 true 로 설정). 또는 클러스터를 사용하기 전에 주제를 구성하고 생성할 수 있습니다. 자세한 내용은 항목을 참조하십시오.
프로세스
Kafka 콘솔 생산자를 시작하고 새 항목에 메시지를 보내도록 구성합니다.
/opt/kafka/bin/kafka-console-producer.sh --broker-list <bootstrap_address> --topic <topic-name>
/opt/kafka/bin/kafka-console-producer.sh --broker-list <bootstrap_address> --topic <topic-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-topic
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-topicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 콘솔에 여러 메시지를 입력합니다. Enter 를 눌러 각 개별 메시지를 새 주제로 보냅니다.
>message 1 >message 2 >message 3 >message 4
>message 1 >message 2 >message 3 >message 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka에서 새 주제를 자동으로 생성하면 주제가 존재하지 않는다는 경고가 표시될 수 있습니다.
WARN Error while fetching metadata with correlation id 39 : {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)WARN Error while fetching metadata with correlation id 39 : {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 추가 메시지를 보낸 후에는 경고가 다시 나타나지 않아야 합니다.
새 터미널 창에서 Kafka 콘솔 소비자를 시작하고 새 주제의 시작 부분에서 메시지를 읽도록 구성합니다.
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server <bootstrap_address> --topic <topic-name> --from-beginning
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server <bootstrap_address> --topic <topic-name> --from-beginningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 들어오는 메시지가 소비자 콘솔에 표시됩니다.
- 생산자 콘솔로 전환하고 추가 메시지를 보냅니다. 소비자 콘솔에 표시되는지 확인합니다.
- Kafka 콘솔 생산자를 중지한 다음 Ctrl+C 를 눌러 소비자를 중지합니다.
3.6. Apache Kafka 서비스의 스트림 중지 링크 복사링크가 클립보드에 복사되었습니다!
스크립트를 실행하여 Kafka 및 Zoo Cryostat 서비스를 중지할 수 있습니다. Kafka 및 Zoo Cryostat 서비스에 대한 모든 연결이 종료됩니다.
사전 요구 사항
- Apache Kafka의 스트림이 호스트에 설치되어 있습니다.
- Zookeeper 및 Kafka가 실행 중입니다.
프로세스
Kafka 브로커를 중지합니다.
su - kafka /opt/kafka/bin/kafka-server-stop.sh
su - kafka /opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커가 중지되었는지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Zoo Cryostat를 중지합니다.
su - kafka /opt/kafka/bin/zookeeper-server-stop.sh
su - kafka /opt/kafka/bin/zookeeper-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. 다중 노드 환경 실행 링크 복사링크가 클립보드에 복사되었습니다!
다중 노드 환경은 클러스터로 작동하는 여러 노드로 구성됩니다. 브로커 간 복제를 포함하여 복제된 Zoo Cryostat 노드 클러스터와 브로커 노드 클러스터를 보유할 수 있습니다.
다중 노드 환경은 안정성과 가용성을 제공합니다.
4.1. 다중 노드 Zoo Cryostat 클러스터 실행 링크 복사링크가 클립보드에 복사되었습니다!
Zoo Cryostat를 다중 노드 클러스터로 구성하고 실행합니다.
사전 요구 사항
- Apache Kafka용 스트림은 Zoo Cryostat 클러스터 노드로 사용되는 모든 호스트에 설치됩니다.
클러스터 실행
/var/lib/zookeeper/에myid파일을 만듭니다. 첫 번째 Zoo Cryostat 노드에 ID1을, 두 번째 Zoo Cryostat 노드의 경우2를 입력합니다.su - kafka echo "<NodeID>" > /var/lib/zookeeper/myid
su - kafka echo "<NodeID>" > /var/lib/zookeeper/myidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
su - kafka echo "1" > /var/lib/zookeeper/myid
su - kafka echo "1" > /var/lib/zookeeper/myidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 Zoo Cryostat
/opt/kafka/config/zookeeper.properties구성 파일을 편집합니다.-
dataDir옵션을/var/lib/zookeeper/로 설정합니다. -
initLimit및syncLimit옵션을 구성합니다. -
reconfigEnabled및standaloneEnabled옵션을 구성합니다. 모든 Zoo Cryostat 노드 목록을 추가합니다. 목록에는 현재 노드도 포함되어야 합니다.
5명의 멤버가 있는 Zoo Cryostat 클러스터의 노드 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
기본 설정 파일로 Zoo Cryostat를 시작합니다.
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Zoo Cryostat가 실행 중인지 확인합니다.
jcmd | grep zookeeper
jcmd | grep zookeeperCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
number org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/kafka/config/zookeeper.properties
number org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 클러스터의 모든 노드에서 이 절차를 반복합니다.
ncat유틸리티를 사용하여 각 노드에stat명령을 전송하여 모든 노드가 클러스터의 멤버인지 확인합니다.ncat stat를 사용하여 노드 상태 확인
echo stat | ncat localhost 2181
echo stat | ncat localhost 2181Copy to Clipboard Copied! Toggle word wrap Toggle overflow stat과 같은 4자단어 명령을 사용하려면zookeeper.properties에서4lw.commands.whitelist=*를 지정해야 합니다.출력은 노드가
리더또는 후속 항목임을보여줍니다.ncat 명령의 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 다중 노드 Kafka 클러스터 실행 링크 복사링크가 클립보드에 복사되었습니다!
Kafka를 다중 노드 클러스터로 구성하고 실행합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Zoo Cryostat 클러스터가 구성되어 실행 중입니다.
클러스터 실행
Apache Kafka 클러스터용 Streams의 각 Kafka 브로커에 대해 다음을 수행합니다.
다음과 같이
/opt/kafka/config/server.propertiesKafka 구성 파일을 편집합니다.-
첫 번째 브로커의 경우
broker.id필드를0으로, 두 번째 브로커의 경우1을 0으로 설정합니다. -
Zookeeper
.connect 옵션에서 Zoo Cryostat에 연결하기 위한세부 정보를 구성합니다. - Kafka 리스너를 구성합니다.
커밋 로그를
logs.dir디렉터리에 저장해야 하는 디렉터리를 설정합니다.여기에서 Kafka 브로커의 구성 예가 표시됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 각 Kafka 브로커가 동일한 하드웨어에서 실행되는 일반적인 설치에서는
broker.id구성 속성만 각 브로커 구성마다 다릅니다.
-
첫 번째 브로커의 경우
기본 구성 파일을 사용하여 Kafka 브로커를 시작합니다.
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커가 실행 중인지 확인합니다.
jcmd | grep Kafka
jcmd | grep KafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
process ID kafka.Kafka /opt/kafka/config/server.properties
process ID kafka.Kafka /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow ncat유틸리티를 사용하여dump명령을 Zoo Cryostat 노드 중 하나로 전송하여 모든 노드가 Kafka 클러스터의 멤버인지 확인합니다.ncat 덤프를 사용하여 Zoo Cryostat에 등록된 모든 Kafka 브로커를 확인합니다.
echo dump | ncat zoo1.my-domain.com 2181
echo dump | ncat zoo1.my-domain.com 2181Copy to Clipboard Copied! Toggle word wrap Toggle overflow dump와 같은 4자 단어 명령을 사용하려면zookeeper.properties에서4lw.commands.whitelist=*를 지정해야 합니다.출력에 방금 구성하고 시작한 모든 Kafka 브로커가 포함되어야 합니다.
3개의 노드가 있는 Kafka 클러스터의 ncat 명령의 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. Kafka 브로커의 정상 롤링 재시작 수행 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 다중 노드 클러스터에서 브로커를 정상적으로 다시 시작하는 방법을 보여줍니다. 일반적으로 Kafka 클러스터 구성 속성을 업그레이드하거나 변경하는 경우 롤링 재시작이 필요합니다.
일부 브로커 구성은 브로커를 다시 시작할 필요가 없습니다. 자세한 내용은 Apache Kafka 문서 의 브로커 구성 업데이트를 참조하십시오.
브로커를 다시 시작한 후 복사되지 않은 주제 파티션을 확인하여 복제본 파티션이 감지되었는지 확인합니다.
가용성 손실 없이 정상 재시작을 수행하려면 주제를 복제하고 최소 복제본(min.insync.replicas) 복제본이 동기화되어 있는지 확인합니다. min.insync.replicas 구성은 쓰기가 성공으로 간주되기 위해 쓰기를 승인해야 하는 최소 복제본 수를 결정합니다.
다중 노드 클러스터의 경우 표준 접근 방식에서는 3개 이상의 주제 복제 인수와 최소 3개의 in-sync 복제본 수가 복제 요소보다 1개로 설정된 것입니다. 데이터 지속성을 위해 생산자 구성에서 acks=all 을 사용하는 경우 다음 브로커를 다시 시작하기 전에 재시작한 모든 파티션과 동기화되어 있는지 확인합니다.
모든 파티션이 동일한 브로커에 있으므로 다시 시작하는 동안 단일 노드 클러스터를 사용할 수 없습니다.
사전 요구 사항
- Zoo Cryostat 클러스터가 구성되어 실행 중입니다.
Kafka 클러스터가 예상대로 작동하고 있습니다.
복제되지 않은 파티션 또는 브로커 작업에 영향을 미치는 기타 문제를 확인합니다. 이 절차의 단계에서는 복제되지 않은 파티션을 확인하는 방법을 설명합니다.
프로세스
각 Kafka 브로커에서 다음 단계를 수행합니다. 다음 단계로 이동하기 전에 첫 번째 브로커의 단계를 완료합니다. 활성 컨트롤러의 마지막 단계를 브로커에서 수행합니다. 그러지 않으면 재시작 시 활성 컨트롤러를 여러 번 변경해야 합니다.
Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 완료 후 재시작해야 하는 브로커 구성을 변경합니다.
자세한 내용은 다음을 참조하십시오.
Kafka 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
process ID kafka.Kafka /opt/kafka/config/server.properties
process ID kafka.Kafka /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow ncat유틸리티를 사용하여dump명령을 Zoo Cryostat 노드 중 하나로 전송하여 모든 노드가 Kafka 클러스터의 멤버인지 확인합니다.ncat 덤프를 사용하여 Zoo Cryostat에 등록된 모든 Kafka 브로커를 확인합니다.
echo dump | ncat zoo1.my-domain.com 2181
echo dump | ncat zoo1.my-domain.com 2181Copy to Clipboard Copied! Toggle word wrap Toggle overflow dump와 같은 4자 단어 명령을 사용하려면zookeeper.properties에서4lw.commands.whitelist=*를 지정해야 합니다.출력에 시작한 Kafka 브로커가 포함되어야 합니다.
3개의 노드가 있는 Kafka 클러스터의 ncat 명령의 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 브로커의 파티션이 0이 될 때까지 기다립니다. 명령줄에서 확인하거나 메트릭을 사용할 수 있습니다.
--under-replicated-partitions매개변수와 함께kafka-topics.sh명령을 사용합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <bootstrap_address> --describe --under-replicated-partitions
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <bootstrap_address> --describe --under-replicated-partitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 클러스터에 복제되지 않은 파티션이 포함된 주제 목록을 제공합니다.
복제되지 않은 파티션의 주제
Topic: topic3 Partition: 4 Leader: 2 Replicas: 2,3 Isr: 2 Topic: topic3 Partition: 5 Leader: 3 Replicas: 1,2 Isr: 1 Topic: topic1 Partition: 1 Leader: 3 Replicas: 1,3 Isr: 3 # …
Topic: topic3 Partition: 4 Leader: 2 Replicas: 2,3 Isr: 2 Topic: topic3 Partition: 5 Leader: 3 Replicas: 1,2 Isr: 1 Topic: topic1 Partition: 1 Leader: 3 Replicas: 1,3 Isr: 3 # …Copy to Clipboard Copied! Toggle word wrap Toggle overflow ISR(동기화 복제본) 수가 복제본 수보다 작으면 복제 아래에 있는 파티션이 나열됩니다. 목록이 반환되지 않으면 복제되지 않은 파티션이 없습니다.
UnderReplicated Cryostats 메트릭을사용합니다.kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
kafka.server:type=ReplicaManager,name=UnderReplicatedPartitionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 지표는 복제본이 캡처되지 않은 파티션 수를 제공합니다. count가 0이 될 때까지 기다립니다.
작은 정보주제의 복제본이 하나 이상 있는 경우 Kafka Exporter 를 사용하여 경고를 생성합니다.
다시 시작할 때 로그 확인
브로커가 시작되지 않으면 애플리케이션 로그에 정보가 있는지 확인합니다. 브로커 종료 상태를 확인하고 /opt/kafka/logs/server.log 애플리케이션 로그에서 다시 시작할 수도 있습니다.
브로커의 성공적인 종료를 위해 로그
브로커를 성공적으로 재시작하기 위해 로그
... ...
# ...
[2022-06-08 14:39:35,245] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
# ...
5장. Apache Kafka용 스트림 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 및 Zoo Cryostat 속성 파일을 사용하여 Apache Kafka용 Streams를 구성합니다.
- ZooKeeper
-
/kafka/config/zookeeper.properties - Kafka
-
/kafka/config/server.properties
속성 파일은 Java 형식으로 되어 있으며 각 속성은 다음 형식으로 별도의 행에 있습니다.
<option> = <value>
<option> = <value>
# 또는 ! 로 시작하는 행은 주석으로 처리되며 Apache Kafka 구성 요소의 Streams에서 무시됩니다.
This is a comment
# This is a comment
값은 줄 바꿈 / line 반환 바로 앞에 \ 를 사용하여 여러 줄로 분할할 수 있습니다.
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="bob" \
password="bobs-password";
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="bob" \
password="bobs-password";
속성 파일의 변경 사항을 저장한 후에는 Kafka 브로커 또는 Zoo Cryostat를 다시 시작해야 합니다. 다중 노드 환경에서는 클러스터의 각 노드에서 프로세스를 반복해야 합니다.
5.1. 표준 Kafka 구성 속성 사용 링크 복사링크가 클립보드에 복사되었습니다!
표준 Kafka 구성 속성을 사용하여 Kafka 구성 요소를 구성합니다.
속성은 다음 Kafka 구성 요소의 구성을 제어하고 조정하는 옵션을 제공합니다.
- 브로커
- 주제
- 생산자, 소비자 및 관리 클라이언트
- Kafka Connect
- Kafka Streams
브로커 및 클라이언트 매개변수에는 권한 부여, 인증 및 암호화를 구성하는 옵션이 포함되어 있습니다.
Kafka 구성 속성 및 속성을 사용하여 배포를 조정하는 방법에 대한 자세한 내용은 다음 가이드를 참조하십시오.
5.2. 환경 변수에서 구성 값 로드 링크 복사링크가 클립보드에 복사되었습니다!
환경 변수 구성 공급자 플러그인을 사용하여 환경 변수에서 구성 데이터를 로드합니다. 예를 들어 환경 변수 구성 공급자를 사용하여 환경 변수에서 인증서 또는 JAAS 구성을 로드할 수 있습니다.
공급자를 사용하여 생산자 및 소비자를 포함하여 모든 Kafka 구성 요소에 대한 구성 데이터를 로드할 수 있습니다. 예를 들어 공급자를 사용하여 Kafka Connect 커넥터 구성에 대한 인증 정보를 제공합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
환경 변수 구성 공급자 JAR 파일.
JAR 파일은 Streams for Apache Kafka 아카이브 에서 사용할 수 있습니다.
프로세스
-
Kafka
libs디렉터리에 환경 변수 구성 공급자 JAR 파일을 추가합니다. Kafka 구성 요소의 구성 속성 파일에서 환경 변수 구성 공급자를 초기화합니다. 예를 들어 Kafka 공급자를 초기화하려면
server.properties파일에 구성을 추가합니다.환경 변수 구성 공급자를 활성화하는 구성
config.providers.env.class=org.apache.kafka.common.config.provider.EnvVarConfigProvider
config.providers.env.class=org.apache.kafka.common.config.provider.EnvVarConfigProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 환경 변수에서 데이터를 로드하려면 속성 파일에 구성을 추가합니다.
환경 변수에서 데이터를 로드하는 구성
option=${env:<MY_ENV_VAR_NAME>}option=${env:<MY_ENV_VAR_NAME>}Copy to Clipboard Copied! Toggle word wrap Toggle overflow MY_ENV_VAR_NAME과 같은 대문자 또는 대문자 환경 변수 이름 지정 규칙을 사용합니다.- 변경 사항을 저장합니다.
Kafka 구성 요소를 다시 시작합니다.
멀티 노드 클러스터에서 브로커를 다시 시작하는 방법에 대한 자세한 내용은 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
5.3. Zoo Cryostat 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 구성 데이터를 저장하고 클러스터 조정을 위해 Zoo Cryostat를 사용합니다. 복제된 Zoo Cryostat 인스턴스의 클러스터를 실행하는 것이 좋습니다.
5.3.1. 기본 설정 링크 복사링크가 클립보드에 복사되었습니다!
가장 중요한 Zoo Cryostat 구성 옵션은 다음과 같습니다.
tickTime- Zookeeper의 기본 시간 단위(밀리초)입니다. 하트비트 및 세션 시간 초과에 사용됩니다. 예를 들어 최소 세션 시간 제한은 두 틱입니다.
dataDir-
Zoo Cryostat가 메모리 내 데이터베이스의 트랜잭션 로그와 스냅샷을 저장하는 디렉터리입니다. 설치 중에 생성된
/var/lib/zookeeper/디렉터리로 설정해야 합니다. clientPort-
클라이언트가 연결할 수 있는 포트 번호입니다. 기본값은
2181입니다.
config/zookeeper.properties 라는 Zoo Cryostat 구성 파일의 예는 Apache Kafka 설치 디렉터리의 Streams에 있습니다. Zoo Cryostat의 대기 시간을 최소화하기 위해 dataDir 디렉토리를 별도의 디스크 장치에 배치하는 것이 좋습니다.
Zookeeper 구성 파일은 /opt/kafka/config/zookeeper.properties 에 있어야 합니다. 구성 파일의 기본 예는 다음과 같습니다. kafka 사용자가 구성 파일을 읽을 수 있어야 합니다.
tickTime=2000 dataDir=/var/lib/zookeeper/ clientPort=2181
tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
5.3.2. Zookeeper 클러스터 구성 링크 복사링크가 클립보드에 복사되었습니다!
대부분의 프로덕션 환경에서는 복제된 Zoo Cryostat 인스턴스의 클러스터를 배포하는 것이 좋습니다. 안정적이고 가용성이 높은 Zoo Cryostat 클러스터는 신뢰할 수 있는 Zoo Cryostat 서비스를 실행하는 데 중요합니다. Zookeeper 클러스터는 ensembles 라고도 합니다.
Zookeeper 클러스터는 일반적으로 홀수의 노드로 구성됩니다. Zookeeper에서는 클러스터의 대다수 노드가 실행 중이어야 합니다. 예를 들면 다음과 같습니다.
- 3개의 노드가 있는 클러스터에서는 두 개 이상의 노드를 가동 중이어야 합니다. 즉, 하나의 노드가 다운될 수 있습니다.
- 5개의 노드로 구성된 클러스터에서 노드를 3개 이상 사용할 수 있어야 합니다. 즉, 두 개의 노드를 중단할 수 있습니다.
- 7개의 노드로 구성된 클러스터에서 노드를 4개 이상 사용할 수 있어야 합니다. 즉, 세 개의 노드를 중단할 수 있습니다.
Zoo Cryostat 클러스터에 더 많은 노드를 보유하면 전체 클러스터의 복원력과 안정성이 향상됩니다.
Zookeeper는 노드 수가 짝수인 클러스터에서 실행할 수 있습니다. 그러나 추가 노드는 클러스터의 복원력을 늘리지 않습니다. 4개의 노드가 있는 클러스터에서는 3개 이상의 노드를 사용할 수 있어야 하며, 하나의 노드만 다운될 수 있습니다. 따라서 3개의 노드만 있는 클러스터와 정확히 동일한 복원력이 있습니다.
이상적으로, 다른 Zoo Cryostat 노드는 다른 데이터 센터 또는 네트워크 세그먼트에 위치해야 합니다. Zoo Cryostat 노드의 수를 늘리면 클러스터 동기화에 소요되는 워크로드가 증가합니다. 대부분의 Kafka 사용 사례의 경우 3, 5 또는 7개의 노드가 있는 Zoo Cryostat 클러스터만으로도 충분합니다.
3개의 노드가 있는 Zoo Cryostat 클러스터는 사용할 수 없는 1개의 노드만 허용할 수 있습니다. 즉, 다른 노드에서 유지보수를 수행하는 동안 클러스터 노드가 충돌하면 Zoo Cryostat 클러스터를 사용할 수 없습니다.
복제된 Zoo Cryostat 구성은 독립 실행형 구성에서 지원하는 모든 구성 옵션을 지원합니다. 클러스터링 구성에 추가 옵션이 추가되었습니다.
initLimit-
의사 결정자가 클러스터 리더에 연결하고 동기화할 수 있도록 허용하는 시간입니다. 시간은 여러 틱으로 지정됩니다(자세한 내용은
tickTime옵션 참조). syncLimit-
리더의 배후가 될 수 있는 시간입니다. 시간은 여러 틱으로 지정됩니다(자세한 내용은
tickTime옵션 참조). reconfigEnabled- 동적 재구성을 활성화하거나 비활성화합니다. Zoo Cryostat 클러스터에 서버를 추가하거나 제거하려면 활성화해야 합니다.
standaloneEnabled- 하나의 서버로만 실행되는 독립 실행형 모드를 활성화하거나 비활성화합니다.
위의 옵션 외에도 모든 구성 파일에는 Zoo Cryostat 클러스터의 멤버여야 하는 서버 목록이 포함되어야 합니다. 서버 레코드는 server.id=hostname:port1:port2 형식으로 지정해야 합니다.
id- Zoo Cryostat 클러스터 노드의 ID입니다.
hostname- 노드가 연결을 수신 대기하는 호스트 이름 또는 IP 주소입니다.
port1- 클러스터 내부 통신에 사용되는 포트 번호입니다.
port2- 리더 선택에 사용되는 포트 번호입니다.
다음은 3개의 노드가 있는 Zoo Cryostat 클러스터의 설정 파일의 예입니다.
4개의 문자 단어 명령을 사용하려면 zookeeper.properties 에서 4lw.commands.whitelist=* 를 지정합니다.
MyID 파일
Zoo Cryostat 클러스터의 각 노드에는 고유한 ID 가 할당되어야 합니다. 각 노드의 ID 는 myid 파일에 구성하고 /var/lib/zookeeper/ 와 같은 dataDir 폴더에 저장해야 합니다. myid 파일에는 작성된 ID 가 텍스트인 단일 행만 포함되어야 합니다. ID 는 1에서 255 사이의 임의의 정수일 수 있습니다. 각 클러스터 노드에 이 파일을 수동으로 생성해야 합니다. 이 파일을 사용하여 각 Zoo Cryostat 인스턴스는 구성 파일의 해당 server. 행의 구성을 사용하여 리스너를 구성합니다. 또한 다른 모든 server. 행을 사용하여 다른 클러스터 멤버를 식별합니다.
위의 예제에는 세 개의 노드가 있으므로 각각 1,2 및 3 의 값이 각각 다른 myid 가 있습니다.
5.3.3. 인증 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Zoo Cryostat는 어떠한 형태의 인증을 사용하지 않으며 익명 연결을 허용합니다. 그러나 SASL(Simple Authentication and Security Layer)을 사용하여 인증을 설정하는 데 사용할 수 있는 JAAS(Java Authentication and Authorization Service)를 지원합니다. Zookeeper는 로컬에 저장된 인증 정보가 있는 vmwareGEST-MD5 SASL 메커니즘을 사용한 인증을 지원합니다.
5.3.3.1. SASL을 사용한 인증 링크 복사링크가 클립보드에 복사되었습니다!
JAAS는 별도의 구성 파일을 사용하여 구성됩니다. JAAS 구성 파일을 Zoo Cryostat 구성(/opt/kafka/config/)과 동일한 디렉토리에 배치하는 것이 좋습니다. 권장 파일 이름은 Zookeeper -jaas.conf 입니다. 여러 노드가 있는 Zoo Cryostat 클러스터를 사용하는 경우 모든 클러스터 노드에 JAAS 구성 파일을 생성해야 합니다.
JAAS는 컨텍스트를 사용하여 구성됩니다. 서버 및 클라이언트와 같은 별도의 부분은 항상 별도의 컨텍스트 로 구성됩니다. 컨텍스트는 구성 옵션이며 다음과 같은 형식을 갖습니다.
ContextName {
param1
param2;
};
ContextName {
param1
param2;
};
SASL 인증은 서버 간 통신(파이플리드 인스턴스 간 통신)과 클라이언트-서버 간 통신( Kafka와 Zoo Cryostat 간 통신)에 대해 별도로 구성됩니다. 서버 간 인증은 여러 노드가 있는 Zoo Cryostat 클러스터에만 관련이 있습니다.
서버 간 인증
서버 간 인증의 경우 JAAS 구성 파일에는 다음 두 부분이 포함되어 있습니다.
- 서버 구성
- 클라이언트 구성
goodGEST-MD5 SASL 메커니즘을 사용하는 경우 QuorumServer 컨텍스트는 인증 서버를 구성하는 데 사용됩니다. 암호화되지 않은 형식으로 암호와 연결할 수 있는 모든 사용자 이름을 포함해야 합니다. 두 번째 컨텍스트 인 Quorum learner 는 Zoo Cryostat에 구축된 클라이언트에 대해 구성해야 합니다. 또한 암호화되지 않은 형식의 암호가 포함되어 있습니다. goodGEST-MD5 메커니즘에 대한 JAAS 구성 파일의 예는 다음과 같습니다.
JAAS 구성 파일 외에도 다음 옵션을 지정하여 일반 Zoo Cryostat 구성 파일에서 서버 간 인증을 활성화해야 합니다.
KAFKA_OPTS 환경 변수를 사용하여 JAAS 구성 파일을 Java 속성으로 Zoo Cryostat 서버에 전달합니다.
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
서버 간 인증에 대한 자세한 내용은 Zoo Cryostat wiki를 참조하십시오.
클라이언트 간 인증
클라이언트 간 인증은 서버 간 인증과 동일한 JAAS 파일에서 구성됩니다. 그러나 서버 간 인증과 달리 서버 구성만 포함됩니다. 구성의 클라이언트 부분은 클라이언트에서 수행해야 합니다. 인증을 사용하여 Zoo Cryostat에 연결하도록 Kafka 브로커를 구성하는 방법에 대한 자세한 내용은 Kafka 설치 섹션을 참조하십시오.
JAAS 구성 파일에 서버 컨텍스트를 추가하여 클라이언트-서버 간 인증을 구성합니다. goodGEST-MD5 메커니즘의 경우 모든 사용자 이름과 암호를 구성합니다.
JAAS 컨텍스트를 구성한 후 다음 행을 추가하여 Zoo Cryostat 구성 파일에서 클라이언트-서버 간 인증을 활성화합니다.
requireClientAuthScheme=sasl authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
Zoo Cryostat 클러스터의 일부인 모든 서버에 대해 authProvider. <ID > 속성을 추가해야 합니다.
KAFKA_OPTS 환경 변수를 사용하여 JAAS 구성 파일을 Java 속성으로 Zoo Cryostat 서버에 전달합니다.
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
Kafka 브로커에서 Zoo Cryostat 인증 구성에 대한 자세한 내용은 6.5절. “Zookeeper 인증” 을 참조하십시오.
5.3.3.2. vmwareGEST-MD5를 사용하여 서버 간 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Zoo Cryostat 클러스터 노드 간의 SASL hieradataGEST-MD5 메커니즘을 사용하여 인증을 활성화하는 방법을 설명합니다.
사전 요구 사항
- Apache Kafka의 스트림이 호스트에 설치되어 있습니다.
- Zookeeper 클러스터는 여러 노드로 구성됩니다.
SASL>-<GEST-MD5 인증 활성화
모든 Zoo Cryostat 노드에서
/opt/kafka/config/zookeeper-jaas.confJAAS 구성 파일을 생성하거나 편집하고 다음 컨텍스트를 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 이름과 암호는 JAAS 컨텍스트 모두에서 동일해야 합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Zoo Cryostat 노드에서
/opt/kafka/config/zookeeper.propertiesZoo Cryostat 구성 파일을 편집하고 다음 옵션을 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Zoo Cryostat 노드를 하나씩 다시 시작합니다. JAAS 구성을 Zoo Cryostat에 전달하려면
KAFKA_OPTS환경 변수를 사용합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.3.3. vmwareGEST-MD5를 사용하여 Client-to-server 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Zoo Cryostat 클라이언트와 Zoo Cryostat 사이의 SASL hieradataGEST-MD5 메커니즘을 사용하여 인증을 활성화하는 방법을 설명합니다.
사전 요구 사항
- Apache Kafka의 스트림이 호스트에 설치되어 있습니다.
- Zookeeper 클러스터가 구성되어 실행 중입니다.
SASL>-<GEST-MD5 인증 활성화
모든 Zoo Cryostat 노드에서
/opt/kafka/config/zookeeper-jaas.confJAAS 구성 파일을 생성하거나 편집하고 다음 컨텍스트를 추가합니다.Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="<SuperUserPassword>" user<Username1>_="<Password1>" user<USername2>_="<Password2>"; };Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="<SuperUserPassword>" user<Username1>_="<Password1>" user<USername2>_="<Password2>"; };Copy to Clipboard Copied! Toggle word wrap Toggle overflow 슈퍼에는 자동으로 관리자 권한이 있습니다. 파일에는 여러 사용자를 포함할 수 있지만 Kafka 브로커에 하나의 추가 사용자만 필요합니다. Kafka 사용자의 권장 이름은kafka입니다.다음 예제에서는 클라이언트 간 인증에 대한
서버컨텍스트를 보여줍니다.Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456"; };Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456"; };Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Zoo Cryostat 노드에서
/opt/kafka/config/zookeeper.propertiesZoo Cryostat 구성 파일을 편집하고 다음 옵션을 설정합니다.requireClientAuthScheme=sasl authProvider.<IdOfBroker1>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker2>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker3>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl authProvider.<IdOfBroker1>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker2>=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.<IdOfBroker3>=org.apache.zookeeper.server.auth.SASLAuthenticationProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow authProvider. <ID> 속성은 Zoo Cryostat 클러스터의 일부인 모든 노드에 대해 추가해야 합니다. 3-노드 Zoo Cryostat 클러스터 구성의 예는 다음과 같아야 합니다.requireClientAuthScheme=sasl authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Zoo Cryostat 노드를 하나씩 다시 시작합니다. JAAS 구성을 Zoo Cryostat에 전달하려면
KAFKA_OPTS환경 변수를 사용합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4. 권한 부여 링크 복사링크가 클립보드에 복사되었습니다!
Zookeeper는 ACL(액세스 제어 목록)을 지원하여 내부에 저장된 데이터를 보호합니다. Kafka 브로커는 생성하는 모든 Zoo Cryostat 레코드에 대한 ACL 권한을 자동으로 구성할 수 있으므로 다른 Zoo Cryostat 사용자는 수정할 수 없습니다.
Kafka 브로커에서 Zoo Cryostat ACL 활성화에 대한 자세한 내용은 6.6절. “Zookeeper 권한 부여” 을 참조하십시오.
5.3.5. TLS 링크 복사링크가 클립보드에 복사되었습니다!
Zookeeper는 암호화 또는 인증을 위해 TLS를 지원합니다.
5.3.6. 추가 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
사용 사례에 따라 다음과 같은 Zoo Cryostat 구성 옵션을 설정할 수 있습니다.
maxClientCnxns- Zoo Cryostat 클러스터의 단일 멤버에 대한 최대 동시 클라이언트 연결 수입니다.
autopurge.snapRetainCount-
유지될 Zoo Cryostat의 메모리 내 데이터베이스의 스냅샷 수입니다. 기본값은
3입니다. autopurge.purgeInterval-
스냅샷 제거의 시간 간격(시간)입니다. 기본값은
0이며 이 옵션은 비활성화되어 있습니다.
사용 가능한 모든 구성 옵션은 Zoo Cryostat 설명서에서 확인할 수 있습니다.
5.4. Kafka 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 속성 파일을 사용하여 정적 구성을 저장합니다. 구성 파일에 권장되는 위치는 /opt/kafka/config/server.properties 입니다. kafka 사용자가 구성 파일을 읽을 수 있어야 합니다.
Apache Kafka의 스트림은 제품의 다양한 기본 및 고급 기능을 강조하는 구성 파일을 제공합니다. 이는 Apache Kafka 설치 디렉터리의 Streams의 config/server.properties 에서 확인할 수 있습니다.
이 장에서는 가장 중요한 구성 옵션에 대해 설명합니다.
5.4.1. ZooKeeper 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커는 구성의 일부를 저장하고 클러스터를 조정하고 (예: 어떤 노드가 어떤 파티션의 리더인지 결정하는 데) Zoo Cryostat가 필요합니다. Zoo Cryostat 클러스터의 연결 세부 정보는 구성 파일에 저장됩니다. zookeeper.connect 필드에는 콤마로 구분된 호스트 이름 목록과 zookeeper 클러스터 멤버의 포트가 포함되어 있습니다.
예를 들면 다음과 같습니다.
zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181
zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181
Kafka는 이러한 주소를 사용하여 Zoo Cryostat 클러스터에 연결합니다. 이 구성을 사용하면 모든 Kafka znodes 가 Zoo Cryostat 데이터베이스의 루트에서 직접 생성됩니다. 따라서 이러한 Zoo Cryostat 클러스터는 단일 Kafka 클러스터에만 사용할 수 있습니다. 단일 Zoo Cryostat 클러스터를 사용하도록 여러 Kafka 클러스터를 구성하려면 Kafka 구성 파일의 Zoo Cryostat 연결 문자열 끝에 기본(접두사) 경로를 지정합니다.
zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181/my-cluster-1
zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181/my-cluster-1
5.4.2. 리스너 링크 복사링크가 클립보드에 복사되었습니다!
리스너는 Kafka 브로커에 연결하는 데 사용됩니다. 각 Kafka 브로커는 여러 리스너를 사용하도록 구성할 수 있습니다. 각 리스너에는 다른 포트 또는 네트워크 인터페이스에서 수신 대기할 수 있도록 다른 구성이 필요합니다.
리스너를 구성하려면 Kafka 구성 속성 파일에서 listeners 속성을 편집합니다. listeners 속성에 쉼표로 구분된 목록으로 리스너를 추가합니다. 다음과 같이 각 속성을 구성합니다.
<listener_name>://<hostname>:<port>
<listener_name>://<hostname>:<port>
< hostname >이 비어 있으면 Kafka에서 java.net.InetAddress.getCanonicalHostName() 클래스를 호스트 이름으로 사용합니다.
여러 리스너 구성 예
listeners=internal-1://:9092,internal-2://:9093,replication://:9094
listeners=internal-1://:9092,internal-2://:9093,replication://:9094
Kafka 클라이언트가 Kafka 클러스터에 연결하려고 하면 먼저 클러스터 노드 중 하나인 부트스트랩 서버에 연결합니다. 부트스트랩 서버는 클러스터에 있는 모든 브로커 목록을 클라이언트에 제공하고 클라이언트는 각각 개별적으로 연결합니다. 브로커 목록은 구성된 리스너 를 기반으로 합니다.
공개된 리스너
선택적으로 advertise .listeners 속성을 사용하여 클라이언트에 listeners 속성에 지정된 것과 다른 리스너 주소 집합을 제공할 수 있습니다. 프록시와 같은 추가 네트워크 인프라가 클라이언트와 브로커 간이거나 IP 주소 대신 외부 DNS 이름을 사용하는 경우 유용합니다.
advertise .listeners 속성은 listeners 속성과 동일한 방식으로 포맷됩니다.
광고된 리스너에 대한 구성 예
listeners=internal-1://:9092,internal-2://:9093 advertised.listeners=internal-1://my-broker-1.my-domain.com:1234,internal-2://my-broker-1.my-domain.com:1235
listeners=internal-1://:9092,internal-2://:9093
advertised.listeners=internal-1://my-broker-1.my-domain.com:1234,internal-2://my-broker-1.my-domain.com:1235
공개된 리스너의 이름은 listeners 속성에 나열된 리스너와 일치해야 합니다.
broker 리스너
broker 리스너 는 Kafka 브로커 간 통신에 사용됩니다. 다음의 경우broker 간 통신이 필요합니다.
- 서로 다른 브로커 간 워크로드 조정
- 다른 브로커에 저장된 파티션 간 메시지 복제
broker 리스너는 선택한 포트에 할당할 수 있습니다. 여러 리스너가 구성된 경우 브로커 구성의 inter.broker.listener .name 속성에broker 리스너의 이름을 정의할 수 있습니다.
여기에서는broker 리스너의 이름이 REPLICATION 으로 지정됩니다.
listeners=REPLICATION://0.0.0.0:9091 inter.broker.listener.name=REPLICATION
listeners=REPLICATION://0.0.0.0:9091
inter.broker.listener.name=REPLICATION
컨트롤러 리스너
컨트롤러 구성은 클러스터를 조정하고 브로커 및 파티션의 상태를 추적하는 데 사용되는 메타데이터를 관리하는 컨트롤러와 연결하는 데 사용됩니다.
기본적으로 컨트롤러와 브로커 간의 통신은 전용 컨트롤러 리스너를 사용합니다. 컨트롤러는 파티션 리더십 변경과 같은 관리 작업을 조정해야 하므로 이러한 리스너 중 하나 이상이 필요합니다.
controller.listener.names 속성을 사용하여 컨트롤러에 사용할 리스너를 지정합니다. controller .quorum.voECDSA 속성을 사용하여 컨트롤러 구성원 의 쿼럼을 지정할 수 있습니다. 쿼럼은 관리 작업에 리더로 구조를 사용할 수 있으며, 리더는 핫 대기로 운영 및 팔로워를 적극적으로 관리하고 메모리의 메타데이터 일관성을 보장하고 장애 조치를 지원합니다.
listeners=CONTROLLER://0.0.0.0:9090 controller.listener.names=CONTROLLER controller.quorum.voters=1@localhost:9090
listeners=CONTROLLER://0.0.0.0:9090
controller.listener.names=CONTROLLER
controller.quorum.voters=1@localhost:9090
컨트롤러 구성원의 형식은 < cluster_id>@<hostname>:<port>입니다.
5.4.3. 커밋 로그 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka는 커밋 로그에서 생산자에서 수신하는 모든 레코드를 저장합니다. 커밋 로그에는 Kafka가 제공해야 하는 레코드 형식의 실제 데이터가 포함됩니다. 이러한 레코드는 브로커의 활동을 자세히 설명하는 애플리케이션 로그 파일과 다릅니다.
로그 디렉터리
log.dirs 속성 파일을 사용하여 로그 디렉터리를 구성하여 하나 이상의 로그 디렉터리에 커밋 로그를 저장할 수 있습니다. 설치 중에 생성된 /var/lib/kafka 디렉터리로 설정해야 합니다.
log.dirs=/var/lib/kafka
log.dirs=/var/lib/kafka
성능상의 이유로 log.dirs를 여러 디렉터리로 구성하고 각각 물리적 장치를 다른 물리적 장치에 배치하여 디스크 I/O 성능을 향상시킬 수 있습니다. 예를 들면 다음과 같습니다.
log.dirs=/var/lib/kafka1,/var/lib/kafka2,/var/lib/kafka3
log.dirs=/var/lib/kafka1,/var/lib/kafka2,/var/lib/kafka3
5.4.4. 브로커 ID 링크 복사링크가 클립보드에 복사되었습니다!
broker ID는 클러스터의 각 브로커의 고유 식별자입니다. 브로커 ID로 0보다 크거나 같은 정수를 할당할 수 있습니다. 브로커 ID는 재시작 또는 충돌 후 브로커를 식별하는 데 사용되며, 따라서 ID가 안정적이며 시간이 지남에 따라 변경되지 않는 것이 중요합니다. 브로커 ID는 브로커 속성 파일에 구성되어 있습니다.
broker.id=1
broker.id=1
6장. Kafka에 대한 액세스 보안 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트가 Kafka 브로커에 대한 액세스를 관리하여 Kafka 클러스터를 보호합니다. Kafka 브로커 및 클라이언트를 보호하기 위한 구성 옵션 지정
Kafka 브로커와 클라이언트 간의 보안 연결은 다음을 포함할 수 있습니다.
- 데이터 교환을 위한 암호화
- ID를 증명하기 위한 인증
- 사용자가 실행하는 작업을 허용하거나 거부할 수 있는 권한 부여
클라이언트에 지정된 인증 및 권한 부여 메커니즘은 Kafka 브로커에 지정된 인증 및 권한 부여 메커니즘과 일치해야 합니다.
6.1. 리스너 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커의 암호화 및 인증은 리스너별로 구성됩니다. Kafka 리스너 구성에 대한 자세한 내용은 5.4.2절. “리스너” 을 참조하십시오.
Kafka 브로커의 각 리스너는 자체 보안 프로토콜로 구성됩니다. 구성 속성 listener.security.protocol.map 은 보안 프로토콜을 사용하는 리스너를 정의합니다. 각 리스너 이름을 보안 프로토콜에 매핑합니다. 지원되는 보안 프로토콜은 다음과 같습니다.
일반 텍스트- 암호화 또는 인증이 없는 리스너입니다.
SSL- TLS 암호화를 사용하는 리스너 및 필요한 경우 TLS 클라이언트 인증서를 사용한 인증입니다.
SASL_PLAINTEXT- 암호화가 없지만 SASL 기반 인증을 사용하는 리스너입니다.
SASL_SSL- TLS 기반 암호화 및 SASL 기반 인증을 사용하는 리스너입니다.
다음 리스너 구성이 제공됩니다.
listeners=INT1://:9092,INT2://:9093,REPLICATION://:9094
listeners=INT1://:9092,INT2://:9093,REPLICATION://:9094
listener.security.protocol.map 은 다음과 같을 수 있습니다.
listener.security.protocol.map=INT1:SASL_PLAINTEXT,INT2:SASL_SSL,REPLICATION:SSL
listener.security.protocol.map=INT1:SASL_PLAINTEXT,INT2:SASL_SSL,REPLICATION:SSL
이렇게 하면 SASL 인증과 함께 암호화되지 않은 연결을 사용하고, 리스너 INT2 가 SASL 인증과 함께 암호화된 연결을 사용하고 REPLICATION 인터페이스를 사용하여 TLS 암호화(TLS 클라이언트 인증과 함께)를 사용하도록 리스너 INT1 을 구성합니다. 동일한 보안 프로토콜을 여러 번 사용할 수 있습니다. 다음 예도 유효한 구성입니다.
listener.security.protocol.map=INT1:SSL,INT2:SSL,REPLICATION:SSL
listener.security.protocol.map=INT1:SSL,INT2:SSL,REPLICATION:SSL
이러한 구성은 모든 인터페이스에 TLS 암호화 및 TLS 인증(선택 사항)을 사용합니다.
6.2. TLS 암호화 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 Kafka 클라이언트와의 통신을 암호화하기 위해 TLS를 지원합니다.
TLS 암호화 및 서버 인증을 사용하려면 개인 키와 공개 키가 포함된 키 저장소를 제공해야 합니다. 일반적으로 JKS(Java Keystore) 형식으로 파일을 사용하여 수행합니다. 이 파일의 경로는 ssl.keystore.location 속성에 설정됩니다. 키 저장소를 보호하는 암호를 설정하는 데 ssl.keystore.password 속성을 사용해야 합니다. 예를 들면 다음과 같습니다.
ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456
ssl.keystore.location=/path/to/keystore/server-1.jks
ssl.keystore.password=123456
경우에 따라 개인 키를 보호하는 데 추가 암호가 사용됩니다. 이러한 암호는 ssl.key.password 속성을 사용하여 설정할 수 있습니다.
Kafka는 인증 기관에서 서명한 키와 자체 서명 키를 사용할 수 있습니다. 인증 기관에서 서명한 키를 사용하는 것이 항상 선호되는 방법이어야 합니다. 클라이언트가 연결 중인 Kafka 브로커의 ID를 확인할 수 있도록 하려면 인증서에서 항상 공개된 호스트 이름을 CN(일반 이름) 또는 SAN(주체 대체 이름)으로 포함해야 합니다.
다양한 리스너에 다양한 SSL 구성을 사용할 수 있습니다. ssl 으로 시작하는 모든 옵션의 접두사는 listener.name.<NameOfTheListener>입니다. 여기서 리스너 이름은 항상 소문자여야 합니다. 이렇게 하면 해당 특정 리스너에 대한 기본 SSL 구성이 재정의됩니다. 다음 예제에서는 다양한 리스너에 다양한 SSL 구성을 사용하는 방법을 보여줍니다.
추가 TLS 구성 옵션
위에서 설명한 기본 TLS 구성 옵션 외에도 Kafka는 TLS 구성을 미세 조정하기 위한 다양한 옵션을 지원합니다. 예를 들어 TLS / SSL 프로토콜 또는 암호화 제품군을 활성화하거나 비활성화하려면 다음을 수행합니다.
ssl.cipher.suites- 활성화된 암호화 제품군 목록입니다. 각 암호화 제품군은 TLS 연결에 사용되는 인증, 암호화, MAC 및 키 교환 알고리즘의 조합입니다. 기본적으로 사용 가능한 모든 암호화 제품군이 활성화됩니다.
ssl.enabled.protocols-
활성화된 TLS/SSL 프로토콜 목록입니다. 기본값은
TLSv1.2,TLSv1.1,TLSv1입니다.
6.2.1. TLS 암호화 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Kafka 브로커에서 암호화를 활성화하는 방법을 설명합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
- 클러스터의 모든 Kafka 브로커에 대한 TLS 인증서를 생성합니다. 인증서에는 일반 이름 또는 주체 대체 이름에 광고 및 부트스트랩 주소가 있어야 합니다.
다음을 위해 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
listener.security.protocol.map필드를 변경하여 TLS 암호화를 사용하려는 리스너의SSL프로토콜을 지정합니다. -
브로커 인증서와 함께 JKS 키 저장소의 경로로
ssl.keystore.location옵션을 설정합니다. ssl.keystore.password옵션을 키 저장소를 보호하는 데 사용한 암호로 설정합니다.예를 들면 다음과 같습니다.
listeners=UNENCRYPTED://:9092,ENCRYPTED://:9093,REPLICATION://:9094 listener.security.protocol.map=UNENCRYPTED:PLAINTEXT,ENCRYPTED:SSL,REPLICATION:PLAINTEXT ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456
listeners=UNENCRYPTED://:9092,ENCRYPTED://:9093,REPLICATION://:9094 listener.security.protocol.map=UNENCRYPTED:PLAINTEXT,ENCRYPTED:SSL,REPLICATION:PLAINTEXT ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
- Kafka 브로커 시작
6.3. 인증 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터에 대한 클라이언트 연결을 인증하기 위해 다음 옵션을 사용할 수 있습니다.
- TLS 클라이언트 인증
- 암호화된 연결에서 X.509 인증서를 사용하는 TLS(Transport Layer Security)
- Kafka SASL
- 지원되는 인증 메커니즘을 사용하는 Kafka SASL(Simple Authentication and Security Layer)
- OAuth 2.0
- OAuth 2.0 토큰 기반 인증
SASL 인증은 일반 암호화되지 않은 연결 및 TLS 연결에 대한 다양한 메커니즘을 지원합니다.
-
PLAIN- 사용자 이름 및 암호를 기반으로 하는 인증입니다. -
SCRAM-SHA-256및SCRAM-SHA-512- SCRAM(Salted Challenge Response Authentication Mechanism)을 사용한 인증입니다. -
GSSAPI- Kerberos 서버에 대한 인증입니다.
PLAIN 메커니즘은 암호화되지 않은 형식으로 네트워크를 통해 사용자 이름과 암호를 보냅니다. TLS 암호화와 함께만 사용해야 합니다.
6.3.1. TLS 클라이언트 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커에서 TLS 클라이언트 인증을 활성화하여 이미 TLS 암호화를 사용하는 Kafka 노드 연결에 대한 보안을 강화합니다.
ssl.client.auth 속성을 사용하여 다음 값 중 하나로 TLS 인증을 설정합니다.
-
none- TLS 클라이언트 인증이 꺼져 있습니다(기본값) -
요청됨 - 선택적 TLS 클라이언트 인증 -
필수- 클라이언트는 TLS 클라이언트 인증서를 사용하여 인증해야 합니다.
클라이언트가 TLS 클라이언트 인증을 사용하여 인증하면 인증된 주체 이름이 클라이언트 인증서에서 고유 이름에서 파생됩니다. 예를 들어 고유 이름이 CN=someuser 인 인증서가 있는 사용자는 CN=someuser,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown 을 사용하여 인증됩니다. 이 주체 이름은 인증된 사용자 또는 엔티티에 대한 고유 식별자를 제공합니다. TLS 클라이언트 인증을 사용하지 않고 SASL이 비활성화된 경우 주 이름은 기본적으로 ANONYMOUS 입니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- TLS 암호화가 활성화되어 있습니다.
프로세스
- 사용자 인증서에 서명하는 데 사용되는 CA(Certification Authority)의 공개 키가 포함된 JKS(Java 키 저장소) 신뢰 저장소를 준비합니다.
다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
ssl.truststore.location속성을 사용하여 JKS 신뢰 저장소의 경로를 지정합니다. -
신뢰 저장소가 암호로 보호되는 경우
ssl.truststore.password속성을 사용하여 암호를 설정합니다. ssl.client.auth속성을required로 설정합니다.TLS 클라이언트 인증 구성
ssl.truststore.location=/path/to/truststore.jks ssl.truststore.password=123456 ssl.client.auth=required
ssl.truststore.location=/path/to/truststore.jks ssl.truststore.password=123456 ssl.client.auth=requiredCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
- Kafka 브로커를 시작합니다.
6.3.2. SASL PLAIN 클라이언트 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Kafka에서 SASL PLAIN 인증을 활성화하여 Kafka 노드 연결에 대한 보안을 강화합니다.
SASL 인증은 KafkaServer JAAS 컨텍스트를 사용하는 JAAS(Java Authentication and Authorization Service)를 통해 활성화됩니다. 전용 파일에서 또는 Kafka 구성에서 직접 JAAS 구성을 정의할 수 있습니다.
전용 파일의 권장 위치는 /opt/kafka/config/jaas.conf 입니다. kafka 사용자가 파일을 읽을 수 있는지 확인합니다. 모든 Kafka 노드에서 JAAS 구성 파일을 동기화 상태로 유지합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
/opt/kafka/config/jaas.confJAAS 구성 파일을 편집하거나 생성하여PlainLoginModule을 활성화하고 허용된 사용자 이름과 암호를 지정합니다.이 파일이 모든 Kafka 브로커에서 동일한지 확인합니다.
JAAS 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
listener.security.protocol.map속성을 사용하여 특정 리스너에서 SASL PLAIN 인증을 활성화합니다.SASL_PLAINTEXT또는SASL_SSL을 지정합니다. sasl.enabled.mechanisms속성을PLAIN으로 설정합니다.SASL 일반 구성
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=PLAIN
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=PLAINCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
(re)
KAFKA_OPTS환경 변수를 사용하여 Kafka 브로커를 시작하여 JAAS 구성을 Kafka 브로커에 전달합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. SASL SCRAM 클라이언트 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Kafka에서 SASL SCRAM 인증을 활성화하여 Kafka 노드 연결에 대한 보안을 강화합니다.
SASL 인증은 KafkaServer JAAS 컨텍스트를 사용하는 JAAS(Java Authentication and Authorization Service)를 통해 활성화됩니다. 전용 파일에서 또는 Kafka 구성에서 직접 JAAS 구성을 정의할 수 있습니다.
전용 파일의 권장 위치는 /opt/kafka/config/jaas.conf 입니다. kafka 사용자가 파일을 읽을 수 있는지 확인합니다. 모든 Kafka 노드에서 JAAS 구성 파일을 동기화 상태로 유지합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
/opt/kafka/config/jaas.confJAAS 구성 파일을 편집하거나 생성하여ScramLoginModule을 활성화합니다.이 파일이 모든 Kafka 브로커에서 동일한지 확인합니다.
JAAS 구성
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required; };KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required; };Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
listener.security.protocol.map속성을 사용하여 특정 리스너에서 SASL SCRAM 인증을 활성화합니다.SASL_PLAINTEXT또는SASL_SSL을 지정합니다. sasl.enabled.mechanisms옵션을SCRAM-SHA-256또는SCRAM-SHA-512로 설정합니다.예를 들면 다음과 같습니다.
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=SCRAM-SHA-512
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=SCRAM-SHA-512Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
(re)
KAFKA_OPTS환경 변수를 사용하여 Kafka 브로커를 시작하여 JAAS 구성을 Kafka 브로커에 전달합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. 여러 SASL 메커니즘 활성화 링크 복사링크가 클립보드에 복사되었습니다!
SASL 인증을 사용하는 경우 둘 이상의 메커니즘을 활성화할 수 있습니다. Kafka는 둘 이상의 SASL 메커니즘을 동시에 사용할 수 있습니다. 여러 메커니즘이 활성화되면 클라이언트가 사용하는 메커니즘을 선택할 수 있습니다.
둘 이상의 메커니즘을 사용하려면 각 메커니즘에 필요한 구성을 설정합니다. 동일한 컨텍스트에 다른 KafkaServer JAAS 구성을 추가하고 sasl.mechanism.inter.broker.protocol 속성을 사용하여 Kafka 구성에서 하나 이상의 메커니즘을 쉼표로 구분된 목록으로 활성화할 수 있습니다.
두 개 이상의 SASL 메커니즘에 대한 JAAS 구성
SASL 메커니즘 활성화
sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
6.3.5. broker 인증을 위한 SASL 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 노드 간에 SASL SCRAM 인증을 활성화하여 브루커 간 연결에 대한 보안을 강화합니다. Kafka 클러스터에 대한 클라이언트 연결에 SASL 인증을 사용할 뿐만 아니라broker 간 인증에 SASL을 사용할 수도 있습니다. 클라이언트 연결에 대한 SASL과 달리 상호 통신에 대한 하나의 메커니즘만 선택할 수 있습니다.
사전 요구 사항
- Zookeeper 는 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
SCRAM 메커니즘을 사용하는 경우 Kafka 클러스터에 SCRAM 자격 증명을 등록합니다.
Kafka 클러스터의 모든 노드의 경우 비브로커 SASL SCRAM 사용자를 Zoo Cryostat에 추가합니다. 이렇게 하면 Kafka 클러스터가 실행되기 전에 인증에 대한 인증 정보가 부트스트랩을 위해 업데이트됩니다.
broker SASL SCRAM 사용자 등록
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
sasl.mechanism.inter.broker.protocol속성을 사용하여 Kafka 구성에서 inter-broker SASL 메커니즘을 지정합니다.broker SASL 메커니즘
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512Copy to Clipboard Copied! Toggle word wrap Toggle overflow (선택 사항) SCRAM 메커니즘을 사용하는 경우 SCRAM 사용자를 추가하여 Kafka 클러스터에서 SCRAM 자격 증명을 등록합니다.
이렇게 하면 Kafka 클러스터가 실행되기 전에 인증에 대한 인증 정보가 부트스트랩을 위해 업데이트됩니다.
username및 password 필드를 사용하여KafkaServerJAAS 컨텍스트에서broker 간 통신의 사용자 이름과암호를지정합니다.broker JAAS 컨텍스트
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.6. SASL SCRAM 사용자 추가 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 Kafka의 SASL SCRAM을 사용하여 인증에 대한 새 사용자를 등록하는 단계를 간략하게 설명합니다. SASL SCRAM 인증은 클라이언트 연결의 보안을 향상시킵니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- SASL SCRAM 인증이 활성화됩니다.
프로세스
kafka-configs.sh도구를 사용하여 새 SASL SCRAM 사용자를 추가합니다./opt/kafka/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --add-config 'SCRAM-SHA-512=[password=<password>]' \ --entity-type users --entity-name <username>
/opt/kafka/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --add-config 'SCRAM-SHA-512=[password=<password>]' \ --entity-type users --entity-name <username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.7. SASL SCRAM 사용자 삭제 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 Kafka의 SASL SCRAM을 사용하여 인증에 등록된 사용자를 제거하는 단계를 간략하게 설명합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- SASL SCRAM 인증이 활성화됩니다.
프로세스
kafka-configs.sh도구를 사용하여 SASL SCRAM 사용자를 삭제합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.8. Kerberos(GSSAPI) 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka용 스트림은 Kafka 클러스터에 대한 보안 SSO(Single Sign-On) 액세스를 위해 Kerberos(GSSAPI) 인증 프로토콜 사용을 지원합니다. GSSAPI는 Kerberos 기능을 위한 API 래퍼로, 기본 구현 변경 사항에서 애플리케이션을 격리합니다.
Kerberos는 대칭 암호화 및 신뢰할 수 있는 타사인 KDC(Kerberos Key Distribution Centre)를 사용하여 클라이언트와 서버가 서로 인증할 수 있는 네트워크 인증 시스템입니다.
다음 절차에서는 Kafka 클라이언트가 Kerberos(GSSAPI) 인증을 사용하여 Kafka 및 Zoo Cryostat에 액세스할 수 있도록 Apache Kafka용 Streams를 구성하는 방법을 보여줍니다.
이 절차에서는 Kerberos krb5 리소스 서버가 Red Hat Enterprise Linux 호스트에 설정되어 있다고 가정합니다.
이 절차에서는 예제를 사용하여 다음을 구성하는 방법을 보여줍니다.
- 서비스 주체
- Kerberos 로그인을 사용하는 Kafka 브로커
- Kerberos 로그인을 사용하는 Zookeeper
- Kerberos 인증을 사용하여 Kafka에 액세스할 수 있는 생산자 및 소비자 클라이언트
지침은 생산자 및 소비자 클라이언트에 대한 추가 구성으로 단일 호스트에 단일 Zoo Cryostat 및 Kafka 설치에 대해 설정된 Kerberos를 설명합니다.
사전 요구 사항
Kerberos 자격 증명을 인증하고 인증하도록 Kafka 및 Zoo Cryostat를 구성하려면 다음이 필요합니다.
- Kerberos 서버에 액세스
- 각 Kafka 브로커 호스트의 Kerberos 클라이언트
Kerberos 서버 설정 단계에 대한 자세한 내용 및 브로커 호스트에 클라이언트를 보려면 RHEL 설정 구성의 예제 Kerberos 를 참조하십시오.
인증을 위한 서비스 주체 추가
Kerberos 서버에서 Zoo Cryostat, Kafka 브로커 및 Kafka 생산자 및 소비자 클라이언트에 대한 서비스 주체(사용자)를 생성합니다.
서비스 주체는 SERVICE-NAME/FULLY-QUALIFIED-HOST-NAME@DOMAIN-REALM 양식을 사용해야 합니다.
Kerberos KDC를 통해 주 키를 저장하는 keytab과 서비스 주체를 생성합니다.
Kerberos 주체의 도메인 이름이 대문자인지 확인합니다.
예를 들면 다음과 같습니다.
-
zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM -
kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM -
producer1/node1.example.redhat.com@EXAMPLE.REDHAT.COM consumer1/node1.example.redhat.com@EXAMPLE.REDHAT.COMZoo Cryostat 서비스 주체는 Kafka
config/server.properties파일의zookeeper.connect구성과 동일한 호스트 이름을 사용해야 합니다.zookeeper.connect=node1.example.redhat.com:2181
zookeeper.connect=node1.example.redhat.com:2181Copy to Clipboard Copied! Toggle word wrap Toggle overflow 호스트 이름이 동일하지 않으면 localhost 가 사용되고 인증이 실패합니다.
-
호스트에 디렉터리를 만들고 keytab 파일을 추가합니다.
예를 들면 다음과 같습니다.
/opt/kafka/krb5/zookeeper-node1.keytab /opt/kafka/krb5/kafka-node1.keytab /opt/kafka/krb5/kafka-producer1.keytab /opt/kafka/krb5/kafka-consumer1.keytab
/opt/kafka/krb5/zookeeper-node1.keytab /opt/kafka/krb5/kafka-node1.keytab /opt/kafka/krb5/kafka-producer1.keytab /opt/kafka/krb5/kafka-consumer1.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow kafka사용자가 디렉터리에 액세스할 수 있는지 확인합니다.chown kafka:kafka -R /opt/kafka/krb5
chown kafka:kafka -R /opt/kafka/krb5Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kerberos 로그인을 사용하도록 Zoo Cryostat 구성
Zookeeper를 위해 이전에 생성된 사용자 주체 및 키탭을 사용하여 인증에 Kerberos KDC(Key Distribution Center)를 사용하도록 Zoo Cryostat를 구성합니다.
opt/kafka/config/jaas.conf파일을 생성하거나 수정하여 Zoo Cryostat 클라이언트 및 서버 작업을 지원합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 키탭에서 기본 키를 가져오려면
true로 설정합니다. - 2
- 기본 키를 저장하려면
true로 설정합니다. - 3
- 티켓 캐시에서 티켓 부여 티켓(TGT)을 받으려면
true로 설정합니다. - 4
keyTab속성은 Kerberos KDC에서 복사한 키탭 파일의 위치를 가리킵니다. 위치와 파일은kafka사용자가 읽을 수 있어야 합니다.- 5
principal속성은SERVICE-NAME/FULLY-QUALIFIED-HOST-NAME@DOMAIN-NAME형식을 따르는 KDC 호스트에서 생성된 정규화된 주체 이름과 일치하도록 구성됩니다.
업데이트된 JAAS 구성을 사용하도록
opt/kafka/config/zookeeper.properties를 편집합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 로그인 갱신 빈도를 밀리초 단위로 제어하며 티켓 갱신 간격에 맞게 조정할 수 있습니다. 기본값은 1시간입니다.
- 2
- 호스트 이름이 로그인 주체 이름의 일부로 사용되는지 여부를 지정합니다. 클러스터의 모든 노드에 단일 키탭을 사용하는 경우
true로 설정됩니다. 그러나 문제 해결을 위해 각 브로커 호스트에 대해 별도의 keytab과 정규화된 주체를 생성하는 것이 좋습니다. - 3
- Kerberos 협상의 주체 이름에서 영역 이름이 제거되는지 여부를 제어합니다. 이 설정을
false로 설정하는 것이 좋습니다. - 4
- Zoo Cryostat 서버 및 클라이언트에 대한 SASL 인증 메커니즘을 활성화합니다.
- 5
RequireSasl속성은 마스터 선택과 같은 쿼럼 이벤트에 SASL 인증이 필요한지 여부를 제어합니다.- 6
loginContext속성은 지정된 구성 요소의 인증 구성에 사용되는 JAAS 구성에서 로그인 컨텍스트의 이름을 식별합니다. loginContext 이름은opt/kafka/config/jaas.conf파일의 관련 섹션 이름에 해당합니다.- 7
- 식별에 사용되는 보안 주체 이름을 구성하는 데 사용할 이름 지정 규칙을 제어합니다.Controls the naming convention to be used to form the principal name used for identification. 자리 표시자
_HOST는 런타임 시server.1속성에 정의된 호스트 이름으로 자동으로 확인됩니다.
JVM 매개변수로 Zoo Cryostat를 시작하여 Kerberos 로그인 구성을 지정합니다.
su - kafka export EXTRA_ARGS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka export EXTRA_ARGS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 서비스 이름( Zookeeper )을 사용하지 않는 경우
-Dzookeeper.sasl.client.username=NAME매개변수를 사용하여 이름을 추가합니다.참고/etc/krb5.conf위치를 사용하는 경우 Zoo Cryostat, Kafka 또는 Kafka 생산자 및 소비자를 시작할 때-Djava.security.krb5.conf=/etc/krb5.conf를 지정할 필요가 없습니다.
Kerberos 로그인을 사용하도록 Kafka 브로커 서버 구성
이전에 kafka 용으로 생성된 사용자 주체 및 키탭을 사용하여 인증에 KDC(Kerberos Key Distribution Center)를 사용하도록 Kafka를 구성합니다.
다음 요소를 사용하여
opt/kafka/config/jaas.conf파일을 수정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 리스너가 SASL/GSSAPI 로그인을 사용하도록
config/server.properties파일에서 리스너 구성을 수정하여 Kafka 클러스터에서 각 브로커를 구성합니다.SASL 프로토콜을 리스너의 보안 프로토콜 맵에 추가하고 원하지 않는 프로토콜을 제거합니다.
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 두 개의 리스너: 클라이언트와의 범용 통신을 위한 보안 리스너( communication을 위해 TLS 지원) 및 브루커 간 통신을 위한 복제 리스너가 구성됩니다.
- 2
- TLS 지원 리스너의 경우 프로토콜 이름은 SASL_PLAINTEXT입니다. TLS 지원 커넥터의 경우 프로토콜 이름은 SASL_PLAINTEXT입니다. SSL이 필요하지 않은 경우
ssl.*속성을 제거할 수 있습니다. - 3
- Kerberos 인증을 위한 SASL 메커니즘은
GSSAPI입니다. - 4
- 브랜드 간 통신을 위한 Kerberos 인증.
- 5
- 인증 요청에 사용되는 서비스의 이름은 동일한 Kerberos 구성을 사용하는 다른 서비스와 구별하기 위해 지정됩니다.
JVM 매개변수를 사용하여 Kafka 브로커를 시작하여 Kerberos 로그인 구성을 지정합니다.
su - kafka export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 브로커 및 Zoo Cryostat 클러스터가 이전에 구성되어 Kerberos 기반 인증 시스템으로 작업하는 경우 Zoo Cryostat 및 브로커 클러스터를 시작하고 로그에서 구성 오류를 확인할 수 있습니다.
브로커 및 Zookeeper 인스턴스를 시작한 후 이제 Kerberos 인증을 위해 클러스터가 구성됩니다.
Kerberos 인증을 사용하도록 Kafka 생산자 및 소비자 클라이언트 구성
producer1 및 consumer1 을 위해 이전에 생성된 사용자 주체 및 keytab을 사용하여 인증에 Kerberos KMS(Key Distribution Center)를 사용하도록 Kafka 생산자 및 소비자 클라이언트를 구성합니다.
Kerberos 구성을 생산자 또는 소비자 구성 파일에 추가합니다.
예를 들면 다음과 같습니다.
/opt/kafka/config/producer.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/kafka/config/consumer.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클라이언트를 실행하여 Kafka 브로커에서 메시지를 보내고 받을 수 있는지 확인합니다.
생산자 클라이언트:
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-producer.sh --producer.config /opt/kafka/config/producer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-producer.sh --producer.config /opt/kafka/config/producer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소비자 클라이언트:
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-consumer.sh --consumer.config /opt/kafka/config/consumer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-consumer.sh --consumer.config /opt/kafka/config/consumer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 권한 부여 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커의 권한 부여는 승인자 플러그인을 사용하여 구현됩니다.
이 섹션에서는 Kafka와 함께 제공된 AclAuthorizer 플러그인을 사용하는 방법을 설명합니다.
또는 고유한 권한 부여 플러그인을 사용할 수 있습니다. 예를 들어 OAuth 2.0 토큰 기반 인증을 사용하는 경우 OAuth 2.0 인증을 사용할 수 있습니다.
6.4.1. ACL 승인자 활성화 링크 복사링크가 클립보드에 복사되었습니다!
/opt/kafka/config/server.properties 파일을 편집하여 ACL 승인자를 추가합니다. authorizer.class.name 속성에 정규화된 이름을 지정하여 승인자를 활성화합니다.
승인자 활성화
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
AclAuthorizer 의 경우 정규화된 이름은 kafka.security.authorizer.AclAuthorizer 입니다.
6.4.1.1. ACL 규칙 링크 복사링크가 클립보드에 복사되었습니다!
ACL 승인자는 ACL 규칙을 사용하여 Kafka 브로커에 대한 액세스를 관리합니다.
ACL 규칙은 다음 형식으로 정의됩니다.
기본 P 는 호스트 H의 <kafka_resource> R 에서 / denied <operation> O 입니다.
예를 들어, 사용자 존이 호스트 127.0.0.1 의 주제 주석 을 볼 수 있도록 규칙이 설정될 수 있습니다. host는 존스가 연결 중인 시스템의 IP 주소입니다.
대부분의 경우 사용자는 생산자 또는 소비자 애플리케이션입니다.
Consumer01 은 호스트 127.0.0.1에서 소비자 그룹 계정에 쓸 수 있습니다.
지정된 리소스에 ACL 규칙이 없으면 모든 작업이 거부됩니다. Kafka 구성 파일 /opt/kafka/config/server.properties 에서 allow.everyone.if.no.acl.found 속성을 true 로 설정하여 이 동작을 변경할 수 있습니다.
6.4.1.2. 보안 주체 링크 복사링크가 클립보드에 복사되었습니다!
보안 주체 는 사용자의 ID를 나타냅니다. ID 형식은 클라이언트가 Kafka에 연결하는 데 사용하는 인증 메커니즘에 따라 달라집니다.
-
인증 없이 연결할 때
사용자:ANONYMOUS. user:<username>은 PLAIN 또는 SCRAM과 같은 간단한 인증 메커니즘을 사용하여 연결된 경우입니다.예:
User:admin또는User:user1.TLS 클라이언트 인증을 사용하여 연결된 경우 user
:<DistinguishedName>입니다.예를 들면
User:CN=user1,O=MyCompany,L=Prague,C=CZ입니다.-
User:<Kerberos username> when connected using Kerberos.
DistinguishedName 은 클라이언트 인증서와 고유 이름입니다.
Kerberos 사용자 이름은 Kerberos 주체의 기본 부분이며 Kerberos를 사용하여 연결할 때 기본적으로 사용됩니다. sasl.kerberos.principal.to.local.rules 속성을 사용하여 Kerberos 주체에서 Kafka 주체를 빌드하는 방법을 구성할 수 있습니다.
6.4.1.3. 사용자 인증 링크 복사링크가 클립보드에 복사되었습니다!
승인을 사용하려면 클라이언트가 인증을 활성화하고 사용해야 합니다. 그렇지 않으면 모든 연결에 주체 User:ANONYMOUS 가 있습니다.
인증 방법에 대한 자세한 내용은 6.3절. “인증” 을 참조하십시오.
6.4.1.4. 슈퍼유저 링크 복사링크가 클립보드에 복사되었습니다!
슈퍼유저는 ACL 규칙에 관계없이 모든 작업을 수행할 수 있습니다.
슈퍼 사용자는 super.users 속성을 사용하여 Kafka 구성 파일에 정의되어 있습니다.
예를 들면 다음과 같습니다.
super.users=User:admin,User:operator
super.users=User:admin,User:operator
6.4.1.5. 복제본 브로커 인증 링크 복사링크가 클립보드에 복사되었습니다!
권한 부여가 활성화되면 모든 리스너 및 모든 연결에 적용됩니다. 여기에는 브로커 간 데이터 복제에 사용되는 inter-broker 연결이 포함됩니다. 따라서 권한 부여를 활성화하는 경우 브랜드 간 연결에 인증을 사용하고 브로커에서 사용하는 사용자에게 충분한 권한을 부여해야 합니다. 예를 들어 브로커 간 인증이 kafka-broker 사용자를 사용하는 경우 슈퍼 사용자 구성에 사용자 이름 super.users=User:kafka-broker 가 포함되어야 합니다.
ACL을 사용하여 제어할 수 있는 Kafka 리소스에 대한 자세한 내용은 Apache Kafka 설명서 를 참조하십시오.
6.4.2. ACL 규칙 추가 링크 복사링크가 클립보드에 복사되었습니다!
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh 유틸리티를 사용하여 새 ACL 규칙을 추가할 수 있습니다.
kafka-acls.sh 매개변수 옵션을 사용하여 ACL 규칙을 추가, 나열 및 제거하고 기타 기능을 수행합니다. 매개 변수에는 --add 와 같은 이중-하이프 규칙(예: --add )이 필요합니다.
사전 요구 사항
- 사용자가 생성되어 Kafka 리소스에 액세스할 수 있는 적절한 권한이 부여되었습니다.
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Kafka 브로커에서 권한 부여가 활성화됩니다.
프로세스
--add옵션을 사용하여kafka-acls.sh를 실행합니다.예:
MyConsumerGroup소비자 그룹을 사용하여user1및user2액세스가myTopic에서 읽을 수 있도록 허용합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow user1액세스를 거부하여 IP 주소127.0.0.1에서myTopic을 읽습니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroup을 사용하여myTopic의 소비자로user1을 추가합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.3. ACL 규칙 나열 링크 복사링크가 클립보드에 복사되었습니다!
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh 유틸리티를 사용하여 기존 ACL 규칙을 나열할 수 있습니다.
사전 요구 사항
프로세스
--list옵션을 사용하여kafka-acls.sh를 실행합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.4. ACL 규칙 제거 링크 복사링크가 클립보드에 복사되었습니다!
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh 유틸리티를 사용하여 기존 ACL 규칙을 제거할 수 있습니다.
사전 요구 사항
프로세스
--remove옵션을 사용하여kafka-acls.sh를 실행합니다.예:
MyConsumerGroup소비자 그룹을 사용하여myTopic에서 Allowuser1및user2액세스를 읽을 수 있도록 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroup을 사용하여myTopic의 소비자로user1을 추가하는 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP 주소 호스트
127.0.0.1에서myTopic읽기를 위해user1액세스를 거부하는 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5. Zookeeper 인증 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Zoo Cryostat와 Kafka 간 연결은 인증되지 않습니다. 그러나 Kafka 및 Zoo Cryostat는 SAS(Simple Authentication and Security Layer)를 사용하여 인증을 설정하는 데 사용할 수 있는 JAAS(Java Authentication and Authorization Service)를 지원합니다. Zookeeper는 로컬에 저장된 인증 정보가 있는 vmwareGEST-MD5 SASL 메커니즘을 사용한 인증을 지원합니다.
6.5.1. JAAS 구성 링크 복사링크가 클립보드에 복사되었습니다!
Zoo Cryostat 연결에 대한 SASL 인증은 JAAS 구성 파일에서 구성해야 합니다. 기본적으로 Kafka는 Zoo Cryostat에 연결하기 위해 Client 라는 JAAS 컨텍스트를 사용합니다. 클라이언트 컨텍스트는 /opt/kafka/config/jass.conf 파일에서 구성해야 합니다. 컨텍스트는 다음 예와 같이 PLAIN SASL 인증을 활성화해야 합니다.
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="kafka"
password="123456";
};
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="kafka"
password="123456";
};
6.5.2. Zoo Cryostat 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Zoo Cryostat에 연결할 때 SASL hieradataGEST-MD5 메커니즘을 사용하여 인증을 활성화하는 방법을 설명합니다.
사전 요구 사항
- Zoo Cryostat에서 클라이언트-서버 간 인증이 활성화됨
SASL>-<GEST-MD5 인증 활성화
모든 Kafka 브로커 노드에서
/opt/kafka/config/jaas.confJAAS 구성 파일을 생성하거나 편집하고 다음 컨텍스트를 추가합니다.Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="<Username>" password="<Password>"; };Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="<Username>" password="<Password>"; };Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 이름과 암호는 Zoo Cryostat에 구성된 것과 동일해야 합니다.
다음 예제에서는
클라이언트컨텍스트를 보여줍니다.Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="123456"; };Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="123456"; };Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Kafka 브로커 노드를 하나씩 다시 시작합니다. JAAS 구성을 Kafka 브로커에 전달하려면
KAFKA_OPTS환경 변수를 사용합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 멀티 노드 클러스터에서 브로커를 다시 시작하는 방법에 대한 자세한 내용은 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
6.6. Zookeeper 권한 부여 링크 복사링크가 클립보드에 복사되었습니다!
Kafka와 Zoo Cryostat 간에 인증이 활성화되면 Zoo Cryostat Access Control List(ACL) 규칙을 사용하여 Zoo Cryostat에 저장된 Kafka의 메타데이터에 대한 액세스를 자동으로 제어할 수 있습니다.
6.6.1. ACL 구성 링크 복사링크가 클립보드에 복사되었습니다!
Zoo Cryostat ACL 규칙 적용은 config/server 속성에 의해 제어됩니다.
.properties Kafka 구성 파일의 Zookeeper.set.acl
속성은 기본적으로 비활성화되어 있으며 true 로 설정하여 활성화됩니다.
zookeeper.set.acl=true
zookeeper.set.acl=true
ACL 규칙이 활성화되면 znode 가 Zoo Cryostat에서 생성되는 경우 이를 생성한 Kafka 사용자만 수정하거나 삭제할 수 있습니다. 다른 모든 사용자는 읽기 전용 액세스 권한을 갖습니다.
Kafka는 새로 생성된 Zoo Cryostat znodes 에만 ACL 규칙을 설정합니다. ACL이 클러스터를 처음 시작한 후에만 활성화된 경우 zookeeper-security-migration.sh 툴에서 모든 기존 znodes 에 ACL을 설정할 수 있습니다.
Zoo Cryostat의 데이터 기밀성
Zoo Cryostat에 저장된 데이터는 다음과 같습니다.
- 주제 이름 및 구성
- SASL SCRAM 인증을 사용할 때 Salted 및 hashed 사용자 자격 증명입니다.
그러나 Zoo Cryostat는 Kafka를 사용하여 전송 및 수신한 레코드를 저장하지 않습니다. Zoo Cryostat에 저장된 데이터는 기밀로 간주됩니다.
데이터가 기밀로 간주되는 경우(예: 주제 이름에 고객 ID가 포함되어 있기 때문에) 보호에 사용할 수 있는 유일한 옵션은 네트워크 수준에서 Zoo Cryostat를 분리하고 Kafka 브로커에만 액세스를 허용하는 것입니다.
6.6.2. 새 Kafka 클러스터에 대해 Zoo Cryostat ACL 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 새 Kafka 클러스터의 Kafka 구성에서 Zoo Cryostat ACL을 활성화하는 방법을 설명합니다. Kafka 클러스터를 처음 시작하기 전에 이 절차를 사용하십시오. 이미 실행 중인 클러스터에서 Zoo Cryostat ACL을 활성화하려면 6.6.3절. “기존 Kafka 클러스터에서 Zoo Cryostat ACL 활성화” 을 참조하십시오.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Zoo Cryostat 클러스터가 구성되어 실행 중입니다.
- 클라이언트-서버 간 인증은 Zoo Cryostat에서 활성화됩니다.
- Zookeeper 인증은 Kafka 브로커에서 사용할 수 있습니다.
- Kafka 브로커는 아직 시작되지 않았습니다.
프로세스
Kafka 구성 속성 파일을 편집하여 모든 클러스터 노드에서
zookeeper.set.acl필드를true로 설정합니다.zookeeper.set.acl=true
zookeeper.set.acl=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka 브로커를 시작합니다.
6.6.3. 기존 Kafka 클러스터에서 Zoo Cryostat ACL 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 실행 중인 Kafka 클러스터의 Kafka 구성에서 Zoo Cryostat ACL을 활성화하는 방법을 설명합니다. Zookeeper -security-migration.sh 도구를 사용하여 기존 znodes 에 Zoo Cryostat ACL을 설정합니다. Zookeeper -security-migration.sh 는 Apache Kafka용 Streams의 일부로 사용할 수 있으며 bin 디렉토리에서 찾을 수 있습니다.
사전 요구 사항
- Kafka 클러스터가 구성되어 실행 중입니다.
Zoo Cryostat ACL 활성화
Kafka 구성 속성 파일을 편집하여 모든 클러스터 노드에서
zookeeper.set.acl필드를true로 설정합니다.zookeeper.set.acl=true
zookeeper.set.acl=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Kafka 브로커를 하나씩 다시 시작합니다.
멀티 노드 클러스터에서 브로커를 다시 시작하는 방법에 대한 자세한 내용은 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
Zookeeper
-security-migration.sh 도구를 사용하여 기존의 모든 Zoo Cryostatznodes에서 ACL을 설정합니다.su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=<ZooKeeperURL> exit
su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=<ZooKeeperURL> exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=zoo1.my-domain.com:2181 exit
su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=zoo1.my-domain.com:2181 exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. OAuth 2.0 토큰 기반 인증 사용 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka의 스트림은 OAUTHBEARER 및 PLAIN 메커니즘을 사용한 OAuth 2.0 인증 사용을 지원합니다.
OAuth 2.0은 중앙 권한 부여 서버를 사용하여 리소스에 대한 제한된 액세스 권한을 부여하는 토큰을 발행하여 애플리케이션 간에 표준화된 토큰 기반 인증과 권한을 부여할 수 있습니다.
OAuth 2.0 인증을 구성한 다음 OAuth 2.0 인증을 구성할 수 있습니다.
Kafka 브로커 및 클라이언트는 모두 OAuth 2.0을 사용하도록 구성해야 합니다. OAuth 2.0 인증은 단순 또는 OPA 기반 Kafka 권한 부여와 함께 사용할 수도 있습니다.
애플리케이션 클라이언트는 OAuth 2.0 인증을 사용하여 계정 자격 증명을 노출하지 않고도 애플리케이션 서버( 리소스 서버라고 함)의 리소스에 액세스할 수 있습니다.
애플리케이션 클라이언트는 인증 수단으로 액세스 토큰을 전달합니다. 이 방법으로 부여할 액세스 수준을 결정하는 데 사용할 애플리케이션 서버가 사용할 수 있습니다. 권한 부여 서버는 액세스 권한 부여 및 액세스 관련 문의를 처리합니다.
Apache Kafka 스트림 컨텍스트에서 다음을 수행합니다.
- Kafka 브로커는 OAuth 2.0 리소스 서버 역할을 합니다.
- Kafka 클라이언트가 OAuth 2.0 애플리케이션 클라이언트 역할을 합니다.
Kafka 클라이언트는 Kafka 브로커에 인증합니다. 브로커 및 클라이언트는 필요에 따라 OAuth 2.0 권한 부여 서버와 통신하여 액세스 토큰을 얻거나 검증합니다.
Apache Kafka용 Streams 배포를 위해 OAuth 2.0 통합은 다음을 제공합니다.
- Kafka 브로커에 대한 서버 측 OAuth 2.0 지원
- Kafka MirrorMaker, Kafka Connect 및 Kafka Bridge에 대한 클라이언트 측 OAuth 2.0 지원
RHEL의 Apache Kafka용 스트림에는 두 가지 OAuth 2.0 라이브러리가 포함되어 있습니다.
kafka-oauth-client-
io.strimzi.kafka.client.client.JaasClientOauthLoginCallbackHandler라는 사용자 정의 로그인 콜백 처리기 클래스를 제공합니다.OAUTHBEARER인증 메커니즘을 처리하려면 Apache Kafka에서 제공하는OAuthBearerLoginModule과 함께 로그인 콜백 핸들러를 사용합니다. kafka-oauth-common-
kafka-oauth-client라이브러리에 필요한 일부 기능을 제공하는 도우미 라이브러리입니다.
제공된 클라이언트 라이브러리는 keycloak-core,jackson-databind, slf4j-api 와 같은 일부 추가 타사 라이브러리에 대한 종속성도 있습니다.
모든 종속성 라이브러리가 포함되도록 Maven 프로젝트를 사용하여 클라이언트를 패키징하는 것이 좋습니다. 종속성 라이브러리는 향후 버전에서 변경될 수 있습니다.
6.7.1. OAuth 2.0 인증 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka의 스트림은 OAuth 2.0 인증을 위한 OAUTHBEARER 및 PLAIN 메커니즘을 지원합니다. 두 메커니즘을 통해 Kafka 클라이언트가 Kafka 브로커를 사용하여 인증된 세션을 설정할 수 있습니다. 클라이언트, 권한 부여 서버 및 Kafka 브로커 간의 인증 흐름은 각 메커니즘마다 다릅니다.
가능한 경우 OAUTHBEARER를 사용하도록 클라이언트를 구성하는 것이 좋습니다. OAUTHBEARER는 클라이언트 인증 정보가 Kafka 브로커와 공유 되지 않기 때문에 PLAIN보다 높은 수준의 보안을 제공합니다. OAUTHBEARER를 지원하지 않는 Kafka 클라이언트에서만 PLAIN을 사용하는 것이 좋습니다.
클라이언트 연결에 OAuth 2.0 인증을 사용하도록 Kafka 브로커 리스너를 구성합니다. 필요한 경우 동일한 oauth 리스너에서 OAUTHBEARER 및 PLAIN 메커니즘을 사용할 수 있습니다. 각 메커니즘을 지원하는 속성은 oauth 리스너 구성에 명시적으로 지정해야 합니다.
OAUTHBEARER 개요
OAUTHBEARER 를 사용하려면 Kafka 브로커의 OAuth 인증 리스너 구성에서 sasl.enabled.mechanisms 를 OAUTHBEARER로 설정합니다. 자세한 구성은 6.7.2절. “OAuth 2.0 Kafka 브로커 구성” 에서 참조하십시오.
listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER
listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER
많은 Kafka 클라이언트 툴은 프로토콜 수준에서 OAUTHBEARER에 대한 기본 지원을 제공하는 라이브러리를 사용합니다. 애플리케이션 개발을 지원하기 위해 Apache Kafka용 Streams는 업스트림 Kafka 클라이언트 Java 라이브러리에 대한 OAuth 콜백 처리기 를 제공합니다(다른 라이브러리는 아님). 따라서 자체 콜백 처리기를 작성할 필요가 없습니다. 애플리케이션 클라이언트는 콜백 처리기를 사용하여 액세스 토큰을 제공할 수 있습니다. Go와 같은 다른 언어로 작성된 클라이언트는 사용자 지정 코드를 사용하여 권한 부여 서버에 연결하고 액세스 토큰을 받아야 합니다.
클라이언트는 OAUTHBEARER를 사용하여 인증 정보 교환을 위해 Kafka 브로커로 세션을 시작합니다. 여기서 인증 정보는 콜백 처리기에서 제공하는 전달자 토큰의 형태를 취합니다. 콜백을 사용하면 다음 세 가지 방법 중 하나로 토큰 프로비저닝을 구성할 수 있습니다.
- 클라이언트 ID 및 시크릿( OAuth 2.0 클라이언트 인증 정보 메커니즘 사용)
- 구성 시 수동으로 얻은 장기 액세스 토큰
- 구성 시 수동으로 가져온 장기 새로 고침 토큰
OAUTHBEARER 인증은 프로토콜 수준에서 OAUTHBEARER 메커니즘을 지원하는 Kafka 클라이언트에서만 사용할 수 있습니다.
PLAIN 개요
PLAIN을 사용하려면 sasl.enabled.mechanisms 값에 PLAIN 을 추가합니다.
listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER,PLAIN
listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER,PLAIN
PLAIN은 모든 Kafka 클라이언트 툴에서 사용하는 간단한 인증 메커니즘입니다. OAuth 2.0 인증에 사용할 PLAIN을 활성화하려면 Apache Kafka의 Streams는 PLAIN 서버 측 콜백을 통해 OAuth 2.0 을 제공합니다.
클라이언트 자격 증명은 OAUTHBEARER 인증이 사용되는 경우와 유사하게 호환 권한 부여 서버 뒤에서 중앙에서 처리됩니다. PLAIN 콜백을 통해 OAuth 2.0과 함께 사용하면 Kafka 클라이언트가 다음 방법 중 하나를 사용하여 Kafka 브로커로 인증합니다.
- 클라이언트 ID 및 시크릿( OAuth 2.0 클라이언트 인증 정보 메커니즘 사용)
- 구성 시 수동으로 얻은 장기 액세스 토큰
두 방법 모두 클라이언트는 Kafka 브로커에 인증 정보를 전달하기 위해 PLAIN 사용자 이름과 암호 속성을 제공해야 합니다. 클라이언트는 이러한 속성을 사용하여 클라이언트 ID와 시크릿 또는 사용자 이름 및 액세스 토큰을 전달합니다.
클라이언트 ID와 시크릿은 액세스 토큰을 가져오는 데 사용됩니다.
액세스 토큰은 암호 속성 값으로 전달됩니다. $accessToken: 접두사를 사용하거나 사용하지 않고 액세스 토큰을 전달합니다.
-
리스너 구성에서 토큰 끝점(
oauth.token.endpoint.uri)을 구성하는 경우 접두사가 필요합니다. -
리스너 구성에서 토큰 끝점(
oauth.token.endpoint.uri)을 구성하지 않으면 접두사가 필요하지 않습니다. Kafka 브로커는 암호를 원시 액세스 토큰으로 해석합니다.
암호 가 액세스 토큰으로 설정된 경우 사용자 이름은 Kafka 브로커가 액세스 토큰에서 얻는 것과 동일한 주체 이름으로 설정해야 합니다. oauth.username.claim,oauth.fallback.username.claim,oauth.fallback.username.prefix, oauth.userinfo.endpoint.uri 속성을 사용하여 리스너에서 사용자 이름 추출 옵션을 지정할 수 있습니다. 사용자 이름 추출 프로세스는 권한 부여 서버(특히 클라이언트 ID를 계정 이름에 매핑하는 방법)에 따라 다릅니다.
PLAIN을 통한 OAuth는 (더 이상 사용되지 않는) OAuth 2.0 암호 부여 메커니즘을 사용하여 사용자 이름과 암호(암호 부여) 전달을 지원하지 않습니다.
6.7.1.1. 속성 또는 변수를 사용하여 OAuth 2.0 구성 링크 복사링크가 클립보드에 복사되었습니다!
JAAS(Java Authentication and Authorization Service) 속성 또는 환경 변수를 사용하여 OAuth 2.0 설정을 구성할 수 있습니다.
-
JAAS 속성은
server.properties구성 파일에 구성되어listener.name의 키-값 쌍으로 전달됩니다.LISTENER-NAME.oauthbearer.sasl.jaas.config속성. 환경 변수를 사용하는 경우에도
listener.name.LISTENER-NAME.oauthbearer.sasl.jaas.config속성을server.properties파일에 제공해야 하지만 다른 JAAS 속성을 생략할 수 있습니다.대문자 또는 대문자 환경 변수 이름 지정 규칙을 사용할 수 있습니다.
Apache Kafka OAuth 2.0 라이브러리의 Streams는 다음으로 시작하는 속성을 사용합니다.
-
OAuth.인증 구성 -
Strimzi.OAuth 2.0 인증 구성
6.7.2. OAuth 2.0 Kafka 브로커 구성 링크 복사링크가 클립보드에 복사되었습니다!
OAuth 2.0 인증에 대한 Kafka 브로커 구성은 다음과 같습니다.
- 권한 부여 서버에서 OAuth 2.0 클라이언트 생성
- Kafka 클러스터에서 OAuth 2.0 인증 구성
권한 부여 서버와 관련하여 Kafka 브로커 및 Kafka 클라이언트는 모두 OAuth 2.0 클라이언트로 간주됩니다.
6.7.2.1. 권한 부여 서버의 OAuth 2.0 클라이언트 구성 링크 복사링크가 클립보드에 복사되었습니다!
세션 시작 중에 수신된 토큰을 확인하도록 Kafka 브로커를 구성하려면 다음 클라이언트 인증 정보가 활성화된 권한 부여 서버로 구성된 OAuth 2.0 클라이언트 정의를 생성하는 것이 좋습니다.
-
kafka-broker의 클라이언트 ID(예:) - 인증 메커니즘으로 클라이언트 ID 및 시크릿
권한 부여 서버의 비공개 인트로스펙션 엔드포인트를 사용하는 경우에만 클라이언트 ID와 시크릿을 사용해야 합니다. 인증 정보는 빠른 로컬 JWT 토큰 검증과 마찬가지로 공용 권한 부여 서버 끝점을 사용할 때 필요하지 않습니다.
6.7.2.2. Kafka 클러스터의 OAuth 2.0 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터에서 OAuth 2.0 인증을 사용하려면 Kafka server.properties 파일에서 Kafka 클러스터에 대한 OAuth 인증 리스너 구성을 활성화합니다. 최소 구성이 필요합니다. TLS가 브루커 간 통신에 사용되는 TLS 리스너를 구성할 수도 있습니다.
다음 방법 중 하나를 사용하여 권한 부여 서버에서 토큰 검증을 위해 브로커를 구성할 수 있습니다.
- 빠른 로컬 토큰 검증: 서명된 JWT 형식의 액세스 토큰과 함께 JWKS 끝점
- 인트로스펙션 끝점
OAUTHBEARER 또는 PLAIN 인증을 구성하거나 둘 다 구성할 수 있습니다.
다음 예제에서는 글로벌 리스너 구성을 적용하는 최소 구성을 보여줍니다. 즉, 애플리케이션 클라이언트와 동일한 리스너 간 통신이 진행됩니다.
이 예제에서는 또한 listener.name을 지정하는 특정 리스너에 대한 OAuth 2.0 구성을 보여줍니다. sasl.enabled.mechanisms 대신LISTENER-NAME . sasl.enabled.mechanisms. LISTENER-NAME 은 리스너의 대소문자를 구분하지 않는 이름입니다. 여기서는 리스너 CLIENT 의 이름을 지정하므로 속성 이름은 listener.name.client.sasl.enabled.mechanisms 입니다.
이 예에서는 OAUTHBEARER 인증을 사용합니다.
예: JWKS 엔드포인트를 사용한 OAuth 2.0 인증에 대한 최소 리스너 구성
- 1
- SASL을 통해 인증 정보를 교환하기 위한 OAUTHBEARER 메커니즘을 활성화합니다.
- 2
- 클라이언트 애플리케이션이 연결할 리스너를 구성합니다. 시스템
호스트이름은 공개된 호스트 이름으로 사용되며, 다시 연결하기 위해 클라이언트가 확인해야 합니다. 이 예제에서는 리스너의 이름이CLIENT로 지정됩니다. - 3
- 리스너의 채널 프로토콜을 지정합니다.
SASL_SSL은 TLS용입니다.SASL_PLAINTEXT는 암호화되지 않은 연결(TLS 없음)에 사용되지만 TCP 연결 계층에서 도청 및 인터셉션의 위험이 있습니다. - 4
- CLIENT 리스너의 OAUTHBEARER 메커니즘을 지정합니다. 클라이언트 이름(
CLIENT)은 일반적으로listeners속성에 대문자로 지정되며,listener.name.client 속성의 경우 소문자(listener.name.client) 및listener.name.client.*속성의 일부인 경우 소문자로 지정됩니다. - 5
- broker 간 통신을 위한 OAUTHBEARER 메커니즘을 지정합니다.
- 6
- broker 간 통신을 위한 리스너를 지정합니다. 구성이 유효하려면 사양이 필요합니다.
- 7
- 클라이언트 리스너에 OAuth 2.0 인증을 구성합니다.
- 8
- 클라이언트 및 브랜드 간 통신에 대한 인증 설정을 구성합니다.
oauth.client.id,oauth.client.secret및auth.token.endpoint.uri속성은broker 간 구성과 관련이 있습니다. - 9
- 유효한 발행자 URI입니다. 이 발행자가 발행한 액세스 토큰만 허용됩니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME.
- 10
- JWKS 엔드포인트 URL입니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/certs.
- 11
- 토큰에 실제 사용자 이름이 포함된 토큰 클레임(또는 키)입니다. 사용자 이름은 사용자를 식별하는 데 사용되는 주체 입니다. 값은 인증 흐름 및 사용된 권한 부여 서버에 따라 달라집니다. 필요한 경우
"['user.info'].['user.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 사용자 이름을 검색할 수 있습니다. - 12
- 모든 브로커에 대해 동일한 Kafka 브로커의 클라이언트 ID입니다. 이 클라이언트는 권한 부여 서버에
kafka-broker로 등록된 클라이언트 입니다. - 13
- 모든 브로커에 대해 동일한 Kafka 브로커의 시크릿입니다.
- 14
- 권한 부여 서버의 OAuth 2.0 토큰 끝점 URL입니다. 프로덕션의 경우 항상
https://urls를 사용합니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token. - 15
- broker 간 통신을 위해 OAuth 2.0 인증에만 필요합니다.
- 16
- (선택 사항) 토큰이 만료될 때 세션 만료를 강제 적용하고 Kafka 재인증 메커니즘 도 활성화합니다. 지정된 값이 액세스 토큰이 만료될 때까지 남은 시간보다 작으면 클라이언트는 실제 토큰 만료 전에 다시 인증해야 합니다. 기본적으로 액세스 토큰이 만료되고 클라이언트가 재인증을 시도하지 않으면 세션이 만료되지 않습니다.
다음 예제에서는 TLS 리스너에 대한 최소 구성을 보여줍니다. 여기서 TLS는 브루커 간 통신에 사용됩니다.
예: OAuth 2.0 인증을 위한 TLS 리스너 구성
- 1
- broker 간 통신 및 클라이언트 애플리케이션에는 별도의 구성이 필요합니다.
- 2
- TLS를 사용하도록 REPLICATION 리스너와 CLIENT 리스너가 암호화되지 않은 채널을 통해 SASL을 사용하도록 구성합니다. 클라이언트는 프로덕션 환경에서 암호화된 채널(
SASL_SSL)을 사용할 수 있습니다. - 3
ssl.속성은 TLS 구성을 정의합니다.- 4
- 임의 번호 생성기 구현. 설정하지 않으면 Java 플랫폼 SDK 기본값이 사용됩니다.
- 5
- 호스트 이름 확인 빈 문자열로 설정하면 호스트 이름 확인이 해제됩니다. 설정되지 않은 경우 기본값은
HTTPS로, 서버 인증서에 대한 호스트 이름 확인을 적용합니다. - 6
- 리스너의 키 저장소 경로입니다.
- 7
- 리스너의 신뢰 저장소 경로입니다.
- 8
- TLS 연결을 설정할 때 REPLICATION 리스너의 클라이언트가 클라이언트 인증서로 인증되도록 지정합니다(브러 간 연결에 사용됨).
- 9
- OAuth 2.0의 CLIENT 리스너를 구성합니다. 권한 부여 서버와의 연결은 보안 HTTPS 연결을 사용해야 합니다.
다음 예제에서는 SASL을 통해 인증 정보를 교환하기 위한 PLAIN 인증 메커니즘을 사용한 OAuth 2.0 인증에 대한 최소 구성을 보여줍니다. 빠른 로컬 토큰 검증이 사용됩니다.
예: PLAIN 인증을 위한 최소 리스너 구성
- 1
- 클라이언트 애플리케이션이 연결할 리스너(이 예에서는
CLIENT)를 구성합니다. 시스템호스트이름은 공개된 호스트 이름으로 사용되며, 다시 연결하기 위해 클라이언트가 확인해야 합니다. 이 리스너는 유일하게 구성된 리스너이므로 상호 통신에도 사용됩니다. - 2
- 암호화되지 않은 채널을 통해 SASL을 사용하도록 예제
CLIENT리스너를 구성합니다. 프로덕션 환경에서 클라이언트는 TCP 연결 계층에서 도청 및 인터셉션을 방지하기 위해 암호화된 채널(SASL_SSL)을 사용해야 합니다. - 3
- SASL 및 OAUTHBEARER 를 통해 인증 정보를 교환하는 데 PLAIN 인증 메커니즘을 활성화합니다. OAUTHBEARER는 또한 상호 통신에 필요하기 때문에 지정됩니다. Kafka 클라이언트는 연결할 메커니즘을 선택할 수 있습니다.
- 4
- broker 간 통신을 위한 OAUTHBEARER 인증 메커니즘을 지정합니다.
- 5
- broker 간 통신을 위한 리스너(이 예에서는
CLIENT)를 지정합니다. 구성이 유효한 데 필요합니다. - 6
- OAUTHBEARER 메커니즘에 대한 서버 콜백 핸들러를 구성합니다.
- 7
- OAUTHBEARER 메커니즘을 사용하여 클라이언트 및 브랜드 간 통신에 대한 인증 설정을 구성합니다.
oauth.client.id,oauth.client.secret및oauth.token.endpoint.uri속성은broker 간 구성과 관련이 있습니다. - 8
- 유효한 발행자 URI입니다. 이 발행자의 액세스 토큰만 허용됩니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME
- 9
- JWKS 엔드포인트 URL입니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/certs
- 10
- 토큰에 실제 사용자 이름이 포함된 토큰 클레임(또는 키)입니다. 사용자 이름은 사용자를 식별하는 데 사용되는 주체 입니다. 값은 인증 흐름 및 사용된 권한 부여 서버에 따라 달라집니다. 필요한 경우
"['user.info'].['user.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 사용자 이름을 검색할 수 있습니다. - 11
- 모든 브로커에 대해 동일한 Kafka 브로커의 클라이언트 ID입니다. 이 클라이언트는 권한 부여 서버에
kafka-broker로 등록된 클라이언트 입니다. - 12
- Kafka 브로커의 시크릿(모든 브로커에 대해 동일)
- 13
- 권한 부여 서버의 OAuth 2.0 토큰 끝점 URL입니다. 프로덕션의 경우 항상
https://urls를 사용합니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token - 14
- 브랜드 간 통신을 위해 OAuth 2.0 인증을 활성화합니다.
- 15
- PLAIN 인증에 대한 서버 콜백 처리기를 구성합니다.
- 16
- PLAIN 인증을 사용하여 클라이언트 통신에 대한 인증 설정을 구성합니다.
OAuth.token.endpoint.uri는 OAuth 2.0 클라이언트 인증 정보 메커니즘을 사용하여 PLAIN을 통해 OAuth 2.0 을 활성화하는 선택적 속성입니다. - 17
- 유효한 발행자 URI입니다. 이 발행자의 액세스 토큰만 허용됩니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME
- 18
- JWKS 엔드포인트 URL입니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/certs
- 19
- 토큰에 실제 사용자 이름이 포함된 토큰 클레임(또는 키)입니다. 사용자 이름은 사용자를 식별하는 데 사용되는 주체 입니다. 값은 인증 흐름 및 사용된 권한 부여 서버에 따라 달라집니다. 필요한 경우
"['user.info'].['user.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 사용자 이름을 검색할 수 있습니다. - 20
- 권한 부여 서버의 OAuth 2.0 토큰 끝점 URL입니다. PLAIN 메커니즘에 대한 추가 구성입니다. 지정된 경우 클라이언트는
$accessToken:접두사를 사용하여암호로액세스 토큰을 전달하여 PLAIN을 통해 인증할 수 있습니다.프로덕션의 경우 항상
https://urls를 사용합니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token. - 21
- (선택 사항) 토큰이 만료될 때 세션 만료를 강제 적용하고 Kafka 재인증 메커니즘 도 활성화합니다. 지정된 값이 액세스 토큰이 만료될 때까지 남은 시간보다 작으면 클라이언트는 실제 토큰 만료 전에 다시 인증해야 합니다. 기본적으로 액세스 토큰이 만료되고 클라이언트가 재인증을 시도하지 않으면 세션이 만료되지 않습니다.
6.7.2.3. 빠른 로컬 JWT 토큰 검증 구성 링크 복사링크가 클립보드에 복사되었습니다!
빠른 로컬 JWT 토큰 검증은 JWT 토큰 서명을 로컬로 확인합니다.
로컬 검사에서는 토큰이 있는지 확인합니다.
-
액세스 토큰에 대한
Bearer의 (typ) 클레임 값을 포함하여 유형 준수 - 유효함 (종료되지 않음)
-
유효한IssuerURI와 일치하는 발행자가 있음
권한 부여 서버에서 발행하지 않은 토큰이 거부되도록 리스너를 구성할 때 유효한 발행자 URI 를 지정합니다.
빠른 로컬 JWT 토큰 검증 중에 권한 부여 서버에 연결할 필요가 없습니다. OAuth 2.0 권한 부여 서버에서 노출하는 JWKs 엔드포인트 URI 를 지정하여 빠른 로컬 JWT 토큰 검증을 활성화합니다. 엔드포인트에는 Kafka 클라이언트가 인증 정보로 전송되는 서명된 JWT 토큰의 유효성을 검사하는 데 사용되는 공개 키가 포함되어 있습니다.
권한 부여 서버와의 모든 통신은 HTTPS를 사용하여 수행해야 합니다.
TLS 리스너의 경우 인증서 신뢰 저장소를 구성하고 truststore 파일을 가리킬 수 있습니다.
빠른 로컬 JWT 토큰 검증을 위한 속성의 예
- 1
- 유효한 발행자 URI입니다. 이 발행자가 발행한 액세스 토큰만 허용됩니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME.
- 2
- JWKS 엔드포인트 URL입니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/certs.
- 3
- 엔드포인트 새로 고침 간격(기본값 300).
- 4
- JWKS 공개 키를 새로 고치는 시도 사이의 최소 일시 중지 시간(초)입니다. 알 수 없는 서명 키가 발생하면 JWKS 키 새로 고침이 마지막 새로 고침 시도 이후 지정된 일시 중지를 사용하여 정기적인 스케줄 외부에 예약됩니다. 키를 새로 고치는 것은 exponential backoff 규칙을 따르고,
oauth.jwks.refresh.seconds에 도달할 때까지 일시 중지를 늘리면 실패한 새로 고침을 다시 시도합니다. 기본값은 1입니다. - 5
- JWKs 인증서가 만료되기 전에 유효한 것으로 간주됩니다. 기본값은
360초입니다. 더 긴 시간을 지정하면 취소된 인증서에 대한 액세스를 허용할 위험을 고려하십시오. - 6
- 토큰에 실제 사용자 이름이 포함된 토큰 클레임(또는 키)입니다. 사용자 이름은 사용자를 식별하는 데 사용되는 주체 입니다. 값은 인증 흐름 및 사용된 권한 부여 서버에 따라 달라집니다. 필요한 경우
"['user.info'].['user.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 사용자 이름을 검색할 수 있습니다. - 7
- TLS 구성에 사용되는 신뢰 저장소의 위치입니다.
- 8
- 신뢰 저장소에 액세스하기 위한 암호입니다.
- 9
- PKCS #12 형식의 truststore 유형입니다.
6.7.2.4. OAuth 2.0 인트로스펙션 엔드 포인트 구성 링크 복사링크가 클립보드에 복사되었습니다!
OAuth 2.0 인트로스펙션 엔드포인트를 사용하는 토큰 검증은 수신된 액세스 토큰을 불투명으로 처리합니다. Kafka 브로커는 검증에 필요한 토큰 정보로 응답하는 인트로스펙션 엔드포인트에 액세스 토큰 토큰을 보냅니다. 중요한 것은 특정 액세스 토큰이 유효한 경우 최신 정보와 토큰이 만료되는 시기에 대한 정보를 반환합니다.
OAuth 2.0 인트로스펙션 기반 검증을 구성하려면 빠른 로컬 JWT 토큰 검증에 지정된 JWKs 엔드포인트 URI 대신 인트로스펙션 엔드포인트 URI를 지정합니다. 인증 서버에 따라 인트로스펙션 엔드포인트가 일반적으로 보호되므로 일반적으로 클라이언트 ID 및 클라이언트 시크릿 을 지정해야 합니다.
인트로스펙션 끝점의 속성 예
- 1
- OAuth 2.0 인트로스펙션 엔드포인트 URI입니다. 예: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token/introspect.
- 2
- Kafka 브로커의 클라이언트 ID입니다.
- 3
- Kafka 브로커의 시크릿입니다.
- 4
- TLS 구성에 사용되는 신뢰 저장소의 위치입니다.
- 5
- 신뢰 저장소에 액세스하기 위한 암호입니다.
- 6
- PKCS #12 형식의 truststore 유형입니다.
- 7
- 토큰에 실제 사용자 이름이 포함된 토큰 클레임(또는 키)입니다. 사용자 이름은 사용자를 식별하는 데 사용되는 주체 입니다. 값은 인증 흐름 및 사용된 권한 부여 서버에 따라 달라집니다. 필요한 경우
"['user.info'].['user.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 사용자 이름을 검색할 수 있습니다.
6.7.3. Kafka 브로커에 대한 세션 재인증 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클라이언트와 Kafka 브로커 간의 OAuth 2.0 세션에 Kafka 세션 재인증 을 사용하도록 OAuth 리스너를 구성할 수 있습니다. 이 메커니즘은 정의된 기간 후에 클라이언트와 브로커 간에 인증된 세션 만료를 적용합니다. 세션이 만료되면 클라이언트는 기존 연결을 삭제하는 대신 다시 사용하여 새 세션을 즉시 시작합니다.
세션 재인증은 기본적으로 비활성화되어 있습니다. server.properties 파일에서 이를 활성화할 수 있습니다. OAUTHBEARER 또는 PLAIN이 SASL 메커니즘으로 활성화된 TLS 리스너에 대해 connections.max.reauth.ms 속성을 설정합니다.
리스너당 세션 재인증을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
listener.name.client.oauthbearer.connections.max.reauth.ms=3600000
listener.name.client.oauthbearer.connections.max.reauth.ms=3600000
세션 재인증은 클라이언트에서 사용하는 Kafka 클라이언트 라이브러리에서 지원해야 합니다.
세션 재인증은 빠른 로컬 JWT 또는 인트로스펙션 엔드포인트 토큰 검증과 함께 사용할 수 있습니다.
클라이언트 재인증
브로커의 인증된 세션이 만료되면 연결을 삭제하지 않고 새 유효한 액세스 토큰을 브로커에 전송하여 클라이언트가 기존 세션으로 다시 인증해야 합니다.
토큰 유효성 검사가 성공하면 기존 연결을 사용하여 새 클라이언트 세션이 시작됩니다. 클라이언트가 다시 인증되지 않으면 메시지를 보내거나 수신하려고 하면 브로커가 연결을 종료합니다. Kafka 클라이언트 라이브러리 2.2 이상을 사용하는 Java 클라이언트는 브로커에서 재인증 메커니즘이 활성화된 경우 자동으로 다시 인증됩니다.
세션 재인증은 사용되는 경우 토큰 새로 고침에도 적용됩니다. 세션이 만료되면 클라이언트는 새로 고침 토큰을 사용하여 액세스 토큰을 새로 고칩니다. 그런 다음 클라이언트는 새 액세스 토큰을 사용하여 기존 연결을 다시 인증합니다.
OAUTHBEARER 및 PLAIN의 세션 만료
세션 재인증이 구성되면 OAUTHBEARER 및 PLAIN 인증에 대해 세션 만료가 다르게 작동합니다.
OAUTHBEARER 및 PLAIN의 경우 클라이언트 ID 및 시크릿 방법을 사용합니다.
-
브로커의 인증된 세션은 구성된
connections.max.reauth.ms에서 만료됩니다. - 구성된 시간 전에 액세스 토큰이 만료되면 세션이 이전에 만료됩니다.
장기 액세스 토큰 방법을 사용하는 PLAIN의 경우:
-
브로커의 인증된 세션은 구성된
connections.max.reauth.ms에서 만료됩니다. - 구성된 시간 전에 액세스 토큰이 만료되면 재인증이 실패합니다. 세션 재인증이 시도되었지만 PLAIN에는 토큰을 새로 고치는 메커니즘이 없습니다.
connections.max.reauth.ms 가 구성되지 않은 경우 OAUTHBEARER 및 PLAIN 클라이언트는 다시 인증할 필요 없이 브로커에 무기한 연결을 유지할 수 있습니다. 인증된 세션은 액세스 토큰 만료로 끝나지 않습니다. 그러나 예를 들어 keycloak 권한 부여를 사용하거나 사용자 정의 승인기를 설치하여 권한을 구성할 때 이를 고려할 수 있습니다.
6.7.4. OAuth 2.0 Kafka 클라이언트 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클라이언트는 다음 중 하나로 구성됩니다.
- 권한 부여 서버에서 유효한 액세스 토큰을 가져오는 데 필요한 인증 정보(클라이언트 ID 및 시크릿)
- 권한 부여 서버에서 제공하는 툴을 사용하여 얻은 유효한 장기 액세스 토큰 또는 새로 고침 토큰
Kafka 브로커로 전송된 유일한 정보는 액세스 토큰입니다. 액세스 토큰을 얻기 위해 권한 부여 서버로 인증하는 데 사용되는 인증 정보는 브로커로 전송되지 않습니다.
클라이언트에서 액세스 토큰을 가져올 때 권한 부여 서버와의 추가 통신이 필요하지 않습니다.
가장 간단한 메커니즘은 클라이언트 ID 및 시크릿을 사용한 인증입니다. 장기 액세스 토큰 또는 수명이 긴 새로 고침 토큰을 사용하면 권한 부여 서버 도구에 대한 추가 종속성이 있기 때문에 복잡성이 향상됩니다.
장기 액세스 토큰을 사용하는 경우 토큰의 최대 수명을 늘리려면 권한 부여 서버에서 클라이언트를 구성해야 할 수 있습니다.
Kafka 클라이언트가 액세스 토큰으로 직접 구성되지 않은 경우 클라이언트는 권한 부여 서버에 연결하여 Kafka 세션 시작 중에 액세스 토큰에 대한 인증 정보를 교환합니다. Kafka 클라이언트 교환:
- 클라이언트 ID 및 시크릿
- 클라이언트 ID, 새로 고침 토큰, 시크릿(선택 사항)
- 사용자 이름과 암호, 클라이언트 ID 및 시크릿 사용(선택 사항)
6.7.5. OAuth 2.0 클라이언트 인증 흐름 링크 복사링크가 클립보드에 복사되었습니다!
OAuth 2.0 인증 흐름은 기본 Kafka 클라이언트 및 Kafka 브로커 구성에 따라 다릅니다. 이 흐름은 사용된 권한 부여 서버에서도 지원해야 합니다.
Kafka 브로커 리스너 구성은 클라이언트가 액세스 토큰을 사용하여 인증하는 방법을 결정합니다. 클라이언트는 클라이언트 ID와 시크릿을 전달하여 액세스 토큰을 요청할 수 있습니다.
리스너가 PLAIN 인증을 사용하도록 구성된 경우 클라이언트는 클라이언트 ID 및 시크릿 또는 사용자 이름 및 액세스 토큰으로 인증할 수 있습니다. 이러한 값은 PLAIN 메커니즘의 사용자 이름 및 암호 속성으로 전달됩니다.
리스너 구성은 다음 토큰 검증 옵션을 지원합니다.
- 권한 부여 서버에 연결하지 않고도 JWT 서명 확인 및 로컬 토큰 인트로스펙션에 따라 빠른 로컬 토큰 검증을 사용할 수 있습니다. 권한 부여 서버는 토큰의 서명의 유효성을 검사하는 데 사용되는 공용 인증서가 있는 JWKS 엔드포인트를 제공합니다.
- 권한 부여 서버에서 제공하는 토큰 인트로스펙션 엔드포인트를 호출할 수 있습니다. 새 Kafka 브로커 연결이 설정될 때마다 브로커는 클라이언트에서 수신한 액세스 토큰을 권한 부여 서버로 전달합니다. Kafka 브로커는 토큰이 유효한지 여부를 확인하기 위해 응답을 확인합니다.
권한 부여 서버는 불투명 액세스 토큰만 사용할 수 있으므로 로컬 토큰 유효성 검사는 사용할 수 없습니다.
다음과 같은 인증 유형에 대해 Kafka 클라이언트 인증 정보를 구성할 수도 있습니다.
- 이전에 생성된 장기 액세스 토큰을 사용하여 로컬 액세스 직접
- 새 액세스 토큰을 발행하기 위해 권한 부여 서버와 연락합니다(클라이언트 ID와 시크릿 또는 새로 고침 토큰 또는 사용자 이름과 암호 사용)
6.7.5.1. SASL OAUTHBEARER 메커니즘을 사용한 클라이언트 인증 흐름의 예 링크 복사링크가 클립보드에 복사되었습니다!
SASL OAUTHBEARER 메커니즘을 사용하여 Kafka 인증에 다음 통신 흐름을 사용할 수 있습니다.
브로커에서 인증 서버에 검증을 위임하는 클라이언트 ID와 시크릿을 사용하는 클라이언트
- Kafka 클라이언트는 클라이언트 ID 및 시크릿을 사용하여 권한 부여 서버에서 액세스 토큰을 요청하고 선택적으로 새로 고침 토큰을 요청합니다. 또는 클라이언트는 사용자 이름과 암호를 사용하여 인증할 수 있습니다.
- 권한 부여 서버에서 새 액세스 토큰을 생성합니다.
- Kafka 클라이언트는 SASL OAUTHBEARER 메커니즘을 사용하여 액세스 토큰을 전달하여 Kafka 브로커로 인증합니다.
- Kafka 브로커는 자체 클라이언트 ID와 시크릿을 사용하여 권한 부여 서버에서 토큰 인트로스펙션 엔드포인트를 호출하여 액세스 토큰을 검증합니다.
- 토큰이 유효한 경우 Kafka 클라이언트 세션이 설정됩니다.
브로커가 빠른 로컬 토큰 검증을 수행하는 클라이언트 ID 및 시크릿을 사용하는 클라이언트
- Kafka 클라이언트는 클라이언트 ID 및 시크릿을 사용하여 토큰 끝점의 권한 부여 서버와 필요한 경우 새로 고침 토큰을 사용하여 인증합니다. 또는 클라이언트는 사용자 이름과 암호를 사용하여 인증할 수 있습니다.
- 권한 부여 서버에서 새 액세스 토큰을 생성합니다.
- Kafka 클라이언트는 SASL OAUTHBEARER 메커니즘을 사용하여 액세스 토큰을 전달하여 Kafka 브로커로 인증합니다.
- Kafka 브로커는 JWT 토큰 서명 검사 및 로컬 토큰 인트로스펙션을 사용하여 액세스 토큰을 로컬로 검증합니다.
브로커로 권한 부여 서버에 검증을 위임하는 장기 액세스 토큰을 사용하는 클라이언트
- Kafka 클라이언트는 SASL OAUTHBEARER 메커니즘을 사용하여 Kafka 브로커로 인증하여 장기 액세스 토큰을 전달합니다.
- Kafka 브로커는 자체 클라이언트 ID와 시크릿을 사용하여 권한 부여 서버에서 토큰 인트로스펙션 엔드포인트를 호출하여 액세스 토큰을 검증합니다.
- 토큰이 유효한 경우 Kafka 클라이언트 세션이 설정됩니다.
브로커가 빠른 로컬 유효성 검사를 수행하는 장기 액세스 토큰을 사용하는 클라이언트
- Kafka 클라이언트는 SASL OAUTHBEARER 메커니즘을 사용하여 Kafka 브로커로 인증하여 장기 액세스 토큰을 전달합니다.
- Kafka 브로커는 JWT 토큰 서명 검사 및 로컬 토큰 인트로스펙션을 사용하여 액세스 토큰을 로컬로 검증합니다.
빠른 로컬 JWT 토큰 서명 검증은 토큰이 취소된 경우 권한 부여 서버와 확인되지 않으므로 수명이 짧은 토큰에만 적합합니다. 토큰 만료는 토큰에 기록되지만 취소는 언제든지 발생할 수 있으므로 권한 부여 서버에 연결하지 않아도 됩니다. 발행된 토큰은 만료될 때까지 유효한 것으로 간주됩니다.
6.7.5.2. SASL PLAIN 메커니즘을 사용한 클라이언트 인증 흐름의 예 링크 복사링크가 클립보드에 복사되었습니다!
OAuth PLAIN 메커니즘을 사용하여 Kafka 인증에 다음 통신 흐름을 사용할 수 있습니다.
브로커가 클라이언트의 액세스 토큰을 가져오는 클라이언트 ID와 시크릿을 사용하는 클라이언트
-
Kafka 클라이언트는 사용자 이름으로
clientId를 전달하고시크릿을 암호로 전달합니다. -
Kafka 브로커는 토큰 끝점을 사용하여
clientId및secret을 권한 부여 서버에 전달합니다. - 인증 서버는 새로운 액세스 토큰을 반환하거나 클라이언트 자격 증명이 유효하지 않은 경우 오류를 반환합니다.
Kafka 브로커는 다음 방법 중 하나로 토큰을 검증합니다.
- 토큰 인트로스펙션 엔드포인트가 지정된 경우 Kafka 브로커는 권한 부여 서버에서 엔드포인트를 호출하여 액세스 토큰을 검증합니다. 토큰 유효성 검사가 성공하면 세션이 설정됩니다.
- 로컬 토큰 인트로스펙션이 사용되는 경우 권한 부여 서버에 대한 요청이 이루어지지 않습니다. Kafka 브로커는 JWT 토큰 서명 검사를 사용하여 액세스 토큰을 로컬로 검증합니다.
클라이언트 ID 및 시크릿 없이 장기 액세스 토큰을 사용하는 클라이언트
- Kafka 클라이언트는 사용자 이름과 암호를 전달합니다. 암호는 수동으로 가져와 클라이언트를 실행하기 전에 구성한 액세스 토큰의 값을 제공합니다.
이 암호는 Kafka 브로커 리스너가 인증을 위해 토큰 끝점으로 구성되었는지 여부에 따라
$accessToken:문자열 접두사와 함께 전달됩니다.-
토큰 끝점이 구성된 경우 브로커에 password 매개변수에 클라이언트 시크릿이 아닌 액세스 토큰이 포함되어 있음을 알 수 있도록 암호 앞에
$accessToken:가 붙여야 합니다. Kafka 브로커는 사용자 이름을 계정 사용자 이름으로 해석합니다. -
토큰 끝점이 Kafka 브로커 리스너에 구성되지 않은 경우(
no-client-credentials 모드사용) 암호는 접두사 없이 액세스 토큰을 제공해야 합니다. Kafka 브로커는 사용자 이름을 계정 사용자 이름으로 해석합니다. 이 모드에서 클라이언트는 클라이언트 ID와 시크릿을 사용하지 않으며password매개변수는 항상 원시 액세스 토큰으로 해석됩니다.
-
토큰 끝점이 구성된 경우 브로커에 password 매개변수에 클라이언트 시크릿이 아닌 액세스 토큰이 포함되어 있음을 알 수 있도록 암호 앞에
Kafka 브로커는 다음 방법 중 하나로 토큰을 검증합니다.
- 토큰 인트로스펙션 엔드포인트가 지정된 경우 Kafka 브로커는 권한 부여 서버에서 엔드포인트를 호출하여 액세스 토큰을 검증합니다. 토큰 유효성 검사가 성공하면 세션이 설정됩니다.
- 로컬 토큰 인트로스펙션이 사용되는 경우 권한 부여 서버에 대한 요청이 없습니다. Kafka 브로커는 JWT 토큰 서명 검사를 사용하여 액세스 토큰을 로컬로 검증합니다.
6.7.6. OAuth 2.0 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
OAuth 2.0은 Kafka 클라이언트와 Apache Kafka 구성 요소의 스트림 간의 상호 작용에 사용됩니다.
Apache Kafka에 OAuth 2.0을 사용하려면 다음을 수행해야 합니다.
6.7.6.1. Red Hat Single Sign-On을 OAuth 2.0 인증 서버로 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Red Hat Single Sign-On을 인증 서버로 배포하고 Apache Kafka용 Streams와의 통합을 위해 구성하는 방법을 설명합니다.
권한 부여 서버는 인증 및 권한 부여와 사용자, 클라이언트 및 권한 관리를 위한 중앙 지점을 제공합니다. Red Hat Single Sign-On에는 영역이 별도의 사용자, 클라이언트, 권한 및 기타 구성을 나타내는 영역 개념이 있습니다. 기본 마스터 영역을 사용하거나 새 마스터 영역을 생성할 수 있습니다. 각 영역은 자체 OAuth 2.0 엔드포인트를 노출합니다. 즉, 애플리케이션 클라이언트와 애플리케이션 서버가 모두 동일한 영역을 사용해야 합니다.
Apache Kafka용 Streams와 함께 OAuth 2.0을 사용하려면 Red Hat Single Sign-On을 배포하여 인증 영역을 생성하고 관리합니다.
Red Hat Single Sign-On이 이미 배포된 경우 배포 단계를 건너뛰고 현재 배포를 사용할 수 있습니다.
사전 준비 사항
Red Hat Single Sign-On 사용에 대해 잘 알고 있어야 합니다.
설치 및 관리 지침은 다음을 참조하십시오.
사전 요구 사항
- Apache Kafka 및 Kafka의 스트림이 실행 중입니다.
Red Hat Single Sign-On 배포의 경우:
프로세스
Red Hat Single Sign-On 설치.
ZIP 파일에서 설치하거나 RPM을 사용하여 설치할 수 있습니다.
Red Hat Single Sign-On 관리 콘솔에 로그인하여 Apache Kafka용 Streams 2.0 정책을 생성합니다.
Red Hat Single Sign-On을 배포할 때 로그인 세부 정보가 제공됩니다.
영역을 생성하고 활성화합니다.
기존 마스터 영역을 사용할 수 있습니다.
- 필요한 경우 영역의 세션 및 토큰 타임아웃을 조정합니다.
-
kafka-broker라는 클라이언트를 생성합니다. 설정 탭에서 다음을 설정합니다.
-
액세스 유형 (
Confidential) -
이 클라이언트에 대한 웹 로그인을 비활성화하려면 표준 흐름을
OFF로 활성화 -
이 클라이언트가 고유한 이름으로 인증할 수 있도록 활성화됨
-
액세스 유형 (
- 계속하기 전에 저장을 클릭합니다.
- 탭에서 Apache Kafka Kafka 클러스터 구성을 위해 Streams에서 사용할 시크릿을 기록합니다.
Kafka 브로커에 연결할 모든 애플리케이션 클라이언트에 대해 클라이언트 생성 단계를 반복합니다.
각 새 클라이언트에 대한 정의를 생성합니다.
구성에서 이름을 클라이언트 ID로 사용합니다.
다음에 수행할 작업
권한 부여 서버를 배포하고 구성한 후 OAuth 2.0을 사용하도록 Kafka 브로커를 구성합니다.
6.7.6.2. Kafka 브로커에 대한 OAuth 2.0 지원 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 브로커 리스너가 권한 부여 서버를 사용하여 OAuth 2.0 인증을 사용하도록 Kafka 브로커를 구성하는 방법을 설명합니다.
TLS 리스너 구성을 통해 암호화된 인터페이스를 통해 OAuth 2.0을 사용하는 것이 좋습니다. 일반 리스너는 권장되지 않습니다.
선택한 권한 부여 서버를 지원하는 속성과 구현 중인 권한 부여 유형을 사용하여 Kafka 브로커를 구성합니다.
시작하기 전
Kafka 브로커 리스너의 구성 및 인증에 대한 자세한 내용은 다음을 참조하십시오.
리스너 구성에 사용되는 속성에 대한 설명은 다음을 참조하십시오.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- OAuth 2.0 인증 서버가 배포되었습니다.
프로세스
server.properties파일에서 Kafka 브로커 리스너 구성을 구성합니다.예를 들어 OAUTHBEARER 메커니즘을 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow broker 연결 설정을
listener.name.client.oauthbearer.sasl.jaas.config의 일부로 구성합니다.이 예제에서는 연결 구성 옵션을 보여줍니다.
예 1: JWKS 엔드포인트 구성을 사용한 로컬 토큰 검증
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예 2: OAuth 2.0 인트로스펙션 끝점을 통해 인증 서버에 토큰 검증 위임
listener.name.client.oauthbearer.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.introspection.endpoint.uri="https://<oauth_server_address>/auth/realms/<realm_name>/protocol/openid-connect/introspection" \ # ...
listener.name.client.oauthbearer.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.introspection.endpoint.uri="https://<oauth_server_address>/auth/realms/<realm_name>/protocol/openid-connect/introspection" \ # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 필요한 경우 권한 부여 서버에 대한 액세스를 구성합니다.
서비스 메시 와 같은 기술을 사용하여 컨테이너 외부의 보안 채널을 구성하지 않는 한 일반적으로 프로덕션 환경에 이 단계가 필요합니다.
보안 권한 부여 서버에 연결하기 위한 사용자 정의 신뢰 저장소를 제공합니다. 권한 부여 서버에 액세스하려면 항상 SSL이 필요합니다.
속성을 설정하여 신뢰 저장소를 구성합니다.
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서 호스트 이름이 액세스 URL 호스트 이름과 일치하지 않으면 인증서 호스트 이름 검증을 끌 수 있습니다.
oauth.ssl.endpoint.identification.algorithm=""
oauth.ssl.endpoint.identification.algorithm=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 검사를 통해 권한 부여 서버에 대한 클라이언트 연결이 정품인지 확인합니다. 비프로덕션 환경에서 검증을 해제할 수 있습니다.
선택한 인증 흐름에 따라 추가 속성을 구성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 권한 부여 서버의 OAuth 2.0 토큰 끝점 URL입니다. 프로덕션의 경우 항상
https://urls를 사용합니다.KeycloakAuthorizer를 사용하거나 OAuth 2.0이 활성화된 리스너가 뇌 간 통신에 사용되는 경우 필요합니다. - 2
- (선택 사항) 사용자 정의 클레임 검사. 검증 중에 JWT 액세스 토큰에 추가 사용자 지정 규칙을 적용하는 JsonPath 필터 쿼리입니다. 액세스 토큰에 필요한 데이터가 포함되어 있지 않으면 거부됩니다. 인트로스펙션 엔드포인트 방법을 사용하는 경우 사용자 정의 검사가 인트로스펙션 엔드포인트 응답 JSON에 적용됩니다.
- 3
- (선택 사항) 토큰 끝점에 전달되는
scope매개변수입니다. 범위는 broker 간 인증을 위한 액세스 토큰을 가져올 때 사용됩니다.clientId및secret을 사용하는 PLAIN 클라이언트 인증의 OAuth 2.0용 클라이언트 이름에도 사용됩니다. 이는 권한 부여 서버에 따라 토큰과 토큰의 콘텐츠에만 영향을 미칩니다. 리스너의 토큰 검증 규칙에는 영향을 미치지 않습니다. - 4
- (선택 사항) Audience 확인 권한 부여 서버가
aud(audience) 클레임을 제공하고 대상 검사를 적용하려는 경우ouath.check.audience를true로 설정합니다. 대상 검사에서는 의도된 토큰 수신자를 식별합니다. 결과적으로 Kafka 브로커는aud클레임에clientId가 없는 토큰을 거부합니다. 기본값은false입니다. - 5
- (선택 사항) 토큰 끝점에 전달되는
대상매개변수입니다. 대상 은broker 간 인증을 위한 액세스 토큰을 가져올 때 사용됩니다.clientId및secret을 사용하는 PLAIN 클라이언트 인증의 OAuth 2.0용 클라이언트 이름에도 사용됩니다. 이는 권한 부여 서버에 따라 토큰과 토큰의 콘텐츠에만 영향을 미칩니다. 리스너의 토큰 검증 규칙에는 영향을 미치지 않습니다. - 6
- 유효한 발행자 URI입니다. 이 발행자가 발행한 액세스 토큰만 허용됩니다. (필수 사항)
- 7
- 모든 브로커에 대해 동일한 Kafka 브로커의 구성된 클라이언트 ID입니다. 이 클라이언트는 권한 부여 서버에
kafka-broker로 등록된 클라이언트 입니다. 인트로스펙션 엔드포인트가 토큰 검증에 사용되거나KeycloakAuthorizer가 사용되는 경우 필요합니다. - 8
- 모든 브로커에 대해 동일한 Kafka 브로커에 대해 구성된 시크릿입니다. 브로커가 권한 부여 서버에 인증해야 하는 경우 클라이언트 시크릿에 액세스 토큰 또는 새로 고침 토큰을 지정해야 합니다.
- 9
- (선택 사항) 권한 부여 서버에 연결할 때 연결 시간 초과(초)입니다. 기본값은 60입니다.
- 10
- (선택 사항) 권한 부여 서버에 연결할 때 읽기 제한 시간(초)입니다. 기본값은 60입니다.
- 11
- 권한 부여 서버에 실패한 HTTP 요청을 재시도하는 최대 횟수입니다. 기본값은 0입니다. 즉, 재시도가 수행되지 않습니다. 이 옵션을 효과적으로 사용하려면
oauth.connect.timeout.seconds및oauth.read.timeout.seconds옵션의 시간 초과 시간을 줄이는 것이 좋습니다. 그러나 재시도하면 현재 작업자 스레드를 다른 요청에 사용할 수 없게 될 수 있으며 요청이 너무 많으면 Kafka 브로커가 응답하지 않을 수 있습니다. - 12
- 권한 부여 서버에 실패한 HTTP 요청을 다시 시도하기 전에 대기하는 시간입니다. 기본적으로 이 시간은 0으로 설정되어 있으므로 일시 중지가 적용되지 않습니다. 이는 실패한 요청을 유발하는 많은 문제가 요청당 네트워크 결함 또는 프록시 문제로 인해 신속하게 해결할 수 있기 때문입니다. 그러나 권한 부여 서버가 과부하가 발생하거나 트래픽이 많은 경우 이 옵션을 100ms 이상으로 설정하여 서버의 부하를 줄이고 성공적인 재시도 가능성을 높일 수 있습니다.
- 13
- JWT 토큰 또는 인트로스펙션 엔드포인트 응답에서 그룹 정보를 추출하는 데 사용되는 JsonPath 쿼리입니다. 기본적으로 설정되지 않습니다. 사용자 지정 작성자가 사용자 그룹을 기반으로 권한 부여 결정을 내리는 데 사용할 수 있습니다.
- 14
- 그룹으로 구분된 단일 문자열로 반환되는 경우 그룹 정보를 구문 분석하는 데 사용되는 구분 기호입니다. 기본값은 ',' (comma)입니다.
- 15
- (선택 사항)
oauth.include.accept.header를false로 설정하여 요청에서Accept헤더를 제거합니다. 헤더를 포함하면 권한 부여 서버와 통신할 때 문제가 발생하는 경우 이 설정을 사용할 수 있습니다.
OAuth 2.0 인증을 적용하는 방법과 사용 중인 인증 서버 유형에 따라 추가 구성 설정을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 권한 부여 서버에서
iss클레임을 제공하지 않으면 발급자 검사를 수행할 수 없습니다. 이 경우oauth.check.issuer를false로 설정하고oauth.valid.issuer.uri를 지정하지 마십시오. 기본값은true입니다. - 2
- 권한 부여 서버는 일반 사용자와 클라이언트를 모두 식별하는 단일 속성을 제공하지 않을 수 있습니다. 클라이언트가 자체 이름으로 인증하면 서버에서 클라이언트 ID 를 제공할 수 있습니다. 사용자가 사용자 이름과 암호를 사용하여 인증하는 경우 새로 고침 토큰 또는 액세스 토큰을 가져오기 위해 서버에서 클라이언트 ID 외에 username 속성을 제공할 수 있습니다. 기본 사용자 ID 속성을 사용할 수 없는 경우 사용할 사용자 이름 클레임(attribute)을 지정하려면 이 대체 옵션을 사용합니다. 필요한 경우
"['client.info'].['client.id']"와 같은 JsonPath 표현식을 사용하여 토큰 내의 중첩된 JSON 속성에서 대체 사용자 이름을 검색할 수 있습니다. - 3
oauth.fallback.username.claim이 적용되는 경우 사용자 이름 클레임 값과 대체 사용자 이름 클레임의 이름 충돌을 방지할 수도 있습니다.producer라는 클라이언트가 존재하지만producer라는 일반 사용자도 존재하는 상황을 고려하십시오. 이 속성을 사용하여 클라이언트의 사용자 ID에 접두사를 추가할 수 있습니다.- 4
- (
oauth.introspection.endpoint.uri) 사용 중인 권한 부여 서버에 따라 인트로스펙션 엔드 포인트가 토큰 유형 속성을 반환하거나 반환하지 않거나 다른 값을 포함할 수 있습니다. 인트로스펙션 끝점의 응답에 포함되어야 하는 유효한 토큰 유형 값을 지정할 수 있습니다. - 5
- (
oauth.introspection.endpoint.uri) 사용 시에만 적용할 수 있습니다. 인증 서버는 인트로스펙션 엔드포인트 응답에서 식별 가능한 정보를 제공하지 않기 위해 인증 서버를 구성하거나 구현할 수 있습니다. 사용자 ID를 얻으려면userinfo끝점의 URI를 폴백으로 구성할 수 있습니다.oauth.fallback.username.claim,oauth.fallback.username.claim,oauth.fallback.username.prefix설정은userinfo엔드포인트 응답에 적용됩니다.
다음에 수행할 작업
6.7.6.3. OAuth 2.0을 사용하도록 Kafka Java 클라이언트 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커와의 상호 작용에 OAuth 2.0을 사용하도록 Kafka 생산자 및 소비자 API를 구성합니다. 클라이언트 pom.xml 파일에 콜백 플러그인을 추가한 다음 OAuth 2.0에 대해 클라이언트를 구성합니다.
클라이언트 구성에 다음을 지정합니다.
SASL(Simple Authentication and Security Layer) 보안 프로토콜:
-
TLS 암호화 연결을 통한 인증을 위한
SASL_SSL 암호화되지 않은 연결을 통한 인증을 위한
SASL_PLAINTEXT프로덕션에는
SASL_SSL을 사용하고 로컬 개발에는SASL_PLAINTEXT를 사용하십시오.SASL_SSL을 사용하는 경우 추가ssl.truststore구성이 필요합니다. OAuth 2.0 권한 부여 서버에 대한 보안 연결(https://)을 위해서는 truststore 구성이 필요합니다. OAuth 2.0 권한 부여 서버를 확인하려면 인증 서버의 CA 인증서를 클라이언트 구성의 신뢰 저장소에 추가합니다. PEM 또는 PKCS #12 형식으로 신뢰 저장소를 구성할 수 있습니다.
-
TLS 암호화 연결을 통한 인증을 위한
Kafka SASL 메커니즘:
-
전달자 토큰을 사용하여 인증 정보 교환을 위한
OAUTHBEARER -
클라이언트 인증 정보(clientId + 시크릿) 또는 액세스 토큰을 전달하는
PLAIN
-
전달자 토큰을 사용하여 인증 정보 교환을 위한
SASL 메커니즘을 구현하는 JAAS(Java Authentication and Authorization Service) 모듈:
-
org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule은 OAuthbearer 메커니즘을 구현합니다. -
org.apache.kafka.common.security.plain.PlainLoginModule은 일반 메커니즘을 구현합니다.
OAuthbearer 메커니즘을 사용할 수 있으려면 사용자 정의
io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler클래스를 콜백 처리기로 추가해야 합니다.JaasClientOauthLoginCallbackHandler는 클라이언트 로그인 중에 토큰을 액세스하기 위해 권한 부여 서버로의 OAuth 콜백을 처리합니다. 이를 통해 자동 토큰 갱신을 통해 사용자 개입 없이 지속적인 인증을 보장할 수 있습니다. 또한 OAuth 2.0 암호 부여 방법을 사용하여 클라이언트의 로그인 인증 정보를 처리합니다.-
SASL 인증 속성은 다음 인증 방법을 지원합니다.
- OAuth 2.0 클라이언트 인증 정보
- OAuth 2.0 암호 부여(더 이상 사용되지 않음)
- 액세스 토큰
- 토큰 새로 고침
SASL 인증 속성을 JAAS 구성(
sasl.jaas.config및sasl.login.callback.handler.class)으로 추가합니다. 인증 속성을 구성하는 방법은 OAuth 2.0 권한 부여 서버에 액세스하기 위해 사용 중인 인증 방법에 따라 다릅니다. 이 절차에서 속성은 속성 파일에 지정 된 다음 클라이언트 구성에 로드됩니다.In this procedure, the properties are specified in a properties file, then loaded into the client configuration.
인증 속성을 환경 변수로 지정하거나 Java 시스템 속성으로 지정할 수도 있습니다. Java 시스템 속성의 경우 setProperty 를 사용하여 설정하고 -D 옵션을 사용하여 명령줄에서 전달할 수 있습니다.
사전 요구 사항
- Apache Kafka 및 Kafka의 스트림이 실행 중입니다.
- OAuth 2.0 권한 부여 서버가 Kafka 브로커에 대한 OAuth 액세스용으로 배포 및 구성됨
- Kafka 브로커는 OAuth 2.0으로 구성되어 있습니다.
프로세스
OAuth 2.0 지원이 포함된 클라이언트 라이브러리를 Kafka 클라이언트의
pom.xml파일에 추가합니다.<dependency> <groupId>io.strimzi</groupId> <artifactId>kafka-oauth-client</artifactId> <version>0.15.0.redhat-00006</version> </dependency>
<dependency> <groupId>io.strimzi</groupId> <artifactId>kafka-oauth-client</artifactId> <version>0.15.0.redhat-00006</version> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 속성 파일에 다음 구성을 지정하여 클라이언트 속성을 구성합니다.
- 보안 프로토콜
- SASL 메커니즘
사용 방법에 따른 JAAS 모듈 및 인증 속성
예를 들어
client.properties파일에 다음을 추가할 수 있습니다.클라이언트 인증 메커니즘 속성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- TLS 암호화 연결을 위한
SASL_SSL보안 프로토콜. 로컬 개발을 위해 암호화되지 않은 연결보다SASL_PLAINTEXT를 사용하십시오. - 2
OAUTHBEARER또는PLAIN으로 지정된 SASL 메커니즘 .- 3
- Kafka 클러스터에 대한 보안 액세스를 위한 신뢰 저장소 구성입니다.
- 4
- 권한 부여 서버 토큰 끝점의 URI입니다.
- 5
- 권한 부여 서버에서 클라이언트를 생성할 때 사용되는 이름인 클라이언트 ID입니다.
- 6
- 권한 부여 서버에서 클라이언트를 생성할 때 생성된 클라이언트 시크릿입니다.
- 7
- 위치에는 권한 부여 서버의 공개 키 인증서(
truststore.p12)가 포함되어 있습니다. - 8
- truststore에 액세스하기 위한 암호입니다.
- 9
- truststore 유형입니다.
- 10
- (선택 사항) 토큰 끝점에서 토큰을 요청하는
범위입니다. 권한 부여 서버에는 클라이언트가 범위를 지정해야 할 수 있습니다. - 11
- (선택 사항) 토큰 끝점에서 토큰을 요청하는 대상입니다.
권한 부여 서버에는 클라이언트가 대상을 지정해야 할 수 있습니다.
암호는 메커니즘 속성 부여
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 권한 부여 서버에서 클라이언트를 생성할 때 사용되는 이름인 클라이언트 ID입니다.
- 2
- (선택 사항) 권한 부여 서버에서 클라이언트를 생성할 때 생성된 클라이언트 시크릿입니다.
- 3
- 암호 부여 인증의 사용자 이름입니다. OAuth 암호 부여 구성(사용자 이름 및 암호)은 OAuth 2.0 암호 부여 방법을 사용합니다. 암호 부여를 사용하려면 제한된 권한이 있는 권한 부여 서버에서 클라이언트에 대한 사용자 계정을 만듭니다. 계정은 서비스 계정처럼 작동해야 합니다. 인증에 사용자 계정이 필요하지만 새로 고침 토큰을 사용하는 것이 좋습니다.
- 4
- 암호 부여 인증입니다.참고
SASL PLAIN은 OAuth 2.0 암호 부여 방법을 사용하여 사용자 이름과 암호(암호 부여)를 전달하는 것을 지원하지 않습니다.
토큰 속성에 액세스
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Kafka 클라이언트용 장기 액세스 토큰입니다.
토큰 속성 새로 고침
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OAUTH 2.0 인증의 클라이언트 속성을 Java 클라이언트 코드에 입력합니다.
클라이언트 속성의 입력 표시 예
Properties props = new Properties(); try (FileReader reader = new FileReader("client.properties", StandardCharsets.UTF_8)) { props.load(reader); }Properties props = new Properties(); try (FileReader reader = new FileReader("client.properties", StandardCharsets.UTF_8)) { props.load(reader); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka 클라이언트가 Kafka 브로커에 액세스할 수 있는지 확인합니다.
6.8. OAuth 2.0 토큰 기반 권한 부여 사용 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka의 스트림은 Red Hat Single Sign-On 인증 서비스를 통해 OAuth 2.0 토큰 기반 권한 사용을 지원하므로 보안 정책과 권한을 중앙에서 관리할 수 있습니다.
Red Hat Single Sign-On에 정의된 보안 정책 및 권한은 Kafka 브로커의 리소스에 대한 액세스 권한을 부여하는 데 사용됩니다. 사용자와 클라이언트는 Kafka 브로커에서 특정 작업을 수행하기 위해 액세스를 허용하는 정책과 일치합니다.
Kafka는 기본적으로 모든 사용자에게 브로커에 대한 전체 액세스를 허용하며 AclAuthorizer 및 StandardAuthorizer 플러그인도 제공하여 ACL(Access Control Lists)을 기반으로 권한 부여를 구성합니다. 이러한 플러그인에서 관리하는 ACL 규칙은 사용자 이름을 기반으로 리소스에 대한 액세스 권한을 부여하거나 거부하는 데 사용되며 이러한 규칙은 Kafka 클러스터 자체에 저장됩니다. 그러나 Red Hat Single Sign-On을 사용한 OAuth 2.0 토큰 기반 권한 부여는 Kafka 브로커에 대한 액세스 제어를 구현하는 방법에 대한 유연성을 훨씬 높여 줍니다. 또한 OAuth 2.0 권한 부여 및 ACL을 사용하도록 Kafka 브로커를 구성할 수 있습니다.
6.8.1. OAuth 2.0 인증 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka용 스트림의 OAuth 2.0 인증에서는 Red Hat Single Sign-On 서버 권한 부여 REST 끝점을 사용하여 특정 사용자에게 정의된 보안 정책을 적용하고 해당 사용자의 다른 리소스에 부여된 권한 목록을 제공하여 Red Hat Single Sign-On을 사용하여 토큰 기반 인증을 확장합니다. 정책은 역할과 그룹을 사용하여 사용자와 권한을 일치시킵니다. OAuth 2.0 권한 부여는 Red Hat Single Sign-On 인증 서비스에서 사용자에 대한 수신된 권한 목록을 기반으로 권한을 로컬로 적용합니다.
6.8.1.1. Kafka 브로커 사용자 정의 승인 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On 승인자 (KeycloakAuthorizer)는 Apache Kafka용 Streams와 함께 제공됩니다. Red Hat Single Sign-On에서 제공하는 권한 부여 서비스에 Red Hat Single Sign-On REST 엔드포인트를 사용하려면 Kafka 브로커에서 사용자 지정 승인자를 구성합니다.
인증자는 필요에 따라 권한 부여 서버에서 부여된 권한 목록을 가져와서 Kafka 브로커에 로컬로 권한 부여를 적용하여 각 클라이언트 요청에 대해 신속하게 권한 부여 결정을 내립니다.
6.8.2. OAuth 2.0 권한 부여 지원 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Red Hat Single Sign-On 인증 서비스를 사용하여 OAuth 2.0 인증을 사용하도록 Kafka 브로커를 구성하는 방법을 설명합니다.
사전 준비 사항
필요한 액세스 또는 특정 사용자에 대해 제한하려는 경우를 고려하십시오. Red Hat Single Sign-On 그룹,역할,클라이언트 및 사용자를 결합하여 Red Hat Single Sign-On에서 액세스를 구성할 수 있습니다.
일반적으로 그룹은 조직 부서 또는 지리적 위치를 기반으로 사용자와 일치시키는 데 사용됩니다. 및 역할은 해당 기능을 기반으로 사용자와 일치시키는 데 사용됩니다.
Red Hat Single Sign-On을 사용하면 사용자와 그룹을 LDAP에 저장할 수 있지만 클라이언트와 역할은 이러한 방식으로 저장할 수 없습니다. 사용자 데이터에 대한 스토리지 및 액세스는 권한 부여 정책 구성 방법의 요소가 될 수 있습니다.
Super 사용자는 Kafka 브로커에서 구현된 권한 부여에 관계없이 항상 Kafka 브로커에 대한 무제한 액세스 권한을 갖습니다.
사전 요구 사항
프로세스
- Red Hat Single Sign-On 관리 콘솔에 액세스하거나 Red Hat Single Sign-On 관리 CLI를 사용하여 OAuth 2.0 인증을 설정할 때 생성한 Kafka 브로커 클라이언트에 대한 인증 서비스를 활성화합니다.
- 인증 서비스를 사용하여 클라이언트에 대한 리소스, 권한 부여 범위, 정책 및 권한을 정의합니다.
- 역할 및 그룹을 할당하여 사용자 및 클라이언트에 권한을 바인딩합니다.
Red Hat Single Sign-On 권한을 사용하도록 Kafka 브로커를 구성합니다.
Kafka
server.properties구성 파일에 다음을 추가하여 Kafka에 인증자를 설치합니다.authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakAuthorizer principal.builder.class=io.strimzi.kafka.oauth.server.OAuthKafkaPrincipalBuilder
authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakAuthorizer principal.builder.class=io.strimzi.kafka.oauth.server.OAuthKafkaPrincipalBuilderCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커에 대한 구성을 추가하여 권한 부여 서버 및 권한 부여 서비스에 액세스합니다.
여기서는
server.properties에 추가 속성을 추가하지만 대문자 또는 대문자 이름 지정 규칙을 사용하여 환경 변수로 정의할 수도 있습니다.strimzi.authorization.token.endpoint.uri="https://<auth_server_address>/auth/realms/REALM-NAME/protocol/openid-connect/token" strimzi.authorization.client.id="kafka"
strimzi.authorization.token.endpoint.uri="https://<auth_server_address>/auth/realms/REALM-NAME/protocol/openid-connect/token"1 strimzi.authorization.client.id="kafka"2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow (선택 사항) 특정 Kafka 클러스터에 대한 구성을 추가합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.kafka.cluster.name="kafka-cluster"
strimzi.authorization.kafka.cluster.name="kafka-cluster"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 특정 Kafka 클러스터의 이름입니다. 이름은 권한을 대상으로 지정하는 데 사용되며 동일한 Red Hat Single Sign-On 영역에서 여러 클러스터를 관리할 수 있습니다. 기본값은
kafka-cluster입니다.
(선택 사항) 간단한 인증으로 위임합니다.
strimzi.authorization.delegate.to.kafka.acl="true"
strimzi.authorization.delegate.to.kafka.acl="true"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Red Hat Single Sign-On 인증 서비스 정책에서 액세스가 거부되는 경우 Kafka
AclAuthorizer에 권한을 위임합니다. 기본값은false입니다.
(선택 사항) 권한 부여 서버에 TLS 연결에 대한 구성을 추가합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.ssl.truststore.location=<path_to_truststore> strimzi.authorization.ssl.truststore.password=<my_truststore_password> strimzi.authorization.ssl.truststore.type=JKS strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS
strimzi.authorization.ssl.truststore.location=<path_to_truststore>1 strimzi.authorization.ssl.truststore.password=<my_truststore_password>2 strimzi.authorization.ssl.truststore.type=JKS3 strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG4 strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS5 Copy to Clipboard Copied! Toggle word wrap Toggle overflow (선택 사항) 권한 부여 서버에서 권한 부여 새로 고침을 구성합니다. 부여 새로 고침 작업은 활성 토큰을 열거하고 각각에 대한 최신 권한을 요청하여 작동합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.grants.refresh.period.seconds="120" strimzi.authorization.grants.refresh.pool.size="10" strimzi.authorization.grants.max.idle.time.seconds="300" strimzi.authorization.grants.gc.period.seconds="300" strimzi.authorization.reuse.grants="false"
strimzi.authorization.grants.refresh.period.seconds="120"1 strimzi.authorization.grants.refresh.pool.size="10"2 strimzi.authorization.grants.max.idle.time.seconds="300"3 strimzi.authorization.grants.gc.period.seconds="300"4 strimzi.authorization.reuse.grants="false"5 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 권한 부여 서버의 권한 부여 목록이 새로 고침되는 빈도(기본적으로 분당 시간)를 지정합니다. 디버깅 목적으로 새로 고침을 비활성화하려면
"0"으로 설정합니다. - 2
- grants 새로 고침 작업에 사용되는 스레드 풀의 크기(병합 정도)를 지정합니다. 기본값은
"5"입니다. - 3
- 캐시의 유휴 부여를 제거할 수 있는 시간(초)입니다. 기본값은 300입니다.
- 4
- 캐시에서 오래된 권한을 정리하는 작업의 연속 실행 사이의 시간(초)입니다. 기본값은 300입니다.
- 5
- 최신 부여를 새 세션에 대해 가져올지 여부를 제어합니다. 비활성화되면 Red Hat Single Sign-On에서 부여가 검색되고 사용자에게 캐시됩니다. 기본값은
true입니다.
(선택 사항) 권한 부여 서버와 통신할 때 네트워크 시간 초과를 구성합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.connect.timeout.seconds="60" strimzi.authorization.read.timeout.seconds="60" strimzi.authorization.http.retries="2"
strimzi.authorization.connect.timeout.seconds="60"1 strimzi.authorization.read.timeout.seconds="60"2 strimzi.authorization.http.retries="2"3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Red Hat Single Sign-On 토큰 끝점에 연결할 때 연결 시간(초)입니다. 기본값은
60입니다. - 2
- Red Hat Single Sign-On 토큰 끝점에 연결할 때 읽기 제한 시간(초)입니다. 기본값은
60입니다. - 3
- 권한 부여 서버에 대한 실패한 HTTP 요청을 재시도하지 않고 재시도할 최대 횟수입니다. 기본값은
0입니다. 즉, 재시도가 수행되지 않습니다. 이 옵션을 효과적으로 사용하려면strimzi.authorization.connect.timeout.seconds및strimzi.authorization.read.timeout.seconds옵션의 시간 초과 시간을 줄이는 것이 좋습니다. 그러나 재시도하면 현재 작업자 스레드를 다른 요청에 사용할 수 없게 될 수 있으며 요청이 너무 많으면 Kafka 브로커가 응답하지 않을 수 있습니다.
(선택 사항) 토큰 검증 및 권한 부여에 OAuth 2.0 메트릭을 활성화합니다.
oauth.enable.metrics="true"
oauth.enable.metrics="true"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OAuth 메트릭을 활성화하거나 비활성화할지 여부를 제어합니다. 기본값은
false입니다.
(선택 사항) 요청에서
Accept헤더를 제거합니다.oauth.include.accept.header="false"
oauth.include.accept.header="false"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 헤더를 포함하는 경우
false로 설정하면 권한 부여 서버와 통신할 때 문제가 발생합니다. 기본값은true입니다.
- Kafka 브로커에 특정 역할이 있는 클라이언트 또는 사용자로 액세스하여 구성된 권한에 액세스하고 필요한 액세스 권한이 있는지 또는 권한이 없는지 확인합니다.
6.9. OPA 정책 기반 권한 부여 사용 링크 복사링크가 클립보드에 복사되었습니다!
OPA(Open Policy Agent)는 오픈 소스 정책 엔진입니다. OPA를 Apache Kafka의 Streams와 통합하여 Kafka 브로커에서 클라이언트 작업을 허용하는 정책 기반 권한 부여 메커니즘 역할을 할 수 있습니다.
클라이언트에서 요청이 생성되면 OPA는 Kafka 액세스에 대해 정의된 정책에 대한 요청을 평가한 다음 요청을 허용하거나 거부합니다.
Red Hat은 OPA 서버를 지원하지 않습니다.
6.9.1. OPA 정책 정의 링크 복사링크가 클립보드에 복사되었습니다!
OPA와 Apache Kafka용 Streams를 통합하기 전에 세분화된 액세스 제어를 제공하기 위해 정책을 정의하는 방법을 고려하십시오.
Kafka 클러스터, 소비자 그룹 및 주제에 대한 액세스 제어를 정의할 수 있습니다. 예를 들어 생산자 클라이언트에서 특정 브로커 주제로 쓰기 액세스를 허용하는 권한 부여 정책을 정의할 수 있습니다.
이 경우 정책은 다음을 지정할 수 있습니다.
- 생산자 클라이언트와 연결된 사용자 주체 및 호스트 주소
- 클라이언트에 허용되는 작업
-
정책이 적용되는 리소스
유형(주체 ) 및 리소스 이름
허용 및 거부 결정은 정책에 기록되며, 제공되는 요청 및 클라이언트 식별 데이터에 따라 응답이 제공됩니다.
이 예제에서는 생산자 클라이언트가 해당 항목에 쓸 수 있도록 정책을 충족해야 합니다.
6.9.2. OPA에 연결 링크 복사링크가 클립보드에 복사되었습니다!
Kafka가 OPA 정책 엔진에 액세스하여 액세스 제어 정책을 쿼리할 수 있도록 Kafka server.properties 파일에서 사용자 지정 OPA 승인자 플러그인(kafka-authorizer-opa-VERSION.jar)을 구성합니다.
클라이언트에서 요청을 수행하면 지정된 URL 주소와 정의된 정책의 이름이어야 하는 REST 끝점을 사용하여 플러그인에서 OPA 정책 엔진을 쿼리합니다.
플러그인은 클라이언트 요청(사용자 주체, 작업 및 리소스)의 세부 정보를 JSON 형식으로 제공하여 정책에 대해 확인합니다. 세부 정보에는 클라이언트의 고유 ID가 포함됩니다. 예를 들어 TLS 인증이 사용되는 경우 클라이언트 인증서와 고유 이름을 사용합니다.
OPA는 데이터를 사용하여 요청을 허용하거나 거부하기 위해 플러그인에 true 또는 false - 응답을 제공합니다.
6.9.3. OPA 권한 부여 지원 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 OPA 인증을 사용하도록 Kafka 브로커를 구성하는 방법을 설명합니다.
사전 준비 사항
필요한 액세스 또는 특정 사용자에 대해 제한하려는 경우를 고려하십시오. 사용자와 Kafka 리소스 를 결합하여 OPA 정책을 정의할 수 있습니다.
LDAP 데이터 소스에서 사용자 정보를 로드하도록 OPA를 설정할 수 있습니다.
Super 사용자는 Kafka 브로커에서 구현된 권한 부여에 관계없이 항상 Kafka 브로커에 대한 무제한 액세스 권한을 갖습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- OPA 서버를 연결할 수 있어야 합니다.
- Kafka의 OPA 승인자 플러그인입니다.
프로세스
Kafka 브로커에서 작업을 수행하기 위해 클라이언트 요청을 승인하는 데 필요한 OPA 정책을 작성합니다.
OPA 정책 정의를 참조하십시오.
이제 OPA를 사용하도록 Kafka 브로커를 구성합니다.
Kafka에 대한 OPA 승인자 플러그인을 설치합니다.
OPA에 연결을 참조하십시오.
플러그인 파일이 Kafka 클래스 경로에 포함되어 있는지 확인합니다.
Kafka
server.properties구성 파일에 다음을 추가하여 OPA 플러그인을 활성화합니다.authorizer.class.name: com.bisnode.kafka.authorization.OpaAuthorizer
authorizer.class.name: com.bisnode.kafka.authorization.OpaAuthorizerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커의
server.properties에 구성을 추가하여 OPA 정책 엔진 및 정책에 액세스합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- (필수) 승인자 플러그인이 쿼리할 정책의 OAuth 2.0 토큰 끝점 URL입니다. 이 예에서는 정책을
allow이라고 합니다. - 2
- 승인자 플러그인이 OPA 정책 엔진과 연결하지 못하는 경우 클라이언트가 기본적으로 액세스가 허용되거나 거부되는지 여부를 지정하는 플래그입니다.
- 3
- 로컬 캐시의 초기 용량(바이트)입니다. 플러그인이 모든 요청에 대해 OPA 정책 엔진을 쿼리할 필요가 없도록 캐시가 사용됩니다.
- 4
- 로컬 캐시의 최대 용량(바이트)입니다.
- 5
- OPA 정책 엔진에서 다시 로드하여 로컬 캐시를 새로 고치는 시간(밀리초)입니다.
- 6
- Open Policy Agent 정책을 쿼리하지 않고 항상 허용되도록 슈퍼 사용자로 취급되는 사용자 주체 목록입니다.
인증 및 권한 부여 옵션에 대한 정보는 Open Policy Agent 웹 사이트를 참조하십시오.
- 및 올바른 권한이 없는 클라이언트를 사용하여 Kafka 브로커에 액세스하여 구성된 권한을 확인합니다.
7장. 주제 생성 및 관리 링크 복사링크가 클립보드에 복사되었습니다!
Kafka의 메시지는 항상 주제로 전송되거나 수신됩니다. 이 장에서는 Kafka 주제를 생성하고 관리하는 방법을 설명합니다.
7.1. 파티션 및 복제본 링크 복사링크가 클립보드에 복사되었습니다!
주제는 항상 하나 이상의 파티션으로 나뉩니다. 파티션은 shard 역할을 합니다. 즉, 생산자가 보낸 모든 메시지는 항상 단일 파티션에만 작성됩니다.
각 파티션에는 하나 이상의 복제본이 있을 수 있으며 이는 클러스터의 다른 브로커에 저장됩니다. 주제를 만들 때 복제 요인 을 사용하여 복제본 수를 구성할 수 있습니다. 복제 요소는 클러스터 내에서 보유할 복사본 수를 정의합니다. 지정된 파티션의 복제본 중 하나가 리더로 선택됩니다. 리더 복제본은 생산자가 새 메시지를 전송하고 사용자가 메시지를 사용하는 데 사용됩니다. 다른 복제본은 후속 복제본이 됩니다. 의사들은 리더를 재현합니다.
리더가 실패하면 동기화되지 않은 자선 중 하나가 자동으로 새로운 리더가 될 것입니다. 각 서버는 일부 파티션의 리더 역할을 하며 다른 서버의 팔로우가 클러스터 내에서 부하를 분산할 수 있도록 합니다.
복제 요인은 리더 및 팔로워를 포함한 복제본 수를 결정합니다. 예를 들어 복제 요소를 3 으로 설정하면 리더 1개와 후속 복제본 두 개가 있습니다.
7.2. 메시지 보존 링크 복사링크가 클립보드에 복사되었습니다!
메시지 보존 정책은 메시지가 Kafka 브로커에 저장되는 기간을 정의합니다. 시간, 파티션 크기 또는 둘 다에 따라 정의할 수 있습니다.
예를 들어 메시지를 유지해야 함을 정의할 수 있습니다.
- 7일 동안
- 파티션에 1GB의 메시지가 있을 때까지입니다. 제한에 도달하면 가장 오래된 메시지가 제거됩니다.
- 7일 동안 또는 1GB 제한에 도달할 때까지. 어떤 제한이 먼저 제공되는지 먼저 사용할 수 있습니다.
Kafka 브로커는 메시지를 로그 세그먼트에 저장합니다. 보존 정책 이후의 메시지는 새 로그 세그먼트가 생성될 때만 삭제됩니다. 이전 로그 세그먼트가 구성된 로그 세그먼트 크기를 초과하면 새 로그 세그먼트가 생성됩니다. 또한 사용자는 주기적으로 생성되도록 새 세그먼트를 요청할 수 있습니다.
Kafka 브로커는 압축 정책을 지원합니다.
컴팩트한 정책이 있는 주제의 경우 브로커는 항상 각 키에 대한 마지막 메시지만 유지합니다. 동일한 키가 있는 이전 메시지는 파티션에서 제거됩니다. 압축은 주기적으로 실행되는 작업이므로 동일한 키가 있는 새 메시지가 파티션으로 전송되면 즉시 수행되지 않습니다. 대신 이전 메시지가 제거될 때까지 다소 시간이 걸릴 수 있습니다.
메시지 보존 구성 옵션에 대한 자세한 내용은 7.5절. “주제 구성” 을 참조하십시오.
7.3. 주제 자동 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Kafka는 생산자 또는 소비자가 존재하지 않는 주제에서 메시지를 보내거나 수신하려고 하는 경우 주제를 자동으로 생성합니다. 이 동작은 기본적으로 true 로 설정된 auto.create.topics.enable 구성 속성에 의해 관리됩니다.
프로덕션 환경의 경우 자동 주제 생성을 비활성화하는 것이 좋습니다. 이렇게 하려면 Kafka 구성 속성 파일에서 auto.create.topics.enable 을 false 로 설정합니다.
자동 주제 생성 비활성화
auto.create.topics.enable=false
auto.create.topics.enable=false
7.4. 삭제 주제 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 delete.topic.enable 속성으로 제어되는 주제 삭제를 방지하는 옵션을 제공합니다. 기본적으로 이 속성은 true 로 설정되어 주제를 삭제할 수 있습니다.
그러나 Kafka 구성 속성 파일에서 false 로 설정하면 주제 삭제가 비활성화됩니다. 이 경우 주제를 삭제하려고 하면 성공 상태가 반환되지만 주제 자체는 삭제되지 않습니다.
주제 삭제 비활성화
delete.topic.enable=false
delete.topic.enable=false
7.5. 주제 구성 링크 복사링크가 클립보드에 복사되었습니다!
자동 생성 주제에서는 브로커 속성 파일에 지정할 수 있는 기본 주제 구성을 사용합니다. 그러나 항목을 수동으로 생성할 때 해당 구성을 생성할 때 지정할 수 있습니다. 주제 구성을 생성한 후 변경할 수도 있습니다. 수동으로 생성된 주제의 주요 주제 구성 옵션은 다음과 같습니다.
cleanup.policy-
삭제하거나콤팩트하도록 보존 정책을 구성합니다.삭제정책은 이전 레코드를 삭제합니다.컴팩트정책을 사용하면 로그 압축이 가능합니다. 기본값은delete입니다. 로그 압축에 대한 자세한 내용은 Kafka 웹 사이트를 참조하십시오. compression.type-
저장된 메시지에 사용되는 압축을 지정합니다. 유효한 값은
gzip,snappy,lz4,압축해제(no compression) 및producer(프로덕션에서 사용하는 압축 코드 취득)입니다. 기본값은producer입니다. max.message.bytes-
Kafka 브로커가 허용하는 메시지 배치의 최대 크기(바이트)입니다. 기본값은
1000012입니다. min.insync.replicas-
쓰기가 성공으로 간주되려면 동기화에 있어야 하는 최소 복제본 수입니다. 기본값은
1입니다. retention.ms-
로그 세그먼트를 유지할 최대 시간(밀리초)입니다. 이 값보다 오래된 로그 세그먼트는 삭제됩니다. 기본값은
604800000(7일)입니다. retention.bytes-
파티션이 보유할 최대 바이트 수입니다. 파티션 크기가 이 제한을 초과하면 가장 오래된 로그 세그먼트가 삭제됩니다. 값
-1은 제한이 없음을 나타냅니다. 기본값은-1입니다. segment.bytes-
단일 커밋 로그 세그먼트 파일의 최대 파일 크기(바이트)입니다. 세그먼트가 크기에 도달하면 새 세그먼트가 시작됩니다. 기본값은
1073741824바이트(1GB)입니다.
자동 생성 주제의 기본값은 유사한 옵션을 사용하여 Kafka 브로커 구성에 지정할 수 있습니다.
log.cleanup.policy-
위의
cleanup.policy를 참조하십시오. compression.type-
위의
compression.type을 참조하십시오. message.max.bytes-
위의
max.message.bytes를 참조하십시오. min.insync.replicas-
위의
min.insync.replicas를 참조하십시오. log.retention.ms-
위의
retention.ms를 참조하십시오. log.retention.bytes-
위의
retention.bytes를 참조하십시오. log.segment.bytes-
위의
segment.bytes를 참조하십시오. default.replication.factor-
자동으로 생성된 주제의 기본 복제 요소. 기본값은
1입니다. num.partitions-
자동으로 생성된 주제의 기본 파티션 수입니다. 기본값은
1입니다.
7.6. 내부 주제 링크 복사링크가 클립보드에 복사되었습니다!
내부 주제는 Kafka 브로커 및 클라이언트에서 내부적으로 생성 및 사용합니다. Kafka에는 소비자 오프셋(__consumer_offsets) 및 트랜잭션 상태(__Cryostat_state )를 저장하는 데 사용되는 몇 가지 내부 주제가 있습니다.
__consumer_offsets 및 __ Cryostat_state 주제는 prefix offsets.topic. 및 transaction.state.log 로 시작하는 전용 Kafka 브로커 구성 옵션을 사용하여 구성할 수 있습니다.
가장 중요한 구성 옵션은 다음과 같습니다.
offsets.topic.replication.factor-
__consumer_offsets주제의 복제본 수입니다. 기본값은3입니다. offsets.topic.num.partitions-
__consumer_offsets주제의 파티션 수입니다. 기본값은50입니다. transaction.state.log.replication.factor-
__ Cryostat_state주제의 복제본 수입니다. 기본값은3입니다. transaction.state.log.num.partitions-
__ Cryostat_state주제의 파티션 수입니다. 기본값은50입니다. transaction.state.log.min.isr-
__ Cryostat_state항목에 대한 쓰기를 승인해야 하는 최소 복제본 수가 성공으로 간주됩니다. 이 최소값을 충족할 수 없는 경우 예외와 함께 생산자가 실패합니다. 기본값은2입니다.
7.7. 주제 생성 링크 복사링크가 클립보드에 복사되었습니다!
kafka-topics.sh 툴을 사용하여 주제를 관리합니다. Kafka-topics.sh 는 Apache Kafka 배포를 위한 Streams의 일부이며 bin 디렉터리에 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
주제 생성
kafka-topics.sh유틸리티를 사용하여 주제를 생성하고 다음을 지정합니다.-
--bootstrap-server옵션에 있는 Kafka 브로커의 호스트 및 포트입니다. -
--create옵션에 생성할 새 주제입니다. -
--topic옵션의 주제 이름입니다. -
--partitions옵션의 파티션 수입니다. --replication-factor옵션의 복제 요인입니다.--config옵션을 사용하여 일부 기본 주제 구성 옵션을 덮어쓸 수도 있습니다. 이 옵션을 여러 번 사용하여 다른 옵션을 덮어쓸 수 있습니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --create --topic <TopicName> --partitions <NumberOfPartitions> --replication-factor <ReplicationFactor> --config <Option1>=<Value1> --config <Option2>=<Value2>
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --create --topic <TopicName> --partitions <NumberOfPartitions> --replication-factor <ReplicationFactor> --config <Option1>=<Value1> --config <Option2>=<Value2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제를 생성하는 명령의 예/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic --partitions 50 --replication-factor 3 --config cleanup.policy=compact --config min.insync.replicas=2
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic --partitions 50 --replication-factor 3 --config cleanup.policy=compact --config min.insync.replicas=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
kafka-topics.sh를 사용하여 주제가 존재하는지 확인합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --describe --topic <TopicName>
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --describe --topic <TopicName>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제를 설명하는 명령의 예/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopic
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopicCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8. 주제 나열 및 설명 링크 복사링크가 클립보드에 복사되었습니다!
kafka-topics.sh 툴을 사용하여 주제를 나열하고 설명할 수 있습니다. Kafka-topics.sh 는 Apache Kafka 배포를 위한 Streams의 일부이며 bin 디렉터리에서 찾을 수 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
주제 설명
kafka-topics.sh유틸리티를 사용하여 주제를 설명하고 다음을 지정합니다.-
--bootstrap-server옵션에 있는 Kafka 브로커의 호스트 및 포트입니다. -
--describe옵션을 사용하여 주제를 설명하도록 지정합니다. -
주제 이름은
--topic옵션에 지정해야 합니다. --topic옵션을 생략하면 사용 가능한 모든 주제를 설명합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --describe --topic <topic_name>
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --describe --topic <topic_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제를 설명하는 명령의 예/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopic
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 이 항목에 속하는 모든 파티션 및 복제본을 나열합니다. 또한 모든 주제 구성 옵션도 나열합니다.
-
7.9. 주제 구성 수정 링크 복사링크가 클립보드에 복사되었습니다!
kafka-configs.sh 도구를 사용하여 주제 구성을 수정할 수 있습니다. Kafka-configs.sh 는 Apache Kafka 배포를 위한 Streams의 일부이며 bin 디렉터리에서 찾을 수 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
주제 구성 수정
kafka-configs.sh툴을 사용하여 현재 구성을 가져옵니다.-
--bootstrap-server옵션에 Kafka 브로커의 호스트 및 포트를 지정합니다. -
--entity-type을topic및--entity-name을 주제 이름으로 설정합니다. 현재 구성을 가져오려면
--describe옵션을 사용합니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --describe
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제의 구성을 가져오는 명령의 예/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --describe
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
kafka-configs.sh툴을 사용하여 구성을 변경합니다.-
--bootstrap-server옵션에 Kafka 브로커의 호스트 및 포트를 지정합니다. -
--entity-type을topic및--entity-name을 주제 이름으로 설정합니다. -
현재 구성을 수정하려면
--alter옵션을 사용합니다. --add-config옵션을 추가하거나 변경할 옵션을 지정합니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --alter --add-config <option>=<value>
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --alter --add-config <option>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제의 구성을 변경하는 명령의 예/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --alter --add-config min.insync.replicas=1
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --alter --add-config min.insync.replicas=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
kafka-configs.sh도구를 사용하여 기존 구성 옵션을 삭제합니다.-
--bootstrap-server옵션에 Kafka 브로커의 호스트 및 포트를 지정합니다. -
--entity-type을topic및--entity-name을 주제 이름으로 설정합니다. -
기존 구성 옵션을 제거하려면
--delete-config옵션을 사용합니다. --remove-config명령에서 제거할 옵션을 지정합니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --alter --delete-config <option>
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_host>:<port> --entity-type topics --entity-name <topic_name> --alter --delete-config <option>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제의 구성을 변경하는 명령의 예/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --alter --delete-config min.insync.replicas
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name mytopic --alter --delete-config min.insync.replicasCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
7.10. 주제 삭제 링크 복사링크가 클립보드에 복사되었습니다!
kafka-topics.sh 도구를 사용하여 주제를 관리할 수 있습니다. Kafka-topics.sh 는 Apache Kafka 배포를 위한 Streams의 일부이며 bin 디렉터리에서 찾을 수 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
주제 삭제
kafka-topics.sh유틸리티를 사용하여 주제를 삭제합니다.-
--bootstrap-server옵션에 있는 Kafka 브로커의 호스트 및 포트입니다. -
--delete옵션을 사용하여 기존 주제를 삭제해야 함을 지정합니다. 주제 이름은
--topic옵션에 지정해야 합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --delete --topic <topic_name>
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --delete --topic <topic_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow mytopic이라는 주제를 생성하는 명령의 예/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic mytopic
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic mytopicCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
kafka-topics.sh를 사용하여 주제가 삭제되었는지 확인합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --list
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_host>:<port> --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 주제를 나열하는 명령의 예
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8장. Kafka Connect에서 Apache Kafka에 스트림 사용 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect를 사용하여 Kafka와 외부 시스템 간에 데이터를 스트리밍합니다. Kafka Connect는 확장성 및 안정성을 유지하면서 대량의 데이터를 이동하기 위한 프레임워크를 제공합니다. Kafka Connect는 일반적으로 Kafka 클러스터 외부에 있는 데이터베이스, 스토리지 및 메시징 시스템과 Kafka를 통합하는 데 사용됩니다.
Kafka Connect는 독립 실행형 또는 분산 모드에서 실행됩니다.
- 독립 실행형 모드
- 독립 실행형 모드에서 Kafka Connect는 단일 노드에서 실행됩니다. 독립 실행형 모드는 개발 및 테스트를 위한 것입니다.
- 분산 모드
- 분산 모드에서 Kafka Connect는 하나 이상의 작업자 노드에서 실행되며 워크로드가 그 사이에 배포됩니다. 분산 모드는 프로덕션을 위한 것입니다.
Kafka Connect는 다양한 유형의 외부 시스템에 대한 연결을 구현하는 커넥터 플러그인을 사용합니다. 커넥터 플러그인에는 싱크와 source의 두 가지 유형이 있습니다. 싱크 커넥터는 Kafka에서 외부 시스템으로 데이터를 스트리밍합니다. 소스 커넥터는 외부 시스템에서 Kafka로 데이터를 스트리밍합니다.
Kafka Connect REST API를 사용하여 커넥터 인스턴스를 생성, 관리 및 모니터링할 수도 있습니다.
Connector 구성은 소스 또는 싱크 커넥터와 같은 세부 정보와 읽거나 쓸 Kafka 주제를 지정합니다. 구성을 관리하는 방법은 독립 실행형 또는 분산 모드에서 Kafka Connect를 실행 중인지에 따라 다릅니다.
- 독립 실행형 모드에서는 Kafka Connect REST API를 통해 커넥터 구성을 JSON으로 제공하거나 속성 파일을 사용하여 구성을 정의할 수 있습니다.
- 분산 모드에서는 Kafka Connect REST API를 통해 커넥터 구성을 JSON으로만 제공할 수 있습니다.
대량의 메시지 처리
많은 양의 메시지를 처리하도록 구성을 조정할 수 있습니다. 자세한 내용은 많은 양의 메시지 처리를 참조하십시오.
8.1. 독립 실행형 모드에서 Kafka 연결 사용 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect 독립 실행형 모드에서 커넥터는 단일 JVM에서 단일 프로세스로 실행되는 Kafka Connect 작업자 프로세스와 동일한 노드에서 실행됩니다. 즉, 작업자 프로세스 및 커넥터는 CPU, 메모리 및 디스크와 같은 동일한 리소스를 공유합니다.
8.1.1. 독립 실행형 모드에서 Kafka 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 모드에서 Kafka Connect를 구성하려면 config/connect-standalone.properties 구성 파일을 편집합니다. 다음 옵션이 가장 중요합니다.
bootstrap.servers-
Kafka에 대한 부트스트랩 연결로 사용되는 Kafka 브로커 주소 목록입니다. 예를 들어
kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092. key.converter-
메시지 키를 Kafka 형식으로 변환하거나 Kafka 형식으로 변환하는 데 사용되는 클래스입니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter. value.converter-
Kafka 형식으로 메시지 페이로드를 변환하는 데 사용되는 클래스입니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter. offset.storage.file.filename- 오프셋 데이터가 저장되는 파일을 지정합니다.
Connector 플러그인은 부트스트랩 주소를 사용하여 Kafka 브로커에 대한 클라이언트 연결을 엽니다. 이러한 연결을 구성하려면 생산자 또는 소비자 접두사가 붙은 표준 Kafka 생산자 및 소비자 구성 옵션을 사용합니다.
8.1.2. 독립 실행형 모드에서 Kafka 연결 실행 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 모드에서 Kafka 연결을 구성하고 실행합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
속성 파일에 지정된 커넥터 구성이 있습니다.
Kafka Connect REST API를 사용하여 커넥터를 관리할 수도 있습니다.
프로세스
/opt/kafka/config/connect-standalone.propertiesKafka Connect 구성 파일을 편집하고 Kafka 브로커를 가리키도록bootstrap.server를 설정합니다. 예를 들면 다음과 같습니다.bootstrap.servers=kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092
bootstrap.servers=kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092Copy to Clipboard Copied! Toggle word wrap Toggle overflow 구성 파일로 Kafka Connect를 시작하고 하나 이상의 커넥터 구성을 지정합니다.
su - kafka /opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties connector1.properties [connector2.properties ...]
su - kafka /opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties connector1.properties [connector2.properties ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka Connect가 실행 중인지 확인합니다.
jcmd | grep ConnectStandalone
jcmd | grep ConnectStandaloneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2. 분산 모드에서 Kafka 연결 사용 링크 복사링크가 클립보드에 복사되었습니다!
분산 모드에서 Kafka Connect는 작업자 프로세스의 클러스터로 실행되며 각 작업자는 별도의 노드에서 실행됩니다. 커넥터는 클러스터의 모든 작업자에서 실행할 수 있으므로 확장성 및 내결함성을 향상시킬 수 있습니다. 커넥터는 작업자가 관리하며 작업을 분배하고 지정된 시간에 각 커넥터가 단일 노드에서 실행되도록 합니다.
8.2.1. 분산 모드에서 Kafka 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect를 분산 모드로 구성하려면 config/connect-distributed.properties 구성 파일을 편집합니다. 다음 옵션이 가장 중요합니다.
bootstrap.servers-
Kafka에 대한 부트스트랩 연결로 사용되는 Kafka 브로커 주소 목록입니다. 예를 들어
kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092. key.converter-
메시지 키를 Kafka 형식으로 변환하거나 Kafka 형식으로 변환하는 데 사용되는 클래스입니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter. value.converter-
Kafka 형식으로 메시지 페이로드를 변환하는 데 사용되는 클래스입니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter. group.id-
분산 Kafka Connect 클러스터의 이름입니다. 이는 고유해야 하며 다른 소비자 그룹 ID와 충돌해서는 안 됩니다. 기본값은
connect-cluster입니다. config.storage.topic-
커넥터 구성을 저장하는 데 사용되는 Kafka 주제입니다. 기본값은
connect-configs입니다. offset.storage.topic-
오프셋을 저장하는 데 사용되는 Kafka 주제입니다. 기본값은
connect-offset입니다. status.storage.topic-
작업자 노드 상태에 사용되는 Kafka 주제입니다. 기본값은
connect-status입니다.
Apache Kafka의 스트림에는 분산 모드에서 Kafka Connect의 구성 파일이 포함되어 있습니다. Apache Kafka 설치 디렉터리의 Streams에서 config/connect-distributed.properties 를 참조하십시오.
Connector 플러그인은 부트스트랩 주소를 사용하여 Kafka 브로커에 대한 클라이언트 연결을 엽니다. 이러한 연결을 구성하려면 생산자 또는 소비자 접두사가 붙은 표준 Kafka 생산자 및 소비자 구성 옵션을 사용합니다.
8.2.2. 분산 모드에서 Kafka 연결 실행 링크 복사링크가 클립보드에 복사되었습니다!
분산 모드에서 Kafka 연결을 구성하고 실행합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
클러스터 실행
모든 Kafka Connect 작업자 노드에서
/opt/kafka/config/connect-distributed.propertiesKafka Connect 구성 파일을 편집합니다.-
Kafka 브로커를 가리키도록
bootstrap.server옵션을 설정합니다. -
group.id옵션을 설정합니다. -
config.storage.topic옵션을 설정합니다. -
offset.storage.topic옵션을 설정합니다. status.storage.topic옵션을 설정합니다.예를 들면 다음과 같습니다.
bootstrap.servers=kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092 group.id=my-group-id config.storage.topic=my-group-id-configs offset.storage.topic=my-group-id-offsets status.storage.topic=my-group-id-status
bootstrap.servers=kafka0.my-domain.com:9092,kafka1.my-domain.com:9092,kafka2.my-domain.com:9092 group.id=my-group-id config.storage.topic=my-group-id-configs offset.storage.topic=my-group-id-offsets status.storage.topic=my-group-id-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Kafka 브로커를 가리키도록
모든 Kafka Connect 노드에서
/opt/kafka/config/connect-distributed.properties구성 파일을 사용하여 Kafka Connect 작업자를 시작합니다.su - kafka /opt/kafka/bin/connect-distributed.sh /opt/kafka/config/connect-distributed.properties
su - kafka /opt/kafka/bin/connect-distributed.sh /opt/kafka/config/connect-distributed.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka Connect가 실행 중인지 확인합니다.
jcmd | grep ConnectDistributed
jcmd | grep ConnectDistributedCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka Connect REST API를 사용하여 커넥터를 관리합니다.
8.3. 커넥터 관리 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API는 커넥터를 직접 생성, 업데이트 및 삭제하기 위한 엔드포인트를 제공합니다. API를 사용하여 커넥터의 상태를 확인하거나 로깅 수준을 변경할 수도 있습니다. API를 통해 커넥터를 생성할 때 API 호출의 일부로 커넥터에 대한 구성 세부 정보를 제공합니다.
커넥터를 플러그인으로 추가하고 관리할 수도 있습니다. 플러그인은 Kafka Connect API를 통해 커넥터를 구현하는 클래스를 포함하는 JAR 파일로 패키징됩니다. classpath에서 플러그인을 지정하거나 Kafka Connect의 플러그인 경로에 추가하여 시작 시 커넥터 플러그인을 실행하기만 하면 됩니다.
Kafka Connect REST API 또는 플러그인을 사용하여 커넥터를 관리하는 것 외에도 독립 실행형 모드에서 Kafka Connect를 실행할 때 속성 파일을 사용하여 커넥터 구성을 추가할 수도 있습니다. 이렇게 하려면 Kafka Connect 작업자 프로세스를 시작할 때 속성 파일의 위치를 지정하기만 하면 됩니다. 속성 파일에는 커넥터 클래스, 소스 및 대상 주제, 필요한 인증 또는 직렬화 설정을 포함하여 커넥터에 대한 구성 세부 정보가 포함되어야 합니다.
8.3.1. Kafka Connect API에 대한 액세스 제한 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API는 인증된 액세스 권한이 있고 호스트 이름/IP 주소 및 포트 번호를 포함하는 엔드포인트 URL을 알고 있는 모든 사용자가 액세스할 수 있습니다. 무단 조치 및 잠재적인 보안 문제를 방지하기 위해 Kafka Connect API에 대한 액세스를 신뢰할 수 있는 사용자에게만 제한하는 것이 중요합니다.
보안을 강화하려면 Kafka Connect API에 대해 다음 속성을 구성하는 것이 좋습니다.
-
(Kafka 3.4 이상)
org.apache.kafka.disallowed.login.modules에서 비보안 로그인 모듈을 구체적으로 제외 -
Connector.client.config.override.policy를NONE으로 설정하여 커넥터 구성이 Kafka Connect 구성 및 사용하는 소비자 및 생산자를 덮어쓰지 않도록 합니다.
8.3.2. 커넥터 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API 또는 속성 파일을 사용하여 커넥터 인스턴스를 생성, 관리 및 모니터링합니다. 독립 실행형 또는 분산 모드에서 Kafka Connect를 사용할 때 REST API를 사용할 수 있습니다. 독립 실행형 모드에서 Kafka Connect를 사용할 때 속성 파일을 사용할 수 있습니다.
8.3.2.1. Kafka Connect REST API를 사용하여 커넥터 관리 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API를 사용하는 경우 요청 본문에 커넥터 구성 세부 정보를 지정하여 PUT 또는 POST HTTP 요청을 Kafka Connect REST API로 전송하여 커넥터를 동적으로 생성할 수 있습니다.
PUT 명령을 사용하면 커넥터를 시작하고 업데이트하는 것과 동일한 명령입니다.
REST 인터페이스는 기본적으로 포트 8083에서 수신 대기하고 다음 엔드포인트를 지원합니다.
GET /connectors- 기존 커넥터 목록을 반환합니다.
POST /connectors- 커넥터를 생성합니다. 요청 본문은 커넥터 구성이 포함된 JSON 오브젝트여야 합니다.
GET /connectors/<connector_name>- 특정 커넥터에 대한 정보를 가져옵니다.
GET /connectors/<connector_name>/config- 특정 커넥터의 구성을 가져옵니다.
PUT /connectors/<connector_name>/config- 특정 커넥터의 구성을 업데이트합니다.
GET /connectors/<connector_name>/status- 특정 커넥터의 상태를 가져옵니다.
GET /connectors/<connector_name>/tasks- 특정 커넥터의 작업 목록 가져오기
GET /connectors/<connector_name>/tasks/<task_id>/status- 특정 커넥터에 대한 작업 상태 가져오기
PUT /connectors/<connector_name>/pause- 커넥터 및 모든 작업을 일시 중지합니다. 커넥터는 모든 메시지 처리를 중지합니다.
PUT /connectors/<connector_name>/stop- 커넥터와 모든 작업을 중지합니다. 커넥터는 모든 메시지 처리를 중지합니다. 실행으로부터 커넥터를 중지하는 것은 단순히 일시 중지하는 것보다 장기간에 더 적합할 수 있습니다.
PUT /connectors/<connector_name>/resume- 일시 중지된 커넥터를 다시 시작합니다.
POST /connectors/<connector_name>/restart- 실패한 경우 커넥터를 다시 시작합니다.
POST /connectors/<connector_name>/tasks/<task_id>/restart- 특정 작업을 다시 시작합니다.
DELETE /connectors/<connector_name>- 커넥터를 삭제합니다.
GET /connectors/<connector_name>/topics- 특정 커넥터에 대한 항목을 가져옵니다.
PUT /connectors/<connector_name>/topics/reset- 특정 커넥터에 대한 활성 항목 세트를 비웁니다.
GET /connectors/<connector_name>/offsets- 커넥터의 현재 오프셋을 가져옵니다.
DELETE /connectors/<connector_name>/offsets- 중지됨 상태에 있어야 하는 커넥터의 오프셋을 재설정합니다.
PATCH /connectors/<connector_name>/offsets-
중지된 상태에 있어야 하는 커넥터에 대한 오프셋(요청에서
offset속성 사용)을 조정합니다. GET /connector-plugins- 지원되는 모든 커넥터 플러그인 목록을 가져옵니다.
GET /connector-plugins/<connector_plugin_type>/config- 커넥터 플러그인에 대한 구성을 가져옵니다.
PUT /connector-plugins/<connector_type>/config/validate- 커넥터 구성을 검증합니다.
8.3.2.2. 커넥터 구성 속성 지정 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect 커넥터를 구성하려면 소스 또는 싱크 커넥터에 대한 구성 세부 정보를 지정해야 합니다. 이 작업을 수행하는 방법은 두 가지가 있습니다. Kafka Connect REST API를 통해, JSON을 사용하여 구성을 제공하거나 속성 파일을 사용하여 구성 속성을 정의합니다. 각 커넥터 유형에 사용할 수 있는 특정 구성 옵션은 다를 수 있지만 두 방법 모두 필요한 설정을 지정하는 유연한 방법을 제공합니다.
다음 옵션은 모든 커넥터에 적용됩니다.
name- 현재 Kafka Connect 인스턴스 내에서 고유해야 하는 커넥터의 이름입니다.
connector.class-
커넥터 플러그인의 클래스입니다. 예를 들어
org.apache.kafka.connect.file.FileStreamSinkConnector. tasks.max- 지정된 커넥터가 사용할 수 있는 최대 작업 수입니다. 작업을 사용하면 커넥터가 병렬로 작업을 수행할 수 있습니다. 커넥터는 지정된 것보다 적은 작업을 생성할 수 있습니다.
key.converter-
메시지 키를 Kafka 형식으로 변환하거나 Kafka 형식으로 변환하는 데 사용되는 클래스입니다. 이렇게 하면 Kafka Connect 구성에 의해 설정된 기본값이 재정의됩니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter. value.converter-
Kafka 형식으로 메시지 페이로드를 변환하는 데 사용되는 클래스입니다. 이렇게 하면 Kafka Connect 구성에 의해 설정된 기본값이 재정의됩니다. 예를 들어
org.apache.kafka.connect.json.JsonConverter.
싱크 커넥터에 대해 다음 옵션 중 하나 이상을 설정해야 합니다.
주제- 입력으로 사용되는 쉼표로 구분된 주제 목록입니다.
topics.regex- 입력으로 사용되는 주제의 Java 정규식입니다.
기타 모든 옵션은 Apache Kafka 문서의 커넥터 속성을 참조하십시오.
Apache Kafka의 스트림에는 Apache Kafka 설치 디렉터리에 스트림의 커넥터 구성 파일 config/connect-file-sink.properties 및 config/connect-file-source.properties 가 포함되어 있습니다.
8.3.3. Kafka Connect API를 사용하여 커넥터 생성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API를 사용하여 Kafka Connect와 함께 사용할 커넥터를 생성합니다.
사전 요구 사항
- Kafka Connect 설치
프로세스
커넥터 구성을 사용하여 JSON 페이로드를 준비합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
KafkaConnectAddress > :8083/connectors에 POST 요청을 보내 커넥터를 만듭니다. 다음 예제에서는curl을 사용합니다.curl -X POST -H "Content-Type: application/json" --data @sink-connector.json http://connect0.my-domain.com:8083/connectors
curl -X POST -H "Content-Type: application/json" --data @sink-connector.json http://connect0.my-domain.com:8083/connectorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow <
KafkaConnectAddress > :8083/connectors에게 GET 요청을 전송하여 커넥터가 배포되었는지 확인합니다. 다음 예제에서는curl을 사용합니다.curl http://connect0.my-domain.com:8083/connectors
curl http://connect0.my-domain.com:8083/connectorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.4. Kafka Connect API를 사용하여 커넥터 삭제 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Connect REST API를 사용하여 Kafka Connect에서 커넥터를 삭제합니다.
사전 요구 사항
- Kafka Connect 설치
커넥터 삭제
GET요청을 <KafkaConnectAddress > :8083/connectors/ <ConnectorName> 에 전송하여 커넥터가 존재하는지 확인합니다. 다음 예제에서는curl을 사용합니다.curl http://connect0.my-domain.com:8083/connectors
curl http://connect0.my-domain.com:8083/connectorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커넥터를 삭제하려면 <
KafkaConnectAddress > :8083/connectors로DELETE요청을 보냅니다. 다음 예제에서는curl을 사용합니다.curl -X DELETE http://connect0.my-domain.com:8083/connectors/my-connector
curl -X DELETE http://connect0.my-domain.com:8083/connectors/my-connectorCopy to Clipboard Copied! Toggle word wrap Toggle overflow <
KafkaConnectAddress > :8083/connectors에게 GET 요청을 전송하여 커넥터가 삭제되었는지 확인합니다. 다음 예제에서는curl을 사용합니다.curl http://connect0.my-domain.com:8083/connectors
curl http://connect0.my-domain.com:8083/connectorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.5. 커넥터 플러그인 추가 링크 복사링크가 클립보드에 복사되었습니다!
Kafka는 커넥터 개발을 위한 시작점으로 사용할 수 있는 예제 커넥터를 제공합니다. 다음 예제 커넥터는 Apache Kafka용 Streams에 포함되어 있습니다.
- FileStreamSink
- Kafka 주제에서 데이터를 읽고 데이터를 파일에 씁니다.
- FileStreamSource
- 파일에서 데이터를 읽고 데이터를 Kafka 주제로 보냅니다.
두 커넥터 모두 libs/connect-file-<kafka_version>.redhat-<build>.jar 플러그인에 포함되어 있습니다.
Kafka Connect의 커넥터 플러그인을 사용하려면 classpath에 추가하거나 Kafka Connect 속성 파일에서 플러그인 경로를 지정하고 플러그인을 위치에 복사할 수 있습니다.
classpath에 커넥터 예제 지정
CLASSPATH=/opt/kafka/libs/connect-file-<kafka_version>.redhat-<build>.jar opt/kafka/bin/connect-distributed.sh
CLASSPATH=/opt/kafka/libs/connect-file-<kafka_version>.redhat-<build>.jar opt/kafka/bin/connect-distributed.sh
플러그인 경로 설정
plugin.path=/opt/kafka/connector-plugins,/opt/connectors
plugin.path=/opt/kafka/connector-plugins,/opt/connectors
plugin.path 구성 옵션에는 쉼표로 구분된 경로 목록이 포함될 수 있습니다.
필요한 경우 더 많은 커넥터 플러그인을 추가할 수 있습니다. Kafka Connect는 시작 시 커넥터 플러그인을 검색하고 실행합니다.
분산 모드에서 Kafka Connect를 실행하는 경우 모든 작업자 노드에서 플러그인을 사용할 수 있어야 합니다.
9장. MirrorMaker 2가 있는 Apache Kafka에 스트림 사용 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2를 사용하여 데이터 센터 내 또는 여러 개의 활성 Kafka 클러스터 간에 데이터를 복제합니다.
MirrorMaker 2를 구성하려면 config/connect-mirror-maker.properties 구성 파일을 편집합니다. 필요한 경우 MirrorMaker 2에 대해 분산 추적을 활성화할 수 있습니다.
대량의 메시지 처리
많은 양의 메시지를 처리하도록 구성을 조정할 수 있습니다. 자세한 내용은 많은 양의 메시지 처리를 참조하십시오.
MirrorMaker 2에는 이전 버전의 MirrorMaker에서 지원하지 않는 기능이 있습니다. 그러나 레거시 모드에서 사용되도록 MirrorMaker 2를 구성할 수 있습니다.
9.1. 활성/활성 또는 활성/패시브 모드 구성 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2를 활성/패시브 또는 활성 / 활성 클러스터 구성에서 사용할 수 있습니다.
- 활성/활성 클러스터 구성
- 활성/활성 구성에는 데이터를 양방향으로 복제하는 두 개의 활성 클러스터가 있습니다. 애플리케이션은 둘 중 하나의 클러스터를 사용할 수 있습니다. 각 클러스터는 동일한 데이터를 제공할 수 있습니다. 이렇게 하면 서로 다른 지리적 위치에서 동일한 데이터를 사용할 수 있습니다. 소비자 그룹이 두 클러스터에서 모두 활성화되므로 복제된 항목에 대한 소비자 오프셋은 소스 클러스터와 다시 동기화되지 않습니다.
- 활성/수동 클러스터 구성
- 활성/수동 구성에는 수동 클러스터에 데이터를 복제하는 활성 클러스터 복제가 있습니다. 패시브 클러스터는 대기 상태로 유지됩니다. 시스템 장애 시 데이터 복구에 수동 클러스터를 사용할 수 있습니다.
생산자와 소비자는 활성 클러스터에만 연결할 것으로 예상됩니다. 각 대상 대상에 MirrorMaker 2 클러스터가 필요합니다.
9.1.1. 양방향 복제(활성/활성) 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 아키텍처는 활성/활성 클러스터 구성에서 양방향 복제를 지원합니다.
각 클러스터는 소스 및 원격 주제의 개념을 사용하여 다른 클러스터의 데이터를 복제합니다. 각 클러스터에 동일한 항목이 저장되므로 원격 주제는 MirrorMaker 2로 이름이 자동으로 변경되어 소스 클러스터를 나타냅니다. 원래 클러스터의 이름 앞에 주제 이름 앞에 추가됩니다.
그림 9.1. 주제 이름 변경
원래 클러스터에 플래그를 지정하면 주제가 해당 클러스터로 다시 복제되지 않습니다.
원격 주제를 통한 복제 개념은 데이터 집계가 필요한 아키텍처를 구성할 때 유용합니다. 소비자는 별도의 집계 클러스터 없이도 동일한 클러스터 내의 소스 및 원격 주제를 구독할 수 있습니다.
9.1.2. Unidirectional replication (active/passive) 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 아키텍처는 활성/수동 클러스터 구성에서 비방향 복제를 지원합니다.
활성/수동 클러스터 구성을 사용하여 백업을 수행하거나 데이터를 다른 클러스터로 마이그레이션할 수 있습니다. 이 경우 원격 주제의 자동 이름 변경을 원하지 않을 수 있습니다.
소스 커넥터 구성에 IdentityReplicationPolicy 를 추가하여 자동 이름 변경을 덮어쓸 수 있습니다. 이 구성을 적용하면 주제는 원래 이름을 유지합니다.
9.2. MirrorMaker 2 커넥터 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터 간 데이터 동기화를 오케스트레이션하는 내부 커넥터에 대해 MirrorMaker 2 커넥터 구성을 사용합니다.
MirrorMaker 2는 다음 커넥터로 구성됩니다.
MirrorSourceConnector-
소스 커넥터는 소스 클러스터에서 대상 클러스터로 주제를 복제합니다. 또한 ACL을 복제하고
MirrorCheckpointConnector를 실행하는 데 필요합니다. MirrorCheckpointConnector- 체크포인트 커넥터는 주기적으로 오프셋을 추적합니다. 활성화하면 소스 클러스터와 대상 클러스터 간에 소비자 그룹 오프셋도 동기화합니다.
MirrorHeartbeatConnector- 하트비트 커넥터는 소스 클러스터와 대상 클러스터 간의 연결을 주기적으로 확인합니다.
다음 표에서는 커넥터 속성과 이를 사용하도록 구성된 커넥터에 대해 설명합니다.
| 속성 | sourceConnector | checkpointConnector | heartbeatConnector |
|---|---|---|---|
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | |
| ✓ | ✓ | |
| ✓ | ✓ | |
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ |
9.2.1. 소비자 그룹 오프셋 주제의 위치 변경 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2는 내부 주제를 사용하여 소비자 그룹의 오프셋을 추적합니다.
offset-syncs주제-
offset-syncs주제는 레코드 메타데이터에서 복제된 주제 파티션의 소스 및 대상 오프셋을 매핑합니다. Checkpoints주제-
Checkpoints주제는 각 소비자 그룹의 복제된 주제 파티션에 대해 소스 및 대상 클러스터에 마지막으로 커밋된 오프셋을 매핑합니다.
MirrorMaker 2에서 내부적으로 사용하므로 이러한 주제와 직접 상호 작용하지 않습니다.
MirrorCheckpointConnector 는 오프셋 추적을 위한 체크포인트 를 내보냅니다. 체크포인트 항목에 대한 오프셋은 구성을 통해 미리 정해진 간격으로 추적됩니다. 두 항목 모두 장애 조치의 올바른 오프셋 위치에서 복제를 완전히 복원할 수 있습니다.
offset-syncs 주제의 위치는 기본적으로 소스 클러스터입니다. offset-syncs.topic.location 커넥터 구성을 사용하여 이를 대상 클러스터로 변경할 수 있습니다. 주제가 포함된 클러스터에 대한 읽기/쓰기 액세스 권한이 필요합니다. 대상 클러스터를 offset-syncs 주제의 위치로 사용하면 소스 클러스터에 대한 읽기 권한만 있는 경우에도 MirrorMaker 2를 사용할 수 있습니다.
9.2.2. 소비자 그룹 오프셋 동기화 링크 복사링크가 클립보드에 복사되었습니다!
__consumer_offsets 주제는 각 소비자 그룹에 대해 커밋된 오프셋에 대한 정보를 저장합니다. 오프셋 동기화는 소스 클러스터의 소비자 그룹에 대한 소비자 오프셋을 대상 클러스터의 소비자 오프셋 주제로 주기적으로 전송합니다.
오프셋 동기화는 특히 활성/수동 구성에서 유용합니다. 활성 클러스터가 다운되면 소비자 애플리케이션은 패시브(standby) 클러스터로 전환하고 마지막으로 전송된 오프셋 위치에서 선택할 수 있습니다.
주제 오프셋 동기화를 사용하려면 체크포인트 커넥터 구성에 sync.group.offsets.enabled 를 추가하고 속성을 true 로 설정하여 동기화를 활성화합니다. 동기화는 기본적으로 비활성화되어 있습니다.
소스 커넥터에서 IdentityReplicationPolicy 를 사용하는 경우 Checkpoint 커넥터 구성에서도 구성해야 합니다. 이렇게 하면 미러링된 소비자 오프셋이 올바른 항목에 적용됩니다.
소비자 오프셋은 대상 클러스터에서 활성 상태가 아닌 소비자 그룹에 대해서만 동기화됩니다. 소비자 그룹이 대상 클러스터에 있는 경우 동기화를 수행할 수 없으며 UNKNOWN_MEMBER_ID 오류가 반환됩니다.
활성화하면 소스 클러스터의 오프셋 동기화가 주기적으로 수행됩니다. checkpoint 커넥터 구성에 sync.group.offsets.interval.seconds 및 emit.checkpoints.interval.seconds 를 추가하여 빈도를 변경할 수 있습니다. 속성은 소비자 그룹 오프셋이 동기화되는 빈도(초)와 오프셋 추적을 위해 내보낸 체크포인트의 빈도를 지정합니다. 두 속성의 기본값은 60초입니다. 기본적으로 10분마다 수행되는 refresh.groups.interval.seconds 속성을 사용하여 새 소비자 그룹의 점검 빈도를 변경할 수도 있습니다.
동기화는 시간 기반이므로 소비자가 수동 클러스터로 전환하면 메시지가 중복될 수 있습니다.
Java로 작성된 애플리케이션이 있는 경우 RemoteClusterUtils.java 유틸리티를 사용하여 애플리케이션을 통해 오프셋을 동기화할 수 있습니다. 유틸리티는 체크포인트 항목에서 소비자 그룹의 원격 오프셋을 가져옵니다.
9.2.3. 하트비트 커넥터 사용 시기 결정 링크 복사링크가 클립보드에 복사되었습니다!
하트비트 커넥터는 하트비트를 내보내 소스와 대상 Kafka 클러스터 간의 연결을 확인합니다. 내부 하트비트 주제는 소스 클러스터에서 복제되므로 하트비트 커넥터를 소스 클러스터에 연결해야 합니다. 하트비트 주제는 대상 클러스터에 있으며 이를 통해 다음을 수행할 수 있습니다.
- 데이터를 미러링하고 있는 모든 소스 클러스터 식별
- 미러링 프로세스의 활성 및 대기 시간 확인
이로 인해 프로세스가 중단되거나 어떤 이유로든 중지되었는지 확인하는 데 도움이 됩니다. 하트비트 커넥터는 Kafka 클러스터 간의 미러링 프로세스를 모니터링하는 데 중요한 도구가 될 수 있지만 항상 사용할 필요는 없습니다. 예를 들어 배포에 네트워크 대기 시간이 짧고 또는 적은 수의 주제가 있는 경우 로그 메시지 또는 기타 모니터링 툴을 사용하여 미러링 프로세스를 모니터링하는 것이 좋습니다. 하트비트 커넥터를 사용하지 않으려면 MirrorMaker 2 구성에서 생략하면 됩니다.
9.2.4. MirrorMaker 2 커넥터 구성 조정 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 커넥터가 제대로 작동하도록 하려면 커넥터 간에 특정 구성 설정을 조정해야 합니다. 특히 다음 속성이 모든 적용 가능한 커넥터에서 동일한 값을 갖도록 합니다.
-
replication.policy.class -
replication.policy.separator -
offset-syncs.topic.location -
topic.filter.class
예를 들어 replication.policy.class 의 값은 source, checkpoint, heartbeat 커넥터에 대해 동일해야 합니다. 설정이 일치하지 않거나 누락되면 데이터 복제 또는 오프셋 동기화에 문제가 발생하므로 동일한 설정으로 구성된 모든 관련 커넥터를 유지해야 합니다.
9.3. 커넥터 생산자 및 소비자 구성 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 커넥터는 내부 생산자와 소비자를 사용합니다. 필요한 경우 이러한 생산자 및 소비자를 구성하여 기본 설정을 덮어쓸 수 있습니다.
생산자 및 소비자 구성 옵션은 MirrorMaker 2 구현에 따라 다르며 변경될 수 있습니다.
생산자 및 소비자 구성은 모든 커넥터에 적용됩니다. config/connect-mirror-maker.properties 파일에 구성을 지정합니다.
속성 파일을 사용하여 다음 형식으로 생산자 및 소비자의 기본 구성을 재정의합니다.
-
<source_cluster_name>.consumer.<property> -
<source_cluster_name>.producer.<property> -
<target_cluster_name>.consumer.<property> -
<target_cluster_name>.producer.<property>
다음 예제에서는 생산자와 소비자를 구성하는 방법을 보여줍니다. 모든 커넥터에 대해 속성이 설정되어 있지만 일부 구성 속성은 특정 커넥터와만 관련이 있습니다.
커넥터 생산자 및 소비자를 위한 구성 예
9.4. 최대 작업 수 지정 링크 복사링크가 클립보드에 복사되었습니다!
Connectors는 Kafka 내외로 데이터를 이동하는 작업을 생성합니다. 각 커넥터는 작업을 실행하는 작업자 Pod 그룹에 분산된 하나 이상의 작업으로 구성됩니다. 많은 수의 파티션을 복제하거나 많은 수의 소비자 그룹의 오프셋을 동기화할 때 작업 수를 늘리는 데 도움이 될 수 있습니다.
작업은 병렬로 실행됩니다. 작업자에는 하나 이상의 작업이 할당됩니다. 단일 작업은 하나의 작업자 Pod에서 처리하므로 작업보다 더 많은 작업자 Pod가 필요하지 않습니다. 작업자보다 많은 작업이 있는 경우 작업자는 여러 작업을 처리합니다.
tasks.max 속성을 사용하여 MirrorMaker 구성의 최대 커넥터 작업 수를 지정할 수 있습니다. 최대 작업 수를 지정하지 않으면 기본 설정은 단일 작업입니다.
하트비트 커넥터는 항상 단일 작업을 사용합니다.
소스 및 체크포인트 커넥터에 대해 시작된 작업 수는 가능한 최대 작업 수와 tasks.max 의 값 사이의 낮은 값입니다. 소스 커넥터의 경우 가능한 최대 작업 수가 소스 클러스터에서 복제되는 각 파티션에 대해 1개입니다. 체크포인트 커넥터의 경우 가능한 최대 작업 수는 소스 클러스터에서 복제되는 각 소비자 그룹에 대해 하나씩입니다. 최대 작업 수를 설정할 때 프로세스를 지원하는 파티션 수와 하드웨어 리소스를 고려하십시오.
인프라가 처리 오버헤드를 지원하는 경우 작업 수를 늘리면 처리량과 대기 시간이 개선될 수 있습니다. 예를 들어 작업을 더 추가하면 많은 수의 파티션 또는 소비자 그룹이 있는 경우 소스 클러스터를 폴링하는 데 걸리는 시간이 줄어듭니다.
MirrorMaker 커넥터의 tasks.max 구성
clusters=cluster-1,cluster-2 # ... tasks.max = 10
clusters=cluster-1,cluster-2
# ...
tasks.max = 10
기본적으로 MirrorMaker 2는 10분마다 새 소비자 그룹을 확인합니다. refresh.groups.interval.seconds 구성을 조정하여 빈도를 변경할 수 있습니다. 더 낮게 조정할 때 주의하십시오. 더 자주 검사하면 성능에 부정적인 영향을 미칠 수 있습니다.
9.5. ACL 규칙 동기화 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 를 사용하는 경우 브로커에 대한 액세스를 관리하는 ACL 규칙은 원격 주제에도 적용됩니다. 소스 주제를 읽을 수 있는 사용자는 이와 동등한 원격 항목을 읽을 수 있습니다.
OAuth 2.0 인증에서는 이러한 방식으로 원격 항목에 대한 액세스를 지원하지 않습니다.
9.6. 전용 모드에서 MirrorMaker 2 실행 링크 복사링크가 클립보드에 복사되었습니다!
구성을 통해 Kafka 클러스터 간에 데이터를 동기화하려면 MirrorMaker 2를 사용합니다. 다음 절차에서는 전용 단일 노드 MirrorMaker 2 클러스터를 구성하고 실행하는 방법을 보여줍니다. 전용 클러스터는 Kafka Connect 작업자 노드를 사용하여 Kafka 클러스터 간에 데이터를 미러링합니다.
분산 모드에서 MirrorMaker 2를 실행할 수도 있습니다. MirrorMaker 2는 전용 모드 및 분산 모드에서 커넥터로 작동합니다. 전용 MirrorMaker 클러스터를 실행할 때 커넥터는 Kafka Connect 클러스터에 구성됩니다. 결과적으로 Kafka Connect 클러스터에 직접 액세스하고 추가 커넥터를 실행하고 REST API를 사용할 수 있습니다. 자세한 내용은 Apache Kafka 설명서를 참조하십시오.
이전 버전의 MirrorMaker는 레거시 모드에서 MirrorMaker 2를 실행하여 계속 지원됩니다.
구성은 다음을 지정해야 합니다.
- 각 Kafka 클러스터
- TLS 인증을 포함하여 각 클러스터에 대한 연결 정보
복제 흐름 및 방향
- 클러스터 간 클러스터
- 주제 주제
- 복제 규칙
- 커밋된 오프셋 추적 간격
다음 절차에서는 속성 파일에서 구성을 만든 다음 MirrorMaker 스크립트 파일을 사용하여 연결을 설정할 때 속성을 전달하여 MirrorMaker 2를 구현하는 방법을 설명합니다.
소스 클러스터에서 복제할 주제 및 소비자 그룹을 지정할 수 있습니다. 소스 및 대상 클러스터의 이름을 지정한 다음 복제할 주제 및 소비자 그룹을 지정합니다.
다음 예에서 클러스터 1에서 2까지의 복제를 위해 주제 및 소비자 그룹이 지정됩니다.
특정 주제 및 소비자 그룹을 복제하는 구성의 예
clusters=cluster-1,cluster-2 cluster-1->cluster-2.topics = topic-1, topic-2 cluster-1->cluster-2.groups = group-1, group-2
clusters=cluster-1,cluster-2
cluster-1->cluster-2.topics = topic-1, topic-2
cluster-1->cluster-2.groups = group-1, group-2
이름 목록을 제공하거나 정규식을 사용할 수 있습니다. 이러한 속성을 설정하지 않으면 기본적으로 모든 주제 및 소비자 그룹이 복제됩니다. 정규식으로 .* 를 사용하여 모든 주제 및 소비자 그룹을 복제할 수도 있습니다. 그러나 클러스터에 불필요한 추가 로드를 유발하지 않도록 하는 데 필요한 주제 및 소비자 그룹만 지정합니다.
사전 준비 사항
샘플 구성 속성 파일은 ./config/connect-mirror-maker.properties 로 제공됩니다.
사전 요구 사항
- 복제하려는 각 Kafka 클러스터 노드의 호스트에 Apache Kafka용 Streams가 설치되어 있어야 합니다.
프로세스
텍스트 편집기에서 샘플 속성 파일을 열거나 새 파일을 생성하고 각 Kafka 클러스터의 연결 정보 및 복제 흐름을 포함하도록 파일을 편집합니다.
다음 예제에서는 두 클러스터, cluster-1 및 cluster-2 를 양방향으로 연결하는 구성을 보여줍니다. 클러스터 이름은 클러스터 속성을 통해 구성할
수있습니다.MirrorMaker 2 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 각 Kafka 클러스터는 별칭으로 식별됩니다.
- 2
- 부트스트랩 주소 와 포트 443 을 사용하는 cluster-1 에 대한 연결 정보입니다. 두 클러스터 모두 포트 443 을 사용하여 OpenShift 경로를 사용하여 Kafka에 연결합니다.
- 3
ssl.속성은 cluster-1 에 대한 TLS 구성을 정의합니다.- 4
- cluster-2 에 대한 연결 정보입니다.
- 5
ssl.속성은 cluster-2 에 대한 TLS 구성을 정의합니다.- 6
- cluster-1 에서 cluster-2 로 복제 흐름이 활성화됩니다.
- 7
- cluster-2 에서 cluster-1 로 복제 흐름이 활성화됩니다.
- 8
- cluster-1 에서 cluster-2 로 모든 주제를 복제합니다. 소스 커넥터는 지정된 항목을 복제합니다. 체크포인트 커넥터는 지정된 항목에 대한 오프셋을 추적합니다.
- 9
- cluster-2 에서 cluster-1 로 특정 주제의 복제.
- 10
- cluster-1 에서 cluster-2 로 모든 소비자 그룹을 복제합니다. 체크포인트 커넥터는 지정된 소비자 그룹을 복제합니다.
- 11
- cluster-2 에서 cluster-1 로 특정 소비자 그룹의 복제.
- 12
- 원격 주제의 이름 변경에 사용되는 구분자를 정의합니다.
- 13
- 활성화하면 ACL이 동기화된 항목에 적용됩니다. 기본값은
false입니다. - 14
- 새 주제를 동기화할지 확인하는 기간입니다.
- 15
- 새 소비자 그룹이 동기화되는지 확인하는 기간입니다.
OPTION: 필요한 경우 원격 주제의 자동 이름을 재정의하는 정책을 추가합니다. 소스 클러스터 이름이 있는 이름을 보류하는 대신 주제는 원래 이름을 유지합니다.
이 선택적 설정은 활성/수동 백업 및 데이터 마이그레이션에 사용됩니다.
replication.policy.class=org.apache.kafka.connect.mirror.IdentityReplicationPolicy
replication.policy.class=org.apache.kafka.connect.mirror.IdentityReplicationPolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow OPTION: 소비자 그룹 오프셋을 동기화하려면 구성을 추가하여 동기화를 활성화하고 관리합니다.
refresh.groups.interval.seconds=60 sync.group.offsets.enabled=true sync.group.offsets.interval.seconds=60 emit.checkpoints.interval.seconds=60
refresh.groups.interval.seconds=60 sync.group.offsets.enabled=true1 sync.group.offsets.interval.seconds=602 emit.checkpoints.interval.seconds=603 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 대상 클러스터에서 Zoo Cryostat 및 Kafka를 시작합니다.
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon \ /opt/kafka/config/zookeeper.properties
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon \ /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/kafka/bin/kafka-server-start.sh -daemon \ /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon \ /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 속성 파일에 정의된 클러스터 연결 구성 및 복제 정책으로 MirrorMaker를 시작합니다.
/opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.properties
/opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow MirrorMaker는 클러스터 간 연결을 설정합니다.
각 대상 클러스터에서 주제가 복제되고 있는지 확인합니다.
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --list
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.7. (더 이상 사용되지 않음) 레거시 모드에서 MirrorMaker 2 사용 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 레거시 모드에서 사용하도록 MirrorMaker 2를 구성하는 방법을 설명합니다. 레거시 모드는 이전 버전의 MirrorMaker를 지원합니다.
MirrorMaker 스크립트 /opt/kafka/bin/kafka-mirror-maker.sh 는 레거시 모드에서 MirrorMaker 2를 실행할 수 있습니다.
Kafka MirrorMaker 1 (문서에서 MirrorMaker 라고도 함)은 Apache Kafka 3.0.0에서 더 이상 사용되지 않으며 Apache Kafka 4.0.0에서 제거됩니다. 그 결과 Kafka MirrorMaker 1이 Apache Kafka용 Streams에서 더 이상 사용되지 않습니다. Kafka MirrorMaker 1은 Apache Kafka 4.0.0을 채택할 때 Apache Kafka용 Streams에서 제거됩니다. 대신 MirrorMaker 2를 IdentityReplicationPolicy 와 함께 사용합니다.
사전 요구 사항
현재 레거시 버전의 MirrorMaker에서 사용하는 속성 파일이 필요합니다.
-
/opt/kafka/config/consumer.properties -
/opt/kafka/config/producer.properties
프로세스
MirrorMaker
consumer.properties및producer.properties파일을 편집하여 MirrorMaker 2 기능을 끕니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 버전의 MirrorMaker와 함께 사용한 속성 파일을 사용하여 변경 사항을 저장하고 MirrorMaker를 다시 시작하십시오.
su - kafka /opt/kafka/bin/kafka-mirror-maker.sh \ --consumer.config /opt/kafka/config/consumer.properties \ --producer.config /opt/kafka/config/producer.properties \ --num.streams=2
su - kafka /opt/kafka/bin/kafka-mirror-maker.sh \ --consumer.config /opt/kafka/config/consumer.properties \ --producer.config /opt/kafka/config/producer.properties \ --num.streams=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소비자속성은 소스 클러스터에 대한 구성을 제공하고생산자속성은 대상 클러스터 구성을 제공합니다.MirrorMaker는 클러스터 간 연결을 설정합니다.
대상 클러스터에서 Zoo Cryostat 및 Kafka를 시작합니다.
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 대상 클러스터의 경우 주제가 복제되고 있는지 확인합니다.
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --list
/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_address> --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10장. Kafka 구성 요소의 로깅 구성 링크 복사링크가 클립보드에 복사되었습니다!
구성 속성에서 Kafka 구성 요소의 로깅 수준을 직접 구성합니다. Kafka 브로커, Kafka Connect 및 MirrorMaker 2의 브로커 수준을 동적으로 변경할 수도 있습니다.
INFO에서 DEBUG로와 같은 로그 수준 세부 정보를 늘리면 Kafka 클러스터 문제 해결에 도움이 될 수 있습니다. 그러나 더 자세한 로그는 성능에 부정적인 영향을 미칠 수 있으며 문제를 진단하기가 더 어려워질 수 있습니다.
10.1. Kafka 로깅 속성 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 구성 요소는 오류 로깅에 Log4j 프레임워크를 사용합니다. 기본적으로 로깅 구성은 다음 속성 파일을 사용하여 classpath 또는 config 디렉토리에서 읽습니다.
-
Kafka 및 Zoo Cryostat의
log4j.properties -
Kafka Connect 및 MirrorMaker 2의
connect-log4j.properties
로거는 명시적으로 설정되지 않은 경우 각 파일에서 log4j.rootLogger 로깅 수준 구성을 상속합니다. 이러한 파일에서 로깅 수준을 변경할 수 있습니다. 다른 로거에 대한 로깅 수준을 추가하고 설정할 수도 있습니다.
구성 요소에 대한 시작 스크립트에서 사용하는 KAFKA_LOG4J_OPTS 환경 변수를 사용하여 로깅 속성 파일의 위치 및 이름을 변경할 수 있습니다.
Kafka 브로커에서 사용하는 로깅 속성 파일의 이름과 위치 전달
su - kafka export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/log4j.properties"; \ /opt/kafka/bin/kafka-server-start.sh \ /opt/kafka/config/server.properties
su - kafka
export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/log4j.properties"; \
/opt/kafka/bin/kafka-server-start.sh \
/opt/kafka/config/server.properties
Zoo Cryostat에서 사용하는 로깅 속성 파일의 이름과 위치 전달
su - kafka export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/log4j.properties"; \ /opt/kafka/bin/zookeeper-server-start.sh -daemon \ /opt/kafka/config/zookeeper.properties
su - kafka
export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/log4j.properties"; \
/opt/kafka/bin/zookeeper-server-start.sh -daemon \
/opt/kafka/config/zookeeper.properties
Kafka Connect에서 사용하는 로깅 속성 파일의 이름과 위치 전달
su - kafka export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/connect-log4j.properties"; \ /opt/kafka/bin/connect-distributed.sh \ /opt/kafka/config/connect-distributed.properties
su - kafka
export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/connect-log4j.properties"; \
/opt/kafka/bin/connect-distributed.sh \
/opt/kafka/config/connect-distributed.properties
MirrorMaker 2에서 사용하는 로깅 속성 파일의 이름과 위치 전달
su - kafka export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/connect-log4j.properties"; \ /opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.properties
su - kafka
export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:/my/path/to/connect-log4j.properties"; \
/opt/kafka/bin/connect-mirror-maker.sh \
/opt/kafka/config/connect-mirror-maker.properties
10.2. Kafka 브로커 로거의 로깅 수준 동적으로 변경 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커 로깅은 각 브로커의 브로커 로거에서 제공합니다. 브로커를 다시 시작할 필요 없이 런타임 시 브로커 로거의 로깅 수준을 동적으로 변경합니다.
브로커 로거를 기본 로깅 수준으로 동적으로 재설정할 수도 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Kafka가 실행 중입니다.
프로세스
kafka사용자로 전환합니다.su - kafka
su - kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow kafka-configs.sh툴을 사용하여 브로커의 모든 브로커 로거를 나열합니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --describe --entity-type broker-loggers --entity-name BROKER-ID
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --describe --entity-type broker-loggers --entity-name BROKER-IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 브로커
0의 경우 다음과 같습니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type broker-loggers --entity-name 0
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type broker-loggers --entity-name 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면
TRACE,DEBUG,INFO,WARN,ERROR또는FATAL의 로깅 수준이 반환됩니다.예를 들면 다음과 같습니다.
#... kafka.controller.ControllerChannelManager=INFO sensitive=false synonyms={} kafka.log.TimeIndex=INFO sensitive=false synonyms={}#... kafka.controller.ControllerChannelManager=INFO sensitive=false synonyms={} kafka.log.TimeIndex=INFO sensitive=false synonyms={}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 하나 이상의 브로커 로거의 로깅 수준을 변경합니다.
--alter및--add-config옵션을 사용하고 각 로거와 수준을 큰따옴표로 쉼표로 구분된 목록으로 지정합니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --alter --add-config "LOGGER-ONE=NEW-LEVEL,LOGGER-TWO=NEW-LEVEL" --entity-type broker-loggers --entity-name BROKER-ID
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --alter --add-config "LOGGER-ONE=NEW-LEVEL,LOGGER-TWO=NEW-LEVEL" --entity-type broker-loggers --entity-name BROKER-IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 브로커
0의 경우 다음과 같습니다./opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config "kafka.controller.ControllerChannelManager=WARN,kafka.log.TimeIndex=WARN" --entity-type broker-loggers --entity-name 0
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config "kafka.controller.ControllerChannelManager=WARN,kafka.log.TimeIndex=WARN" --entity-type broker-loggers --entity-name 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 성공하면 다음을 반환합니다.
Completed updating config for broker: 0.
Completed updating config for broker: 0.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
브로커 로거 재설정
kafka-configs.sh 툴을 사용하여 하나 이상의 브로커 로거를 기본 로깅 수준으로 재설정할 수 있습니다. alter 및 옵션을 사용하고 각 브로커 로거를 큰따옴표로 쉼표로 구분된 목록으로 지정합니다.
-- delete-config
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --delete-config "LOGGER-ONE,LOGGER-TWO" --entity-type broker-loggers --entity-name BROKER-ID
/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --delete-config "LOGGER-ONE,LOGGER-TWO" --entity-type broker-loggers --entity-name BROKER-ID
10.3. Kafka Connect 및 MirrorMaker 2의 로깅 수준을 동적으로 변경 링크 복사링크가 클립보드에 복사되었습니다!
재시작하지 않고도 런타임에 Kafka Connect 작업자 또는 MirrorMaker 2 커넥터의 로깅 수준을 동적으로 변경합니다.
Kafka Connect API를 사용하여 작업자 또는 커넥터 로거의 로그 수준을 일시적으로 변경합니다. Kafka Connect API는 admin/loggers 엔드포인트를 제공하여 로깅 수준을 가져오거나 수정합니다. API를 사용하여 로그 수준을 변경하면 connect-log4j.properties 구성 파일의 로거 구성이 변경되지 않습니다. 필요한 경우 구성 파일의 로깅 수준을 영구적으로 변경할 수 있습니다.
분산 또는 독립 실행형 모드에서 런타임 시 MirrorMaker 2의 로깅 수준만 변경할 수 있습니다. 전용 MirrorMaker 2 클러스터에 Kafka Connect REST API가 없으므로 로깅 수준을 변경할 수 없습니다.
Kafka Connect API의 기본 리스너는 이 절차에서 사용되는 포트 8083에 있습니다. admin.listeners 구성을 사용하여 리스너를 변경하거나 추가하고 TLS 인증을 활성화할 수도 있습니다.
관리 끝점에 대한 리스너 구성 의 예
admin.listeners=https://localhost:8083 admin.listeners.https.ssl.truststore.location=/path/to/truststore.jks admin.listeners.https.ssl.truststore.password=123456 admin.listeners.https.ssl.keystore.location=/path/to/keystore.jks admin.listeners.https.ssl.keystore.password=123456
admin.listeners=https://localhost:8083
admin.listeners.https.ssl.truststore.location=/path/to/truststore.jks
admin.listeners.https.ssl.truststore.password=123456
admin.listeners.https.ssl.keystore.location=/path/to/keystore.jks
admin.listeners.https.ssl.keystore.password=123456
관리자 끝점을 사용할 수 있도록 하지 않으려면 빈 문자열을 지정하여 구성에서 비활성화할 수 있습니다.
관리자 끝점을 비활성화하는 리스너 구성의 예
admin.listeners=
admin.listeners=
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Kafka가 실행 중입니다.
- Kafka Connect 또는 MirrorMaker 2가 실행 중입니다.
프로세스
kafka사용자로 전환합니다.su - kafka
su - kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow connect-log4j.properties파일에 구성된 로거의 현재 로깅 수준을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl 명령을 사용하여 Kafka Connect API의
admin/loggers끝점에서 로깅 수준을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow jq는 JSON 형식으로 출력을 출력합니다. 이 목록에는 표준조직및루트수준 로거와 수정된 로깅 수준이 있는 특정 로거가 표시되어 있습니다.Kafka Connect에서
admin.listeners구성에 대해 TLS(Transport Layer Security) 인증을 구성하는 경우 로거 끝점의 주소는 https와 같은 https 프로토콜을 사용하여admin.listeners에 지정된 값입니다.특정 로거의 로그 수준을 가져올 수도 있습니다.
curl -s http://localhost:8083/admin/loggers/org.apache.kafka.connect.mirror.MirrorCheckpointConnector | jq { "level": "INFO" }curl -s http://localhost:8083/admin/loggers/org.apache.kafka.connect.mirror.MirrorCheckpointConnector | jq { "level": "INFO" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow PUT 방법을 사용하여 로거의 로그 수준을 변경합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 루트로거를 변경하면 기본적으로 루트 로깅 수준을 사용하는 로거의 로깅 수준도 변경됩니다.
11장. Kafka 정적 할당량 플러그인을 사용하여 브로커에 제한 설정 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 정적 할당량 플러그인은 기술 프리뷰 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. Red Hat은 프로덕션 환경에서 기술 프리뷰 기능을 구현하는 것을 권장하지 않습니다. 이 기술 프리뷰 기능을 통해 향후 제품 혁신에 조기에 액세스할 수 있으므로 개발 프로세스 중에 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
Kafka 정적 할당량 플러그인을 사용하여 Kafka 클러스터의 브로커에 처리량 및 스토리지 제한을 설정합니다. Kafka 구성 파일에 속성을 추가하여 플러그인을 활성화하고 제한을 설정합니다. 브로커와 상호 작용하는 클라이언트에 제한을 두도록 바이트 비율 임계값 및 스토리지 할당량을 설정할 수 있습니다.
생산자 및 소비자 대역폭에 대한 바이트 비율 임계값을 설정할 수 있습니다. 총 제한은 브로커에 액세스하는 모든 클라이언트에 분산됩니다. 예를 들어 생산자를 위해 바이트 비율 임계값을 40MBps로 설정할 수 있습니다. 두 생산자가 실행 중인 경우 각각 처리량이 20MB로 제한됩니다.
스토리지 할당량은 소프트 제한과 하드 제한 간에 Kafka 디스크 스토리지 제한을 제한합니다. 제한은 사용 가능한 모든 디스크 공간에 적용됩니다. 생산자는 소프트 제한과 하드 제한 사이에 점진적으로 느려집니다. 제한을 통해 디스크가 너무 빨리 채워지고 용량을 초과할 수 있습니다. 전체 디스크로 인해 수정하기 어려운 문제가 발생할 수 있습니다. 하드 제한은 최대 스토리지 제한입니다.
JBOD 스토리지의 경우 제한이 모든 디스크에 적용됩니다. 브로커가 두 개의 1TB 디스크를 사용하고 할당량이 1.1TB인 경우 하나의 디스크가 채워지고 다른 디스크는 거의 비어 있습니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
Kafka 구성 속성 파일을 편집합니다.
플러그인 속성은 이 예제 구성에 표시됩니다.
Kafka 고정 할당량 플러그인 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 구성 파일을 사용하여 Kafka 브로커를 시작합니다.
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커가 실행 중인지 확인합니다.
jcmd | grep Kafka
jcmd | grep KafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12장. Kafka 브로커 및 Zoo Cryostat 노드 추가 및 제거 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터에서 브로커 및 Zoo Cryostat 노드의 추가 및 제거를 관리하는 것은 안정적이고 확장 가능한 시스템을 유지하는 데 중요합니다. 사용 가능한 브로커 수에 추가할 때 브로커의 주제에 대한 기본 복제 요소 및 최소 in-sync 복제본을 구성할 수 있습니다. 동적 재구성을 사용하여 중단 없이 ensemble에서 Zoo Cryostat 노드를 추가하고 제거할 수 있습니다.
12.1. 브로커 추가 또는 제거를 통해 클러스터 스케일링 링크 복사링크가 클립보드에 복사되었습니다!
브로커를 추가하여 Kafka 클러스터를 확장하면 클러스터의 성능과 안정성을 높일 수 있습니다. 브로커를 더 많이 추가하면 사용 가능한 리소스가 증가하여 클러스터가 더 큰 워크로드를 처리하고 더 많은 메시지를 처리할 수 있습니다. 또한 더 많은 복제본 및 백업을 제공하여 내결함성을 향상시킬 수 있습니다. 반대로 활용도가 낮은 브로커를 제거하면 리소스 소비를 줄이고 효율성을 향상시킬 수 있습니다. 중단이나 데이터 손실을 방지하려면 스케일링을 신중하게 수행해야 합니다. 클러스터의 모든 브로커에 파티션을 재배포하면 각 브로커의 리소스 사용량이 줄어들어 클러스터의 전체 처리량이 증가할 수 있습니다.
Kafka 주제의 처리량을 높이기 위해 해당 항목의 파티션 수를 늘릴 수 있습니다. 이를 통해 클러스터의 여러 브로커 간에 주제의 부하를 공유할 수 있습니다. 그러나 모든 브로커가 특정 리소스(예: I/O)에 의해 제한되는 경우 파티션을 더 추가하면 처리량이 증가되지 않습니다. 이 경우 클러스터에 브로커를 더 추가해야 합니다.
다중 노드 Kafka 클러스터를 실행할 때 브로커를 추가하면 복제본 역할을 하는 클러스터의 브로커 수에 영향을 미칩니다. 주제의 실제 복제 요소는 default.replication.factor 및 min.insync.replicas 의 설정과 사용 가능한 브로커 수에 따라 결정됩니다. 예를 들어 3의 복제 요소는 주제의 각 파티션이 세 브로커에 복제되어 브로커가 실패할 경우 내결함성을 보장합니다.
복제본 구성 예
default.replication.factor = 3 min.insync.replicas = 2
default.replication.factor = 3
min.insync.replicas = 2
브로커를 추가하거나 제거하면 Kafka에서 파티션을 자동으로 다시 할당하지 않습니다. 가장 좋은 방법은 Cruise Control을 사용하는 것입니다. 클러스터를 확장하거나 축소할 때 Cruise Control의 add-brokers 및 remove-brokers 모드를 사용할 수 있습니다.
-
Kafka 클러스터를 확장한 후 기존 브로커에서 새로 추가된 브로커로 파티션 복제본을 이동한 후
add-brokers모드를 사용합니다. -
Kafka 클러스터를 축소하기 전에 제거하려는 브로커에서 파티션 복제본을 이동하기 전에
remove-brokers모드를 사용합니다.
브로커를 축소할 때는 클러스터에서 제거할 특정 Pod를 지정할 수 없습니다. 대신 브로커 제거 프로세스는 가장 많은 번호의 Pod에서 시작됩니다.
12.2. Zoo Cryostat 클러스터에 노드 추가 링크 복사링크가 클립보드에 복사되었습니다!
동적 재구성 을 사용하여 전체 클러스터를 중지하지 않고 Zoo Cryostat 클러스터에서 노드를 추가합니다. 동적 재구성을 통해 Zoo Cryostat는 중단 없이 Zoo Cryostat 클러스터를 구성하는 노드 세트의 멤버십을 변경할 수 있습니다.
사전 요구 사항
-
동적 재구성은 Zoo Cryostat 구성 파일(
reconfigEnabled=true)에서 활성화됩니다. - Zookeeper 인증이 활성화되고 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.
프로세스
추가하려는 각 Zoo Cryostat 서버에 대해 한 번에 하나씩 다음 단계를 수행합니다.
- 4.1절. “다중 노드 Zoo Cryostat 클러스터 실행” 에 설명된 대로 Zoo Cryostat 클러스터에 서버를 추가한 다음 Zoo Cryostat를 시작합니다.
- 새 서버의 IP 주소 및 구성된 액세스 포트를 확인합니다.
서버에
대한 Zookeeper-shell세션을 시작합니다. 클러스터에 액세스할 수 있는 머신에서 다음 명령을 실행합니다(액세스 권한이 있는 경우 Zoo Cryostat 노드 또는 로컬 시스템 중 하나일 수 있습니다).su - kafka /opt/kafka/bin/zookeeper-shell.sh <ip-address>:<zk-port>
su - kafka /opt/kafka/bin/zookeeper-shell.sh <ip-address>:<zk-port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘 세션에서 Zoo Cryostat 노드가 실행 중인 상태에서 다음 행을 입력하여 새 서버를 쿼럼에 투표 멤버로 추가합니다.
reconfig -add server.<positive-id> = <address1>:<port1>:<port2>[:role];[<client-port-address>:]<client-port>
reconfig -add server.<positive-id> = <address1>:<port1>:<port2>[:role];[<client-port-address>:]<client-port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
reconfig -add server.4=172.17.0.4:2888:3888:participant;172.17.0.4:2181
reconfig -add server.4=172.17.0.4:2888:3888:participant;172.17.0.4:2181Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서 &
lt;positive-id>는 새로운 서버 ID4입니다.두 포트의 경우 <
port1> 2888 은 Zoo Cryostat 서버 간 통신용이며 <port2> 3888 은 리더 선택을 위한 것입니다.새 구성은 Zoo Cryostat 클러스터의 다른 서버로 전파됩니다. 새 서버는 이제 쿼럼의 전체 멤버입니다.
12.3. Zoo Cryostat 클러스터에서 노드 제거 링크 복사링크가 클립보드에 복사되었습니다!
동적 재구성 을 사용하여 전체 클러스터를 중지하지 않고 Zoo Cryostat 클러스터에서 노드를 제거합니다. 동적 재구성을 통해 Zoo Cryostat는 중단 없이 Zoo Cryostat 클러스터를 구성하는 노드 세트의 멤버십을 변경할 수 있습니다.
사전 요구 사항
-
동적 재구성은 Zoo Cryostat 구성 파일(
reconfigEnabled=true)에서 활성화됩니다. - Zookeeper 인증이 활성화되고 인증 메커니즘을 사용하여 새 서버에 액세스할 수 있습니다.
프로세스
제거할 각 Zoo Cryostat 서버에 대해 한 번에 하나씩 다음 단계를 수행합니다.
축소 후 유지됩니다 (예: 서버 1).
참고Zoo Cryostat 클러스터에 대해 구성된 인증 메커니즘을 사용하여 서버에 액세스합니다.
서버 5와 같이 서버를 제거합니다.
reconfig -remove 5
reconfig -remove 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 삭제한 서버를 비활성화합니다.
13장. 클러스터 재조정에 Cruise Control 사용 링크 복사링크가 클립보드에 복사되었습니다!
cruise Control은 클러스터 워크로드 모니터링, 사전 정의된 제약 조건에 따라 클러스터 재조정, 예외 감지 및 수정과 같은 Kafka 작업을 자동화하기 위한 오픈 소스 시스템입니다. 로드 모니터, Analyzer, Anomaly Detector 및 Executor-및 클라이언트 상호 작용을 위한 REST API 등 4가지 주요 구성 요소로 구성됩니다.
Cruise Control 을 사용하여 Kafka 클러스터의 균형을 조정할 수 있습니다. Red Hat Enterprise Linux의 Apache Kafka용 cruise Control for Streams는 별도의 압축 배포로 제공됩니다.
Apache Kafka의 스트림은 REST API를 사용하여 다음 Cruise Control 기능을 지원합니다.
- 최적화 목표에서 최적화 제안을 생성합니다.
최적화 제안을 기반으로 Kafka 클러스터 재조정.
- 최적화 목표
최적화 목표는 리밸런스에서 달성하기위한 특정 목표를 설명합니다. 예를 들어 목표는 브로커 간에 주제 복제본을 보다 균등하게 배포하는 것입니다. 구성을 통해 포함할 목표를 변경할 수 있습니다. 목표는 하드 목표 또는 소프트 목표로 정의됩니다. Cruise Control 배포 구성을 통해 하드 목표를 추가할 수 있습니다. 또한 이러한 각 카테고리에 적합한 기본, 기본값 및 사용자 제공 목표를 가지고 있습니다.
- 하드 목표는 사전 설정되었으며 성공적인 최적화 제안에 충족해야 합니다.
- 최적화 제안이 성공하려면 소프트 목표를 충족할 필요가 없습니다. 모든 어려운 목표를 달성하는 경우 별도로 설정할 수 있습니다.
- 주요 목표는 Cruise Control에서 상속됩니다. 일부는 어려운 목표로 구성되어 있습니다. 주요 목표는 기본적으로 최적화 제안에 사용됩니다.
- 기본 목표는 기본적으로 기본 목표와 동일합니다. 자체 기본 목표 세트를 지정할 수 있습니다.
- 사용자 제공 목표는 특정 최적화 제안을 생성하도록 구성된 기본 목표의 하위 집합입니다.
- 최적화 제안
최적화 제안은 재조정에서 달성하려는 목표를 포함합니다. 제안된 변경 사항에 대한 요약과 리밸런스로 가능한 결과를 생성하기 위한 최적화 제안을 생성합니다. 목표는 특정 우선 순위 순서로 평가됩니다. 그런 다음 제안서를 승인하거나 거부하도록 선택할 수 있습니다. 조정된 목표 세트로 다시 실행하려는 제안을 거부할 수 있습니다.
다음 API 끝점 중 하나에 요청하여 최적화 제안을 생성하고 승인할 수 있습니다.
- 전체 재조정을 실행하기 위해 /rebalance 엔드포인트입니다.
- Kafka 클러스터를 확장할 때 브로커를 추가한 후 재조정할 /add_broker 끝점.
- Kafka 클러스터를 축소할 때 브로커를 제거하기 전에 재조정할 /remove_broker 끝점.
구성 속성 파일을 통해 최적화 목표를 구성합니다. Apache Kafka용 스트림은 Cruise Control에 대한 속성 파일의 예를 제공합니다.
13.1. 크루즈 컨트롤 구성 요소 및 기능 링크 복사링크가 클립보드에 복사되었습니다!
크루즈 컨트롤은 로드 모니터, Analyzer, Anomaly Detector 및 Executor-및 클라이언트 상호 작용을 위한 REST API 등 네 가지 주요 구성 요소로 구성됩니다. Apache Kafka의 스트림은 REST API를 사용하여 다음 Cruise Control 기능을 지원합니다.
- 최적화 목표에서 최적화 제안을 생성합니다.
- 최적화 제안을 기반으로 Kafka 클러스터 재조정.
- 최적화 목표
최적화 목표는 리밸런스에서 달성하기위한 특정 목표를 설명합니다. 예를 들어 목표는 브로커 간에 주제 복제본을 보다 균등하게 배포하는 것입니다. 구성을 통해 포함할 목표를 변경할 수 있습니다. 목표는 하드 목표 또는 소프트 목표로 정의됩니다. Cruise Control 배포 구성을 통해 하드 목표를 추가할 수 있습니다. 또한 이러한 각 카테고리에 적합한 기본, 기본값 및 사용자 제공 목표를 가지고 있습니다.
- 하드 목표는 사전 설정되었으며 성공적인 최적화 제안에 충족해야 합니다.
- 최적화 제안이 성공하려면 소프트 목표를 충족할 필요가 없습니다. 모든 어려운 목표를 달성하는 경우 별도로 설정할 수 있습니다.
- 주요 목표는 Cruise Control에서 상속됩니다. 일부는 어려운 목표로 구성되어 있습니다. 주요 목표는 기본적으로 최적화 제안에 사용됩니다.
- 기본 목표는 기본적으로 기본 목표와 동일합니다. 자체 기본 목표 세트를 지정할 수 있습니다.
- 사용자 제공 목표는 특정 최적화 제안을 생성하도록 구성된 기본 목표의 하위 집합입니다.
- 최적화 제안
최적화 제안은 재조정에서 달성하려는 목표를 포함합니다. 제안된 변경 사항에 대한 요약과 리밸런스로 가능한 결과를 생성하기 위한 최적화 제안을 생성합니다. 목표는 특정 우선 순위 순서로 평가됩니다. 그런 다음 제안서를 승인하거나 거부하도록 선택할 수 있습니다. 조정된 목표 세트로 다시 실행하려는 제안을 거부할 수 있습니다.
세 가지 모드 중 하나로 최적화 제안을 생성할 수 있습니다.
-
full은 기본 모드이며 전체 리밸런스를 실행합니다. -
add-brokers는 Kafka 클러스터를 확장할 때 브로커를 추가한 후 사용하는 모드입니다. -
remove-brokers는 Kafka 클러스터를 축소할 때 브로커를 제거하기 전에 사용하는 모드입니다.
-
다른 Cruise Control 기능은 현재 자체 복제, 알림 및 쓰기 사용자 고유의 목표를 포함하여 지원되지 않습니다.
13.2. Cruise Control 다운로드 링크 복사링크가 클립보드에 복사되었습니다!
Cruise Control의 ZIP 파일 배포는 Red Hat 웹 사이트에서 다운로드할 수 있습니다. Apache Kafka 소프트웨어 다운로드 페이지 에서는 Streams for Apache Kafka에서 최신 버전의 Apache Kafka를 다운로드할 수 있습니다.
프로세스
- Red Hat Customer Portal 에서 Red Hat Streams for Apache Kafka Cruise Control 아카이브의 최신 버전을 다운로드합니다.
/opt/cruise-control디렉토리를 만듭니다.sudo mkdir /opt/cruise-control
sudo mkdir /opt/cruise-controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Cruise Control ZIP 파일의 내용을 새 디렉터리에 추출합니다.
unzip amq-streams-<version>-cruise-control-bin.zip -d /opt/cruise-control
unzip amq-streams-<version>-cruise-control-bin.zip -d /opt/cruise-controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/cruise-control디렉터리의 소유권을kafka사용자로 변경합니다.sudo chown -R kafka:kafka /opt/cruise-control
sudo chown -R kafka:kafka /opt/cruise-controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. Cruise Control Metrics Reporter 배포 링크 복사링크가 클립보드에 복사되었습니다!
Cruise Control을 시작하기 전에 제공된 Cruise Control Metrics Reporter를 사용하도록 Kafka 브로커를 구성해야 합니다. Metrics Reporter의 파일은 Apache Kafka 설치 아티팩트용 Streams와 함께 제공됩니다.
런타임 시 로드될 때 Metrics Reporter는 자동으로 생성된 세 가지 주제 중 하나인 __CruiseControlMetrics 주제로 지표를 보냅니다. 크루즈 컨트롤은 이러한 메트릭을 사용하여 워크로드 모델을 생성 및 업데이트하고 최적화 제안을 계산합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다.
프로세스
Kafka 클러스터의 각 브로커와 한 번에 하나씩 다음을 수행합니다.
Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 구성 속성 파일을 편집하여 Cruise Control Metrics Reporter를 구성합니다.
metric.reporters구성 옵션에CruiseControlMetricsReporter클래스를 추가합니다. 기존 지표 보고서를 제거하지 마십시오.metric.reporters=com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
metric.reporters=com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 구성 옵션 및 값을 추가합니다.
cruise.control.metrics.topic.auto.create=true cruise.control.metrics.topic.num.partitions=1 cruise.control.metrics.topic.replication.factor=1
cruise.control.metrics.topic.auto.create=true cruise.control.metrics.topic.num.partitions=1 cruise.control.metrics.topic.replication.factor=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 옵션을 사용하면 Cruise Control Metrics Reporter에서 로그 정리 정책
DELETE를 사용하여__CruiseControlMetrics주제를 만들 수 있습니다. 자세한 내용은 Cruise Control Metrics 항목에 대한 자동 생성 주제 및 로그 정리 정책을 참조하십시오.
필요한 경우 SSL을 구성합니다.
Kafka 구성 속성 파일에서 관련 클라이언트 구성 속성을 설정하여 Cruise Control Metrics Reporter와 Kafka 브로커 간의 SSL을 구성합니다.
Metrics Reporter는
cruise.control.metrics.reporter접두사를 사용하여 모든 표준 생산자별 구성 속성을 허용합니다. 예:cruise.control.metrics.reporter.ssl.truststore.password.Cruise Control 속성 파일(
/opt/cruise-control/config/cruisecontrol.properties)에서 관련 클라이언트 구성 속성을 설정하여 Kafka 브로커와 Cruise Control 서버 간의 SSL을 구성합니다.cruise Control은 Kafka의 SSL 클라이언트 속성 옵션을 상속하고 모든 Cruise Control 서버 클라이언트에 해당 속성을 사용합니다.
Kafka 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 멀티 노드 클러스터에서 브로커를 다시 시작하는 방법에 대한 자세한 내용은 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
- 나머지 브로커에 대해 1-5 단계를 반복합니다.
13.4. Cruise Control 구성 및 시작 링크 복사링크가 클립보드에 복사되었습니다!
Cruise Control에서 사용하는 속성을 구성한 다음 kafka-cruise-control-start.sh 스크립트를 사용하여 Cruise Control 서버를 시작합니다. 서버는 전체 Kafka 클러스터의 단일 시스템에서 호스팅됩니다.
Cruise Control이 시작될 때 세 가지 주제가 자동으로 생성됩니다. 자세한 내용은 자동 생성 항목을 참조하십시오.
사전 요구 사항
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다. - Cruise Control을 다운로드 했습니다.
- Cruise Control Metrics Reporter를 배포 했습니다.
프로세스
-
Cruise Control 속성 파일(
/opt/cruise-control/config/cruisecontrol.properties)을 편집합니다. 다음 예제 구성에 표시된 속성을 구성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Kafka 브로커의 호스트 및 포트 번호(항상 포트 9092).
- 2
- Kafka 지표 샘플 저장소 주제의 복제 인수입니다. 단일 노드 Kafka 및 Zoo Cryostat 클러스터에서 Cruise Control을 평가하는 경우 이 속성을 1로 설정합니다. 프로덕션 용도의 경우 이 속성을 2 이상으로 설정합니다.
- 3
- 브로커 리소스의 최대 용량 제한을 설정하는 구성 파일입니다. Kafka 배포 구성에 적용되는 파일을 사용합니다. 자세한 내용은 용량 구성 을 참조하십시오.
- 4
- FQDN(정규화된 도메인 이름)을 사용하여 콤마로 구분된 기본 최적화 목표 목록입니다. 여러 주요 최적화 목표 (참조 5)는 이미 기본 최적화 목표로 설정되어 있습니다. 원하는 경우 목표를 추가하거나 제거할 수 있습니다. 자세한 내용은 13.5절. “최적화 목표 개요”의 내용을 참조하십시오.
- 5
- FQDN을 사용하여 콤마로 구분된 주요 최적화 목표 목록입니다. 최적화 제안을 생성하는 데 사용되는 목표를 완전히 제외하려면 목록에서 제거하십시오. 자세한 내용은 13.5절. “최적화 목표 개요”의 내용을 참조하십시오.
- 6
- FQDN을 사용하여 콤마로 구분된 하드 목표 목록입니다. 주요 최적화 목표 중 7개는 이미 하드 목표로 설정되어 있습니다. 원하는 경우 목표를 추가하거나 제거할 수 있습니다. 자세한 내용은 13.5절. “최적화 목표 개요”의 내용을 참조하십시오.
- 7
- 기본 최적화 목표에서 생성되는 캐시된 최적화 제안을 새로 고치는 간격(밀리초)입니다. 자세한 내용은 13.6절. “최적화 제안 개요”의 내용을 참조하십시오.
- 8
- Zoo Cryostat 연결의 호스트 및 포트 번호(항상 포트 2181).
Cruise Control Server를 시작합니다. 서버는 기본적으로 포트 9092에서 시작합니다. 선택적으로 다른 포트를 지정합니다.
cd /opt/cruise-control/ ./kafka-cruise-control-start.sh config/cruisecontrol.properties <port_number>
cd /opt/cruise-control/ ./kafka-cruise-control-start.sh config/cruisecontrol.properties <port_number>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cruise Control이 실행 중인지 확인하려면 Cruise Control 서버의
/state엔드포인트에 GET 요청을 보냅니다.curl -X GET 'http://<cc_host>:<cc_port>/kafkacruisecontrol/state'
curl -X GET 'http://<cc_host>:<cc_port>/kafkacruisecontrol/state'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자동 생성 주제
다음 표에서는 Cruise Control이 시작될 때 자동으로 생성되는 세 가지 주제를 보여줍니다. 이러한 주제는 크루즈 제어가 제대로 작동하려면 필수이며 삭제하거나 변경하지 않아야 합니다.
| 자동 생성 주제 | 작성자 | 함수 |
|---|---|---|
|
| cruise Control Metrics Reporter | 각 Kafka 브로커의 Metrics Reporter의 원시 지표를 저장합니다. |
|
| 크루즈 제어 | 각 파티션에 대해 파생된 지표를 저장합니다. 이는 Metric Sample Aggregator 에 의해 생성됩니다. |
|
| 크루즈 제어 | 클러스터 워크로드 모델을 생성하는 데 사용되는 메트릭 샘플을 저장합니다. |
자동 생성 항목에서 로그 압축이 비활성화되어 있는지 확인하려면 13.3절. “Cruise Control Metrics Reporter 배포” 에 설명된 대로 Cruise Control Metrics Reporter를 구성해야 합니다. 로그 압축은 Cruise Control에 필요한 레코드를 제거하고 제대로 작동하지 못하도록 할 수 있습니다.
13.5. 최적화 목표 개요 링크 복사링크가 클립보드에 복사되었습니다!
최적화 목표는 Kafka 클러스터의 워크로드 재배포 및 리소스 사용률에 대한 제약입니다. Kafka 클러스터를 재조정하기 위해 Cruise Control은 최적화 목표를 사용하여 최적화 제안을 생성합니다.
13.5.1. 우선 순위의 목표 순서 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux의 Apache Kafka용 스트림은 Cruise Control 프로젝트에서 개발된 모든 최적화 목표를 지원합니다. 지원되는 목표는 기본 우선순위 내림차순으로 다음과 같습니다.
- Rack-awareness
- 주제 집합의 브로커당 최소 리더 복제본 수
- 복제본 용량
- 용량: 디스크 용량, 네트워크 인바운드 용량, 네트워크 아웃 바운드 용량
- CPU 용량
- 복제본 배포
- 잠재적인 네트워크 출력
- 리소스 배포: 디스크 사용률 배포, 네트워크 인바운드 사용률 배포, 네트워크 아웃 바운드 사용 배포
- Leader bytes-in rate distribution
- 주제 복제본 배포
- CPU 사용량 배포
- 리더 복제본 배포
- 선호하는 리더 선택
- Kafka Assigner 디스크 사용량 배포
- Intra-broker 디스크 용량
- Intra-broker 디스크 사용량
각 최적화 목표에 대한 자세한 내용은 Cruise Control Wiki 의 목표를 참조하십시오.
13.5.2. Cruise Control 속성 파일의 설정 목표 링크 복사링크가 클립보드에 복사되었습니다!
cruisecontrol.properties 파일에서 cruise-control/config/ 디렉터리에 최적화 목표를 구성합니다. 크루즈 컨트롤에는 주요, 기본값 및 사용자 제공 최적화 목표를 충족해야 하는 하드 최적화 목표에 대한 구성이 있습니다.
다음 구성에서 다음 최적화 목표를 지정할 수 있습니다.
-
주요 목적 Cryostat-
cruisecontrol.properties파일 -
하드 목적 Cryostat-
cruisecontrol.properties파일 -
기본 목적 Cryostat-
cruisecontrol.properties파일 - 사용자 제공 목표 Cryostat - Cryostatruntime 매개변수
선택적으로 사용자 제공 최적화 목표는 런타임 시 /rebalance 엔드포인트에 대한 요청의 매개변수로 설정됩니다.
최적화 목표는 브로커 리소스에 대한 모든 용량 제한 의 적용을 받습니다.
13.5.3. 하드 및 소프트 최적화 목표 링크 복사링크가 클립보드에 복사되었습니다!
하드 목표는 최적화 제안에 충족해야 하는 목표입니다. 하드 목표로 구성되지 않은 목표는 소프트 목표 라고 합니다. 소프트 목표는 최선의 노력 목표로 생각할 수 있습니다: 최적화 제안에 만족 할 필요는 없지만 최적화 계산에 포함됩니다.
크루즈 컨트롤은 가능한 한 많은 하드 목표와 가능한 많은 소프트 목표를 충족하는 최적화 제안을 계산합니다. 모든 하드 목표를 충족하지 않는 최적화 제안은 Analyzer에 의해 거부되며 사용자에게 전송되지 않습니다.
예를 들어 클러스터에 주제의 복제본을 균등하게 분배하는 소프트 목표를 가질 수 있습니다(복제 복제본 배포 목표 참조). 크루즈 컨트롤은 구성된 모든 하드 목표를 달성할 수 있도록 하는 경우 이 목표를 무시합니다.
Cruise Control에서 다음과 같은 주요 최적화 목표는 하드 목표로 사전 설정됩니다.
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal
하드 목표를 변경하려면 cruisecontrol.properties 파일의 hard.goals 속성을 편집하고 정규화된 도메인 이름을 사용하여 목표를 지정합니다.
하드 목표의 수를 늘리면 Cruise Control이 계산되고 유효한 최적화 제안을 생성할 가능성이 줄어듭니다.
13.5.4. 주요 최적화 목표 링크 복사링크가 클립보드에 복사되었습니다!
주요 최적화 목표는 모든 사용자가 사용할 수 있습니다. 주요 최적화 목표에 나열되지 않은 목표는 Cruise Control 작업에서 사용할 수 없습니다.
다음의 주요 최적화 목표는 cruisecontrol.properties 파일의 목적 속성에 내림차순으로 사전 설정됩니다.
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal; PreferredLeaderElectionGoal
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal; PreferredLeaderElectionGoal
복잡성을 줄이기 위해 최적화 제안을 생성하기 위해 하나 이상의 목표를 완전히 제외할 필요가 없는 경우 사전 설정된 기본 최적화 목표를 변경하지 않는 것이 좋습니다. 기본 최적화 목표의 우선 순위 순서는 기본 최적화 목표를 위해 구성에서 수정할 수 있습니다.
사전 설정된 기본 최적화 목표를 수정하려면 목표 속성의 목표 목록을 내림차순으로 지정합니다. cruisecontrol.properties 파일에 표시된 대로 정규화된 도메인 이름을 사용합니다.
하나 이상의 주요 목표를 지정하거나 Cruise Control이 충돌합니다.
사전 설정된 기본 최적화 목표를 변경하는 경우 구성된 hard.goals 가 구성한 기본 최적화 목표의 하위 집합인지 확인해야 합니다. 그렇지 않으면 최적화 제안을 생성할 때 오류가 발생합니다.
13.5.5. 기본 최적화 목표 링크 복사링크가 클립보드에 복사되었습니다!
cruise Control은 기본 최적화 목표 목록을 사용하여 캐시된 최적화 제안을 생성합니다. 자세한 내용은 13.6절. “최적화 제안 개요”의 내용을 참조하십시오.
사용자 제공 최적화 목표를 설정하여 런타임 시 기본 최적화 목표를 재정의할 수 있습니다.
다음 기본 최적화 목표는 cruisecontrol.properties 파일의 default.goals 속성에 내림차순으로 사전 설정됩니다.
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal
하나 이상의 기본 목표를 지정해야 합니다. 그렇지 않으면 Cruise Control이 충돌합니다.
기본 최적화 목표를 수정하려면 default.goals 속성의 목표 목록을 내림차순으로 지정합니다. 기본 목표는 기본 최적화 목표의 하위 집합이어야 합니다. 정규화된 도메인 이름을 사용합니다.
13.5.6. 사용자 제공 최적화 목표 링크 복사링크가 클립보드에 복사되었습니다!
사용자 제공 최적화 목표는 특정 최적화 제안에 대해 구성된 기본 목표를 좁힙니다. 필요에 따라 /rebalance 엔드포인트에 대한 HTTP 요청의 매개변수로 설정할 수 있습니다. 자세한 내용은 13.9절. “최적화 제안 생성”의 내용을 참조하십시오.
사용자 제공 최적화 목표는 다양한 시나리오에 대한 최적화 제안을 생성할 수 있습니다. 예를 들어 디스크 용량 또는 디스크 사용률을 고려하지 않고 Kafka 클러스터에서 리더 복제본 배포를 최적화할 수 있습니다. 따라서 리더 복제본 배포를 위한 단일 목표를 포함하는 /rebalance 엔드포인트에 요청을 보냅니다.
사용자 제공 최적화 목표는 다음과 같아야 합니다.
- 구성된 모든 하드 목표를 포함하거나 오류가 발생합니다.
- 주요 최적화 목표의하위 집합이 될 수 있습니다.
최적화 제안에서 구성된 하드 목표를 무시하려면 skip_hard_goals_check=true 매개변수를 요청에 추가합니다.
13.6. 최적화 제안 개요 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안은 브로커 간에 파티션 워크로드가 더 균등하게 분산되는 Kafka 클러스터를 생성하는 제안된 변경 사항에 대한 요약입니다.
각 최적화 제안은 브로커 리소스에 대해 구성된 용량 제한에 따라 이를 생성하는 데 사용된 최적화 목표 세트를 기반으로 합니다.
모든 최적화 제안은 제안된 리밸런스의 영향에 대한 추정치 입니다. 제안을 승인하거나 거부할 수 있습니다. 최적화 제안을 먼저 생성하지 않고 클러스터 재조정을 승인할 수 없습니다.
다음 끝점 중 하나를 사용하여 최적화 제안을 실행할 수 있습니다.
-
/rebalance -
/add_broker -
/remove_broker
13.6.1. 끝점 재조정 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안을 생성하기 위해 POST 요청을 보낼 때 끝점 재조정을 지정합니다.
/rebalance-
/rebalance엔드포인트는 클러스터의 모든 브로커에서 복제본을 이동하여 전체 재조정을 실행합니다. /add_broker-
add_broker엔드포인트는 하나 이상의 브로커를 추가하여 Kafka 클러스터를 확장한 후 사용됩니다. 일반적으로 Kafka 클러스터를 확장한 후 새 브로커는 새로 생성된 주제의 파티션만 호스팅하는 데 사용됩니다. 새 항목이 생성되지 않으면 새로 추가된 브로커가 사용되지 않고 기존 브로커가 동일한 부하에 남아 있습니다. 클러스터에 브로커를 추가한 직후add_broker끝점을 사용하면 재조정 작업이 기존 브로커에서 새로 추가된 브로커로 복제본이 이동합니다. POST 요청에서 새 브로커를brokerid목록으로 지정합니다. /remove_broker-
/remove_broker끝점은 하나 이상의 브로커를 제거하여 Kafka 클러스터를 축소하기 전에 사용됩니다. Kafka 클러스터를 축소하는 경우 복제본을 호스팅하는 경우에도 브로커가 종료됩니다. 이로 인해 복제되지 않은 파티션이 발생할 수 있으며 일부 파티션이 최소 ISR(동기화형 복제본)에 있을 수 있습니다. 이러한 잠재적인 문제를 방지하기 위해/remove_broker엔드포인트는 제거할 브로커에서 복제본을 이동합니다. 이러한 브로커가 더 이상 복제본을 호스팅하지 않으면 축소 작업을 안전하게 실행할 수 있습니다. 제거 중인 브로커를 POST 요청에서brokerid목록으로 지정합니다.
일반적으로 /rebalance 엔드포인트를 사용하여 브로커 간에 부하를 분산하여 Kafka 클러스터를 재조정합니다. 클러스터를 확장하거나 축소하고 그에 따라 복제본을 재조정하려는 경우에만 /add-broker 끝점 및 /remove_broker 끝점을 사용합니다.
리밸런스를 실행하는 절차는 세 개의 다른 엔드포인트에서 실제로 동일합니다. 유일한 차이점은 목록 브로커가 요청에 추가되거나 제거되는 것입니다.
13.6.2. 최적화 제안 승인 또는 거부 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안 요약은 제안된 변경 범위를 보여줍니다. 요약은 Cruise Control API를 통해 HTTP 요청에 대한 응답으로 반환됩니다.
/rebalance 엔드포인트에 POST 요청을 수행하면 최적화 제안 요약이 응답에 반환됩니다.
최적화 제안 요약 반환
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
요약을 사용하여 최적화 제안을 승인하거나 거부할지 여부를 결정합니다.
- 최적화 제안 승인
-
/rebalance엔드포인트에 POST 요청을 작성하고dryrun매개변수를false(기본값true)로 설정하여 최적화 제안을 승인합니다. 크루즈 컨트롤은 이 제안을 Kafka 클러스터에 적용하고 클러스터 재조정 작업을 시작합니다. - 최적화 제안 거부
-
최적화 제안을 승인하지 않도록 선택하는 경우 최적화 목표를 변경하거나 성능 튜닝 옵션을 재조정 한 다음 다른 제안을 생성할 수 있습니다.
시험 실행매개변수 없이 요청을 다시 보내 새로운 최적화 제안을 생성할 수 있습니다.
최적화 제안을 사용하여 재조정에 필요한 결과를 평가하십시오. 예를 들어 요약은broker 및 intra-broker 이동을 설명합니다. 브랜드 간 리밸런스(broker)는 별도의 브로커 간에 데이터를 리밸런싱합니다. Intra-broker 재조정은 JBOD 스토리지 구성을 사용할 때 동일한 브로커의 디스크 간에 데이터를 이동합니다. 이러한 정보는 귀하가 진행하지 않고 제안을 승인하더라도 유용할 수 있습니다.
재조정할 때 Kafka 클러스터에서 추가 로드로 인해 최적화 제안을 거부하거나 승인을 지연할 수 있습니다.
다음 예에서 제안서는 별도의 브로커 간 데이터 재조정을 제안합니다. 리밸런스에는 브로커 간에 총 12MB의 데이터가 있는 55 파티션 복제본의 이동이 포함됩니다. 파티션 복제본 간 이동은 성능에 큰 영향을 미치지만 총 데이터 양이 크지 않습니다. 총 데이터가 훨씬 큰 경우 제안서를 거부하거나 Kafka 클러스터 성능에 미치는 영향을 제한하기 위해 리밸런스를 승인하는 시간을 거부할 수 있습니다.
성능 튜닝 옵션을 재조정하면 데이터 이동의 영향을 줄이는 데 도움이 될 수 있습니다. 리밸런스 기간을 연장할 수 있는 경우 리밸런스를 작은 일괄 처리로 나눌 수 있습니다. 한 번에 데이터 이동이 줄어들어 클러스터의 부하를 줄일 수 있습니다.
최적화 제안 요약 예
이 제안은 또한 24 개의 파티션 리더를 다른 브로커로 이동하여 성능에 낮은 영향을 미칩니다.
균형 조정 점수는 최적화 제안이 승인되기 전후에 Kafka 클러스터의 전체 균형을 측정합니다. 균형 잡힌 점수는 최적화 목표를 기반으로합니다. 모든 목표를 충족하면 점수는 100입니다. 달성되지 않는 각 목표의 점수가 줄어듭니다. 균형 잡힌 점수를 비교하여 Kafka 클러스터가 리밸런스를 팔로우할 수 있는 것보다 더 적은지 확인합니다.
프로비저닝 상태는 현재 클러스터 구성이 최적화 목표를 지원하는지 여부를 나타냅니다. 프로비저닝 상태를 확인하여 브로커를 추가하거나 제거해야 하는지 확인합니다.
| 상태 | 설명 |
|---|---|
| RIGHT_SIZED | 클러스터에는 최적화 목표를 충족하기 위해 적절한 브로커 수가 있습니다. |
| UNDER_PROVISIONED | 클러스터는 프로비저닝되지 않으며 최적화 목표를 충족하기 위해 더 많은 브로커가 필요합니다. |
| OVER_PROVISIONED | 클러스터는 과도하게 프로비저닝되며 최적화 목표를 충족하기 위해 더 적은 수의 브로커가 필요합니다. |
| 미정 | 상태는 관련이 없거나 아직 결정되지 않았습니다. |
13.6.3. 최적화 제안 요약 속성 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에서는 최적화 제안에 포함된 속성에 대해 설명합니다.
| 속성 | 설명 |
|---|---|
|
|
N : 별도의 브로커 간에 이동할 파티션 복제본의 수입니다. 리밸런스 작업 중 성능에 미치는 영향: Relatively high.
Y 리밸런스 작업 중 성능에 미치는 영향: 변수. MB 수가 클수록 클러스터가 리밸런스를 완료하는 데 시간이 오래 걸립니다. |
|
|
N : 클러스터 브로커의 디스크 간에 전송되는 총 파티션 복제본 수입니다.
리밸런스 작업 중 성능에 미치는 영향: 기준으로 높지만 리브
Y
리밸런스 작업 중 성능에 미치는 영향: 변수. 숫자가 클수록 클러스터 리밸런스를 완료하는 데 시간이 오래 걸립니다. 동일한 브로커의 디스크 간에 대량의 데이터를 이동하는 것은 별도의 브로커 간에 영향을 덜 받습니다(브루버 |
|
| 최적화 제안에서 파티션 복제본/리더 이동 계산에서 제외된 주제의 수입니다. 다음 방법 중 하나로 주제를 제외할 수 있습니다.
정규식과 일치하는 주제는 응답에 나열되며 클러스터 리밸런스에서 제외됩니다. |
|
|
N : 리더가 다른 복제본으로 전환될 파티션의 수입니다. 리밸런스 작업 중 성능에 미치는 영향: Relatively low. |
|
|
N : 최적화 제안서를 기반으로 하는 메트릭 창 수입니다. |
|
|
N |
|
| Kafka 클러스터의 전체 균형 측정.
크루즈 컨트롤은 우선 순위(
|
13.6.4. 캐시된 최적화 제안 링크 복사링크가 클립보드에 복사되었습니다!
cruise Control은 구성된 기본 최적화 목표에 따라 캐시된 최적화 제안을 유지합니다. 워크로드 모델에서 생성된 캐시된 최적화 제안은 Kafka 클러스터의 현재 상태를 반영하도록 15분마다 업데이트됩니다.
가장 최근 캐시된 최적화 제안은 다음과 같은 목표 구성이 사용될 때 반환됩니다.
- 기본 최적화 목표
- 현재 캐시된 제안에 의해 충족될 수 있는 사용자 제공 최적화 목표
캐시된 최적화 제안 새로 고침 간격을 변경하려면 cruisecontrol.properties 파일에서 proposal.expiration.ms 설정을 편집합니다. Cruise Control 서버의 로드가 증가하지만 빠르게 변화하는 클러스터의 더 짧은 간격을 고려하십시오.
13.7. 성능 튜닝 개요 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 재조정을 위해 여러 성능 튜닝 옵션을 조정할 수 있습니다. 이러한 옵션은 리밸런스에서의 파티션 복제본 및 리더십 이동 방식 및 리밸런스 작업에 할당된 대역폭을 제어합니다.
파티션 재할당 명령
최적화 제안은 별도의 파티션 재할당 명령으로 구성됩니다. 제안을 시작하면 Cruise Control 서버에서 이러한 명령을 Kafka 클러스터에 적용합니다.
파티션 재할당 명령은 다음 작업 유형 중 하나로 구성됩니다.
파티션 이동: 파티션 복제본과 해당 데이터를 새 위치로 전송합니다. 파티션 모음은 다음 두 가지 형식 중 하나를 수행할 수 있습니다.
- 브랜드 간 이동: 파티션 복제본이 다른 브로커의 로그 디렉터리로 이동됩니다.
- Intra-broker 이동: 파티션 복제본은 동일한 브로커의 다른 로그 디렉터리로 이동합니다.
- 리더십 이동: 파티션 복제본의 리더를 전환시킵니다.
cruise Control은 배치의 Kafka 클러스터에 파티션 재할당 명령을 발행합니다. 리밸런스 중 클러스터 성능은 각 배치에 포함된 각 이동 유형의 영향을 받습니다.
파티션 재할당 명령을 구성하려면 조정 옵션 재조정 을 참조하십시오.
복제본 이동 전략
클러스터 리밸런스 성능은 파티션 재할당 명령의 배치에 적용되는 복제본 이동 전략 의 영향을 받습니다. 기본적으로 Cruise Control은 BaseReplica CryostatmentStrategy 를 사용하여 생성된 순서대로 명령을 적용합니다. 그러나 제안 초기에 매우 큰 파티션 재할당이 있는 경우 이 전략은 다른 재할당의 적용 속도가 느려질 수 있습니다.
cruise Control은 최적화 제안에 적용할 수 있는 세 가지 대체 복제본 이동 전략을 제공합니다.
-
PrioritizeSmallReplica CryostatmentStrategy: 오름차순 크기의 재할당을 주문합니다. -
PrioritizeLargeReplica CryostatmentStrategy: 내림차순 크기의 재할당을 주문합니다. -
PostponeUrpReplica>-<mentStrategy: 동기화되지 않은 복제본이 없는 파티션 복제본의 재할당을 우선순위화합니다.
이러한 전략은 시퀀스로 구성할 수 있습니다. 첫 번째 전략은 내부 논리를 사용하여 두 파티션 재할당을 비교하려고 합니다. 재할당이 동일한 경우 순서에서 다음 전략으로 전달하여 순서를 결정하는 등의 작업을 수행합니다.
복제본 이동 전략을 구성하려면 조정 옵션 재조정 을 참조하십시오.
조정 옵션 재조정
cruise Control은 리밸런스 매개변수 튜닝을 위한 몇 가지 구성 옵션을 제공합니다. 이러한 옵션은 다음과 같은 방법으로 설정됩니다.
-
속성으로, 기본 Cruise Control 구성에서
cruisecontrol.properties파일의 -
/rebalance엔드포인트에 대한 POST 요청의 매개변수로
두 방법에 대한 관련 구성은 다음 표에 요약되어 있습니다.
| 크루즈 컨트롤 속성 | KafkaRebalance 매개변수 | 기본 | 설명 |
|---|---|---|---|
|
|
| 5 | 각 파티션 재할당 배치의 최대 구성 요소 수 |
|
|
| 2 | 각 파티션 재할당 배치에서 인트라브러 파티션의 최대 수 |
|
|
| 1000 | 각 파티션 재할당 배치의 최대 파티션 리더십 변경 수 |
|
|
| null (제한 없음) | 파티션 재할당에 할당할 대역폭(초당 바이트 단위) |
|
|
|
|
생성된 제안서에 대해 파티션 재할당 명령이 실행되는 순서를 결정하는 데 사용되는 전략 목록(우선순)입니다. |
기본 설정을 변경하면 리밸런스가 완료하는 데 걸리는 시간과 재조정 중 Kafka 클러스터에 배치된 로드에 영향을 미칩니다. 더 낮은 값을 사용하면 로드가 줄어들지만 사용된 시간이 증가하고 그 반대의 경우도 마찬가지입니다.
13.8. 크루즈 제어 구성 링크 복사링크가 클립보드에 복사되었습니다!
config/cruisecontrol.properties 파일에는 Cruise Control에 대한 구성이 포함되어 있습니다. 파일은 다음 유형 중 하나에 있는 속성으로 구성됩니다.
- 문자열
- 숫자
- 부울
Cruise Control Wiki의 Configurations 섹션에 나열된 모든 속성을 지정하고 구성할 수 있습니다.
용량 구성
크루즈 컨트롤에서는 용량 제한을 사용하여 특정 리소스 기반 최적화 목표를 손상했는지 확인합니다. 이러한 리소스 기반 목표 중 하나 이상이 하드 목표로 설정된 경우 시도된 최적화가 실패합니다. 이로 인해 최적화 제안을 생성하는 데 최적화가 사용되지 않습니다.
cruise-control/config 의 다음 세 .json 파일 중 하나에서 Kafka 브로커 리소스에 대한 용량 제한을 지정합니다.
-
capacityJBOD.json: JBOD Kafka 배포에서 사용되는 경우(기본 파일). -
capacity.json: 각 브로커가 동일한 수의 CPU 코어가 있는JBOD Kafka 배포에서 사용하는 경우입니다. -
capacityCores.json: 각 브로커마다 다양한 CPU 코어 수가 있는JBOD Kafka 배포 이외의 용도로 사용됩니다.
cruisecontrol.properties 의 capacity.config.file 속성에 파일을 설정합니다. 선택한 파일은 브로커 용량 확인에 사용됩니다. 예를 들면 다음과 같습니다.
capacity.config.file=config/capacityJBOD.json
capacity.config.file=config/capacityJBOD.json
용량 제한은 설명된 단위로 다음 브로커 리소스에 대해 설정할 수 있습니다.
-
DISK: MB의 디스크 스토리지 -
CPU: CPU 사용률 (0-100) 또는 여러 코어 -
NW_IN: 초당 KB의 인바운드 네트워크 처리량 -
NW_OUT: 초당 KB의 아웃 바운드 네트워크 처리량
Cruise Control에서 모니터링하는 모든 브로커에 동일한 용량 제한을 적용하려면 브로커 ID -1 에 대한 용량 제한을 설정합니다. 개별 브로커에 대해 다른 용량 제한을 설정하려면 각 브로커 ID 및 용량 구성을 지정합니다.
용량 제한 구성의 예
자세한 내용은 Cruise Control Wiki 에서 용량 구성 파일 채우기 를 참조하십시오.
Cruise Control Metrics 항목에 대한 로그 정리 정책
자동 생성 __CruiseControlMetrics 주제( 자동 생성 주제참조)에 COMPACT 가 아닌 DELETE 의 로그 정리 정책이 있어야 합니다. 그렇지 않으면 Cruise Control에 필요한 레코드가 제거될 수 있습니다.
13.3절. “Cruise Control Metrics Reporter 배포” 에 설명된 대로 Kafka 구성 파일에서 다음 옵션을 설정하면 COMPACT 로그 정리 정책이 올바르게 설정되어 있습니다.
-
cruise.control.metrics.topic.auto.create=true -
cruise.control.metrics.topic.num.partitions=1 -
cruise.control.metrics.topic.replication.factor=1
Cruise Control Metrics Reporter(cruise.control.metrics.topic.auto.create=false)에서 주제 자동 생성이 비활성화되어 있지만 Kafka 클러스터에서 활성화되어 있는 경우 __CruiseControlMetrics 주제는 브로커에 의해 자동으로 생성됩니다. 이 경우 __CruiseControlMetrics 항목의 로그 정리 정책을 kafka-configs.sh 도구를 사용하여 DELETE 로 변경해야 합니다.
__CruiseControlMetrics주제의 현재 구성을 가져옵니다.opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name __CruiseControlMetrics --describe
opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name __CruiseControlMetrics --describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 주제 구성에서 로그 정리 정책을 변경합니다.
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name __CruiseControlMetrics --alter --add-config cleanup.policy=delete
/opt/kafka/bin/kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name __CruiseControlMetrics --alter --add-config cleanup.policy=deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Cruise Control Metrics Reporter 및 Kafka 클러스터에서 주제 자동 생성이 비활성화되어 있는 경우 __CruiseControlMetrics 주제를 수동으로 생성한 다음 kafka-configs.sh 도구를 사용하여 DELETE 로그 정리 정책을 사용하도록 구성해야 합니다.
자세한 내용은 7.9절. “주제 구성 수정”의 내용을 참조하십시오.
로깅 구성
cruise Control은 모든 서버 로깅에 log4j1 을 사용합니다. 기본 구성을 변경하려면 /opt/cruise-control/config/ 에서 log4j.properties 파일을 편집합니다.
log4j.properties
변경 사항을 적용하려면 Cruise Control 서버를 다시 시작해야 합니다.
13.9. 최적화 제안 생성 링크 복사링크가 클립보드에 복사되었습니다!
/rebalance 엔드포인트에 대한 POST 요청을 수행할 때 Cruise Control은 제공된 최적화 목표에 따라 Kafka 클러스터를 재조정하기 위한 최적화 제안을 생성합니다. 최적화 제안의 결과를 사용하여 Kafka 클러스터를 재조정할 수 있습니다.
다음 끝점 중 하나를 사용하여 최적화 제안을 실행할 수 있습니다.
-
/rebalance -
/add_broker -
/remove_broker
사용하는 끝점은 Kafka 클러스터에서 이미 실행 중인 모든 브로커 간에 재조정하는지 아니면 Kafka 클러스터를 확장한 후 또는 Kafka 클러스터를 축소하기 전에 재조정해야 하는지에 따라 다릅니다. 자세한 내용은 브로커 스케일링을 사용하여 끝점 재조정 을 참조하십시오.
최적화 제안은 시험 실행 매개 변수를 제공하고 false 로 설정하지 않는 한 시험 실행으로 생성됩니다. "시험 실행 모드"에서 Cruise Control은 최적화 제안과 예상 결과를 생성하지만 클러스터를 재조정하여 제안을 시작하지는 않습니다.
최적화 제안에서 반환된 정보를 분석하고 승인 여부를 결정할 수 있습니다.
다음 매개변수를 사용하여 끝점에 요청합니다.
dryrun
유형: boolean, default: true
Cruise Control에 최적화 제안만 생성하거나 최적화 제안을 생성하고 클러스터 재조정(false)을 수행할지 여부를 제어합니다.
dryrun=true (기본값)인 경우 verbose 매개변수를 전달하여 Kafka 클러스터 상태에 대한 자세한 정보를 반환할 수 있습니다. 여기에는 최적화 제안 전후에 각 Kafka 브로커의 로드 메트릭과 이전 및 이후 값의 차이가 포함됩니다.
excluded_topics
유형: regex
최적화 제안 계산에서 제외할 주제와 일치하는 정규식입니다.
목표
type: 문자열 목록, default: 구성된 default.goals 목록
최적화 제안을 준비하는 데 사용할 사용자 제공 최적화 목표 목록입니다. 목표를 지정하지 않으면 cruisecontrol.properties 파일에 구성된 default.goals 목록이 사용됩니다.
skip_hard_goals_check
유형: boolean, default: false
기본적으로 Cruise Control은 사용자가 제공한 최적화 목표( goals 매개변수에서)에 구성된 모든 하드 목표( hard.goals)가 포함되어 있는지 확인합니다. 구성된 hard.goals 의 서브 세트가 아닌 목표를 제공하면 요청이 실패합니다.
구성된 hard.goals 를 모두 포함하지 않는 사용자 제공 최적화 목표를 사용하여 최적화 제안을 생성하려면 skip_hard_goals_check 를 true 로 설정합니다.
json
유형: boolean, default: false
Cruise Control 서버에서 반환하는 응답 유형을 제어합니다. 제공되지 않거나 false 로 설정하면 Cruise Control은 명령줄에서 표시되도록 포맷된 텍스트를 반환합니다. 반환된 정보의 요소를 프로그래밍 방식으로 추출하려면 json=true 를 설정합니다. 이렇게 하면 jq 와 같은 툴로 파이프하거나 스크립트 및 프로그램에서 구문 분석할 수 있는 JSON 형식의 텍스트가 반환됩니다.
상세 정보
유형: boolean, default: false
Cruise Control 서버에서 반환하는 응답의 세부 수준을 제어합니다. dryrun=true 와 함께 사용할 수 있습니다.
기타 매개 변수를 사용할 수 있습니다. 자세한 내용은 Cruise Control Wiki 의 REST API 를 참조하십시오.
사전 요구 사항
- Kafka가 실행 중입니다.
- Cruise Control을 구성했습니다.
- (확장의 선택 사항) 리밸런스 에 포함할 호스트에 새 브로커를 설치했습니다.
프로세스
/rebalance,/add_broker또는/remove_broker엔드포인트에 대한 POST 요청을 사용하여 최적화 제안을 생성합니다.기본 목표를 사용하여
/rebalance에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 캐시된 최적화 제안은 즉시 반환됩니다.
참고NotEnoughValidWindows가 반환되면 Cruise Control은 최적화 제안을 생성하기 위해 충분한 메트릭 데이터를 기록하지 않았습니다. 몇 분 정도 기다린 후 요청을 다시 보냅니다.지정된 목표를 사용하여
/rebalance에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 요청이 제공된 목표를 충족하면 캐시된 최적화 제안이 즉시 반환됩니다. 그렇지 않으면 제공된 목표를 사용하여 새로운 최적화 제안이 생성됩니다. 이를 계산하는 데 시간이 오래 걸립니다.
ignore_proposal_cache=true매개변수를 요청에 추가하여 이 동작을 적용할 수 있습니다.하드 목표 없이 지정된 목표를 사용하여
/rebalance에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지정된 브로커를 포함하는
/add_broker에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 요청에는 새 브로커의 ID만 포함됩니다. 예를 들어 이 요청은 ID
3및4가 있는 브로커를 추가합니다. 복제본은 재조정 시 기존 브로커에서 새 브로커로 이동합니다.지정된 브로커를 제외하는
/remove_broker에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 요청에는 제외되는 브로커의 ID가 포함됩니다. 예를 들어 이 요청은 ID
3및4가 있는 브로커를 제외합니다. 복제본은 재조정 시 제거되는 브로커에서 다른 기존 브로커로 이동합니다.참고제거 중인 브로커가 제외된 경우 복제본은 계속 이동합니다.
응답에 포함된 최적화 제안을 검토하십시오. 속성은 보류 중인 클러스터 리밸런스 작업을 설명합니다.
이 제안에는 제안된 최적화에 대한 높은 수준의 요약과 각 기본 최적화 목표에 대한 요약과 제안서가 실행된 후 예상되는 클러스터 상태가 포함됩니다.
특히 다음 정보에 유의하십시오.
-
요약
후 클러스터 로드. 요구 사항을 충족하는 경우 높은 수준의 요약을 사용하여 제안된 변경 사항의 영향을 평가해야 합니다. -
N
inter-broker 복제본 (yMB) 이동은 브로커 간에 네트워크를 통해 이동할 데이터의 양을 나타냅니다. 값이 클수록 리밸런스 중 Kafka 클러스터에 대한 잠재적인 성능 영향이 커집니다. -
N
intra-broker 복제본(yMB)은 브로커 자체 내에서 이동할 데이터의 양을 나타냅니다(디스크 간). 값이 클수록 개별 브로커에 대한 잠재적인 성능 영향이 커집니다(n inter-broker 복제본(yMB)보다 적음). - 리더십 이동 횟수입니다. 이는 리밸런스 중 클러스터 성능에 부정적인 영향을 미칩니다.
-
요약
비동기 응답
Cruise Control REST API 엔드포인트는 기본적으로 10초 후에 시간 초과되지만 제안 생성은 서버에서 계속됩니다. 최근 캐시된 최적화 제안이 준비되지 않았거나 ignore_proposal_cache=true 로 사용자 제공 최적화 목표를 지정한 경우 시간 초과가 발생할 수 있습니다.
나중에 최적화 제안을 검색할 수 있도록 하려면 /rebalance 끝점의 응답 헤더에 제공되는 요청의 고유 식별자를 기록해 두십시오.
curl 을 사용하여 응답을 얻으려면 상세 정보 표시(-v) 옵션을 지정합니다.
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
다음은 예제 헤더입니다.
시간 초과 내에 최적화 제안이 준비되지 않은 경우 POST 요청을 다시 제출할 수 있습니다. 이번에는 헤더에 원래 요청의 User-Task-ID 를 포함합니다.
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
다음에 수행할 작업
13.10. 최적화 제안 승인 링크 복사링크가 클립보드에 복사되었습니다!
최근 생성된 최적화 제안에 만족하는 경우 Cruise Control에 클러스터 재조정을 시작하고 파티션 재할당을 시작하도록 지시할 수 있습니다.
최적화 제안을 생성하고 클러스터 리밸런스 시작 사이에 가능한 한 적은 시간을 남겨 두십시오. 원래 최적화 제안을 생성한 후 잠시 경과한 경우 클러스터 상태가 변경될 수 있습니다. 따라서 시작된 클러스터 리밸런스가 검토한 것과 다를 수 있습니다. 의심의 여지가있는 경우 먼저 새로운 최적화 제안을 생성합니다.
상태가 "Active"인 하나의 클러스터 리밸런스만 한 번에 진행 중일 수 있습니다.
사전 요구 사항
- Cruise Control에서 최적화 제안을 생성 했습니다.
프로세스
dryrun=false매개변수를 사용하여/rebalance,/add_broker또는/remove_broker엔드포인트에 POST 요청을 보냅니다./add_broker또는/remove_broker엔드포인트를 사용하여 브로커를 포함하거나 제외한 제안을 생성한 경우 동일한 엔드포인트를 사용하여 지정된 브로커와 또는 없이 재조정을 수행합니다./rebalance에 대한 요청 예curl -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?dryrun=false'
curl -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?dryrun=false'Copy to Clipboard Copied! Toggle word wrap Toggle overflow /add_broker에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?dryrun=false&brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?dryrun=false&brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow /remove_broker에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?dryrun=false&brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?dryrun=false&brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 크루즈 컨트롤은 클러스터 재조정을 시작하고 최적화 제안을 반환합니다.
- 최적화 제안에 요약된 변경 사항을 확인하십시오. 변경 사항이 예상되지 않은 경우 재조정을 중지 할 수 있습니다.
/user_tasks엔드포인트를 사용하여 클러스터 리밸런스의 진행 상황을 확인합니다. 클러스터 리밸런스 진행 중 상태가 "Active"입니다.Cruise Control 서버에서 실행되는 모든 클러스터 재조정 작업을 보려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 클러스터 리밸런스 작업의 상태를 보려면
user-task-ids매개변수와 작업 ID를 제공합니다.curl 'cruise-control-server:9090/kafkacruisecontrol/user_tasks?user_task_ids=c459316f-9eb5-482f-9d2d-97b5a4cd294d'
curl 'cruise-control-server:9090/kafkacruisecontrol/user_tasks?user_task_ids=c459316f-9eb5-482f-9d2d-97b5a4cd294d'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
(선택 사항) 축소할 때 브로커 제거
재조정이 완료되면 Kafka 클러스터를 축소하기 위해 제외된 브로커를 중지할 수 있습니다.
제거 중인 각 브로커에 해당 로그에 라이브 파티션이 없는지 확인합니다(
log.dirs).ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'
ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로그 디렉터리가 정규식과 일치하지 않는 경우
\.[a-z0-9]-delete$, 활성 파티션이 여전히 존재합니다. 활성 파티션이 있는 경우 리밸런스가 완료되었거나 최적화 제안을 위한 구성을 확인합니다. 제안을 다시 실행할 수 있습니다. 다음 단계로 이동하기 전에 활성 파티션이 없는지 확인합니다.브로커를 중지합니다.
su - kafka /opt/kafka/bin/kafka-server-stop.sh
su - kafka /opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 브로커가 중지되었는지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.11. 활성 클러스터 리밸런스 중지 링크 복사링크가 클립보드에 복사되었습니다!
현재 진행 중인 클러스터 재조정을 중지할 수 있습니다.
이는 Cruise Control에 현재 파티션 재할당을 완료한 다음 재조정을 중지하도록 지시합니다. 리밸런스가 중지되면 완료된 파티션 재할당이 이미 적용되어 있으므로 리밸런스 작업을 시작하기 전과 비교할 때 Kafka 클러스터의 상태가 다릅니다. 추가 재조정이 필요한 경우 새로운 최적화 제안을 생성해야 합니다.
중간(중지됨) 상태의 Kafka 클러스터의 성능은 초기 상태보다 더 나을 수 있습니다.
사전 요구 사항
- 클러스터 리밸런스(클러스터 리밸런스)는 "Active" 상태로 표시됩니다.
프로세스
POST 요청을
/stop_proposal_execution엔드포인트에 보냅니다.curl -X POST 'cruise-control-server:9090/kafkacruisecontrol/stop_proposal_execution'
curl -X POST 'cruise-control-server:9090/kafkacruisecontrol/stop_proposal_execution'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14장. Cruise Control을 사용하여 주제 복제 요소 수정 링크 복사링크가 클립보드에 복사되었습니다!
복제 요소를 포함하여 주제 구성을 수정하기 위해 Cruise Control REST API의 /topic_configuration 엔드포인트에 요청합니다.
사전 요구 사항
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다. - Cruise Control을 구성했습니다.
- Cruise Control Metrics Reporter를 배포 했습니다.
프로세스
Cruise Control Server를 시작합니다. 서버는 기본적으로 포트 9092에서 시작합니다. 선택적으로 다른 포트를 지정합니다.
cd /opt/cruise-control/ ./kafka-cruise-control-start.sh config/cruisecontrol.properties <port_number>
cd /opt/cruise-control/ ./kafka-cruise-control-start.sh config/cruisecontrol.properties <port_number>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cruise Control이 실행 중인지 확인하려면 Cruise Control 서버의
/state엔드포인트에 GET 요청을 보냅니다.curl -X GET 'http://<cc_host>:<cc_port>/kafkacruisecontrol/state'
curl -X GET 'http://<cc_host>:<cc_port>/kafkacruisecontrol/state'Copy to Clipboard Copied! Toggle word wrap Toggle overflow bin/kafka-topics.sh명령을--describe옵션으로 실행하고 대상 항목의 현재 복제 요소를 확인합니다./opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --topic <topic_name> \ --describe
/opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --topic <topic_name> \ --describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 항목의 복제 요소를 업데이트합니다.
curl -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/topic_configuration?topic=<topic_name>&replication_factor=<new_replication_factor>&dryrun=false'
curl -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/topic_configuration?topic=<topic_name>&replication_factor=<new_replication_factor>&dryrun=false'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
curl -X POST 'localhost:90/kafkacruisecontrol/topic_configuration?topic=topic1&replication_factor=3&dryrun=false'.-
이전과 같이
--describe옵션을 사용하여bin/kafka-topics.sh명령을 실행하여 주제 변경 결과를 확인합니다.
15장. 파티션 재할당 도구 사용 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터를 스케일링하는 경우 브로커를 추가하거나 제거하고 파티션 배포 또는 주제의 복제 요소를 업데이트해야 할 수 있습니다. 파티션 및 주제를 업데이트하려면 kafka-reassign-partitions.sh 툴을 사용할 수 있습니다.
도구를 사용하여 파티션을 다시 할당하고 브로커 간에 파티션의 분산을 조정하여 성능을 향상시킬 수 있습니다. 주제의 복제 요소를 변경할 수도 있습니다. 그러나 자동화된 파티션 재할당 및 클러스터 재조정 및 주제 복제 요인 변경에 Cruise Control을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.
15.1. 파티션 재할당 도구 개요 링크 복사링크가 클립보드에 복사되었습니다!
파티션 재할당 툴에서는 Kafka 파티션 및 브로커를 관리하기 위한 다음과 같은 기능을 제공합니다.
- 파티션 복제본 재배포
- 브로커를 추가하거나 제거하여 클러스터를 확장하고 많이 로드된 브로커에서 활용도가 낮은 브로커로 Kafka 파티션을 이동합니다. 이렇게 하려면 이동할 주제와 파티션과 이동할 위치를 식별하는 파티션 재할당 계획을 만들어야 합니다. cruise Control은 클러스터 재조정 프로세스를 자동화 하므로 이 유형의 작업에 권장됩니다.
- 주제 복제 요인 확장 및 축소
- Kafka 주제의 복제 요소를 늘리거나 줄입니다. 이렇게 하려면 파티션 간에 기존 복제 할당을 식별하고 복제 요소가 변경되면 업데이트된 할당을 생성하는 파티션 재할당 계획을 만들어야 합니다.
- 선호하는 리더 변경
- Kafka 파티션의 기본 리더를 변경합니다. 현재 선호하는 리더를 사용할 수 없거나 클러스터의 브로커 간에 부하를 재배포하려는 경우 유용할 수 있습니다. 이렇게 하려면 복제본 순서를 변경하여 각 파티션의 새로운 기본 리더를 지정하는 파티션 재할당 계획을 만들어야 합니다.
- 특정 JBOD 볼륨을 사용하도록 로그 디렉터리 변경
- 특정 JBOD 볼륨을 사용하도록 Kafka 브로커의 로그 디렉터리를 변경합니다. 이 기능은 Kafka 데이터를 다른 디스크 또는 스토리지 장치로 이동하려는 경우 유용할 수 있습니다. 이렇게 하려면 각 주제의 새 로그 디렉터리를 지정하는 파티션 재할당 계획을 만들어야 합니다.
15.1.1. 파티션 재할당 계획 생성 링크 복사링크가 클립보드에 복사되었습니다!
파티션 재할당 도구(kafka-reassign-partitions.sh)는 현재 브로커에서 새 브로커로 이동해야 하는 파티션을 지정하는 파티션 할당 계획을 생성하여 작동합니다.
계획에 만족하는 경우 실행할 수 있습니다. 이 툴은 다음을 수행합니다.
- 파티션 데이터를 새 브로커로 마이그레이션
- 새 파티션 할당을 반영하도록 Kafka 브로커의 메타데이터 업데이트
- Kafka 브로커의 롤링 재시작을 트리거하여 새 할당이 적용되도록 합니다.
파티션 재할당 툴에는 세 가지 모드가 있습니다.
--generate- 주제 및 브로커 세트를 가져와서 재할당 JSON 파일을 생성하여 해당 브로커에 해당 주제의 파티션이 할당됩니다. 이는 전체 항목에서 작동하기 때문에 일부 주제의 일부 파티션만 다시 할당하려는 경우 사용할 수 없습니다.
--execute- JSON 파일을 다시 할당 하여 클러스터의 파티션 및 브로커에 적용합니다. 결과적으로 파티션을 얻는 브로커는 파티션 리더의 팔로우가됩니다. 지정된 파티션의 경우 새 브로커가 ISR(동기화형 복제본)에 가입하고 ISR(동기화) 복제본에 가입하면 이전 브로커가 팔로워가 되는 것을 중지하고 해당 복제본을 삭제합니다.
--verify-
--execute단계와 동일한 재할당 JSON 파일을 사용하여--verify는 파일의 모든 파티션이 의도한 브로커로 이동되었는지 확인합니다. 재할당이 완료되면--verify는 적용되는 트래픽 제한(--throttle)도 제거합니다. 제거되지 않으면 제한은 재할당이 완료된 후에도 클러스터에 계속 영향을 미칩니다.
지정된 시간에 클러스터에서 하나의 재할당을 실행할 수 있으며 실행 중인 재할당을 취소할 수 없습니다. 재할당을 취소해야 하는 경우 재할당이 완료될 때까지 기다린 다음 다른 재할당을 수행하여 첫 번째 재할당의 효과를 되돌립니다. kafka-reassign-partitions.sh 는 이 재버전에 대한 재할당 JSON을 출력 출력의 일부로 출력합니다. 매우 큰 재할당은 진행 중인 재할당을 중지해야 하는 경우 다수의 작은 재할당으로 분류되어야 합니다.
15.1.2. 파티션 재할당 JSON 파일에 주제 지정 링크 복사링크가 클립보드에 복사되었습니다!
kafka-reassign-partitions.sh 툴은 다시 할당할 주제를 지정하는 재할당 JSON 파일을 사용합니다. 특정 파티션을 이동하려는 경우 JSON 파일을 다시 할당하거나 파일을 수동으로 생성할 수 있습니다.
기본 재할당 JSON 파일에는 다음 예제에 표시된 구조가 있으며, 이 구조는 두 Kafka 항목에 속하는 파티션 세 개를 설명합니다. 각 파티션은 브로커 ID로 식별되는 새 복제본 세트에 다시 할당됩니다. version,topic,partition, replicas 속성은 모두 필요합니다.
파티션 재할당 JSON 파일 구조의 예
JSON에 포함되지 않은 파티션은 변경되지 않습니다.
주제 배열을 사용하여 주제만 지정하는 경우 파티션 재할당 도구에서 지정된 항목에 속하는 모든 파티션을 다시 할당합니다.
주제의 모든 파티션을 다시 할당하는 JSON 파일 구조의 예
15.1.3. JBOD 볼륨 간에 파티션 재할당 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터에서 JBOD 스토리지를 사용하는 경우 특정 볼륨과 로그 디렉터리 간에 파티션을 다시 할당할 수 있습니다(각 볼륨에 단일 로그 디렉터리가 있음).
파티션을 특정 볼륨에 다시 할당하려면 재할당 JSON 파일의 각 파티션에 대한 log_dirs 값을 추가합니다. 각 log_dirs 배열에는 각 복제본을 특정 로그 디렉터리에 할당해야 하므로 replicas 배열과 동일한 수의 항목이 포함됩니다. log_dirs 배열에는 로그 디렉터리의 절대 경로 또는 특수 값이 포함되어 있습니다. any 값은 Kafka가 해당 복제본에 사용 가능한 로그 디렉토리를 선택할 수 있음을 나타냅니다. 이는 JBOD 볼륨 간에 파티션을 다시 할당할 때 유용할 수 있습니다.
로그 디렉터리가 있는 JSON 파일 구조 재할당의 예
15.1.4. 파티션 재할당 제한 링크 복사링크가 클립보드에 복사되었습니다!
브로커 간에 대량의 데이터를 전송해야 하므로 파티션 재할당은 느린 프로세스일 수 있습니다. 클라이언트에 부정적인 영향을 미치지 않도록 하려면 재할당 프로세스를 중단할 수 있습니다. kafka-reassign-partitions.sh 툴과 함께 --throttle 매개변수를 사용하여 재할당을 제한합니다. 브로커 간 파티션 이동에 대한 초당 최대 임계값(바이트)을 지정합니다. 예를 들어 --throttle 5000000 은 50MBps의 파티션 이동을 위한 최대 임계값을 설정합니다.
제한으로 인해 재할당이 완료되는 데 시간이 더 걸릴 수 있습니다.
- 스로틀이 너무 낮으면 새로 할당된 브로커는 게시되는 레코드를 유지할 수 없으며 재할당이 완료되지 않습니다.
- 스로틀이 너무 높으면 클라이언트에 영향을 미칩니다.
예를 들어 프로듀서의 경우 이는 승인을 기다리는 일반 대기 시간보다 높을 수 있습니다. 소비자의 경우 폴링 간에 대기 시간이 길기 때문에 처리량이 저하될 수 있습니다.
15.2. 브로커 추가 후 파티션 재할당 링크 복사링크가 클립보드에 복사되었습니다!
kafka-reassign-partitions.sh 툴에서 생성한 재할당 파일을 사용하여 Kafka 클러스터의 브로커 수를 늘린 후 파티션을 다시 할당합니다. 재할당 파일은 확대된 Kafka 클러스터의 브로커에 파티션을 다시 할당하는 방법을 설명해야 합니다. 파일에 지정된 재할당을 브로커에 적용한 다음 새 파티션 할당을 확인합니다.
이 절차에서는 TLS를 사용하는 보안 확장 프로세스를 설명합니다. TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터가 필요합니다.
kafka-reassign-partitions.sh 툴을 사용할 수 있지만 자동 파티션 재할당 및 클러스터 재조정에 Cruise Control을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
- 추가 AMQ 브로커가 설치된 새 머신입니다.
확장 가능한 클러스터의 브로커에 파티션을 다시 할당하는 방법을 지정하는 JSON 파일을 생성했습니다.
이 절차에서는
my-topic이라는 주제의 모든 파티션을 다시 할당하고 있습니다.topics.json이라는 JSON 파일은 주제를 지정하고reassignment.json파일을 생성하는 데 사용됩니다.
JSON 파일의 예는 my-topic을 지정합니다.
프로세스
-
클러스터의 다른 브로커와 동일한 설정을 사용하여 새 브로커에 대한 구성 파일을 생성합니다. 단,
broker.id는 다른 브로커에서 아직 사용하지 않는 숫자여야 합니다. 이전 단계에서 생성한 구성 파일을 인수로
kafka-server-start.sh스크립트에 전달하는 새 Kafka 브로커를 시작합니다.su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커가 실행 중인지 확인합니다.
jcmd | grep Kafka
jcmd | grep KafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 각 새 브로커에 대해 위의 단계를 반복합니다.
이 작업을 수행하지 않은 경우
kafka-reassign-partitions.sh도구를 사용하여reassignment.json이라는 재할당 JSON 파일을 생성합니다.JSON 파일을 다시 할당하는 명령의 예
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \ --broker-list 0,1,2,3,4 \ --generate
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \1 --broker-list 0,1,2,3,4 \2 --generateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 및 제안된 복제본 할당을 표시하는 재할당 JSON 파일의 예
Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.
--execute옵션을 사용하여 파티션 재할당을 실행합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 복제를 제한하려면 브로어링된 속도가 초당 바이트 단위로
--throttle옵션을 전달할 수도 있습니다. 예를 들면 다음과 같습니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verify옵션을 사용하여 재할당이 완료되었는지 확인합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verify명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막--verify는 또한 reassignment throttles를 제거하는 효과가 있습니다.
15.3. 브로커를 제거하기 전에 파티션 재할당 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터의 브로커 수를 줄이기 전에 kafka-reassign-partitions.sh 툴에서 생성한 재할당 파일을 사용하여 파티션을 다시 할당합니다. 재할당 파일은 Kafka 클러스터의 나머지 브로커에 파티션을 다시 할당하는 방법을 설명해야합니다. 파일에 지정된 재할당을 브로커에 적용한 다음 새 파티션 할당을 확인합니다. 가장 많은 Pod의 브로커가 먼저 제거됩니다.
이 절차에서는 TLS를 사용하는 보안 확장 프로세스를 설명합니다. TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터가 필요합니다.
kafka-reassign-partitions.sh 툴을 사용할 수 있지만 자동 파티션 재할당 및 클러스터 재조정에 Cruise Control을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
감소된 클러스터의 브로커에 파티션을 다시 할당하는 방법을 지정하는 JSON 파일을 생성했습니다.
이 절차에서는
my-topic이라는 주제의 모든 파티션을 다시 할당하고 있습니다.topics.json이라는 JSON 파일은 주제를 지정하고reassignment.json파일을 생성하는 데 사용됩니다.
JSON 파일의 예는 my-topic을 지정합니다.
프로세스
이 작업을 수행하지 않은 경우
kafka-reassign-partitions.sh도구를 사용하여reassignment.json이라는 재할당 JSON 파일을 생성합니다.JSON 파일을 다시 할당하는 명령의 예
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \ --broker-list 0,1,2,3 \ --generate
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \1 --broker-list 0,1,2,3 \2 --generateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 및 제안된 복제본 할당을 표시하는 재할당 JSON 파일의 예
Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.
--execute옵션을 사용하여 파티션 재할당을 실행합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 복제를 제한하려면 브로어링된 속도가 초당 바이트 단위로
--throttle옵션을 전달할 수도 있습니다. 예를 들면 다음과 같습니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verify옵션을 사용하여 재할당이 완료되었는지 확인합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verify명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막--verify는 또한 reassignment throttles를 제거하는 효과가 있습니다.제거 중인 각 브로커에 해당 로그에 라이브 파티션이 없는지 확인합니다(
log.dirs).ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'
ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로그 디렉터리가 정규식과 일치하지 않는 경우
\.[a-z0-9]-delete$, 활성 파티션이 여전히 존재합니다. 활성 파티션이 있는 경우 재할당이 완료되었는지 또는 재할당 JSON 파일의 구성을 확인합니다. 재할당을 다시 실행할 수 있습니다. 다음 단계로 이동하기 전에 활성 파티션이 없는지 확인합니다.브로커를 중지합니다.
su - kafka /opt/kafka/bin/kafka-server-stop.sh
su - kafka /opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커가 중지되었는지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4. 주제의 복제 요소 변경 링크 복사링크가 클립보드에 복사되었습니다!
kafka-reassign-partitions.sh 툴을 사용하여 Kafka 클러스터의 주제 복제 요소를 변경합니다. 이 작업은 재할당 파일을 사용하여 주제 복제본을 변경하는 방법을 설명합니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
작업에 포함할 주제를 지정하는 JSON 파일을 생성했습니다.
이 절차에서
my-topic이라는 주제에는 4개의 복제본이 있으며 이를 3으로 줄이고자 합니다.topics.json이라는 JSON 파일은 주제를 지정하고reassignment.json파일을 생성하는 데 사용됩니다.
JSON 파일의 예는 my-topic을 지정합니다.
프로세스
이 작업을 수행하지 않은 경우
kafka-reassign-partitions.sh도구를 사용하여reassignment.json이라는 재할당 JSON 파일을 생성합니다.JSON 파일을 다시 할당하는 명령의 예
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \ --broker-list 0,1,2,3,4 \ --generate
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \1 --broker-list 0,1,2,3,4 \2 --generateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 및 제안된 복제본 할당을 표시하는 재할당 JSON 파일의 예
Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.
reassignment.json을 편집하여 각 파티션에서 복제본을 제거합니다.예를 들어
jq를 사용하여 주제의 각 파티션에 대한 목록의 마지막 복제본을 제거합니다.각 파티션의 마지막 주제 복제본 제거
jq '.partitions[].replicas |= del(.[-1])' reassignment.json > reassignment.json
jq '.partitions[].replicas |= del(.[-1])' reassignment.json > reassignment.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 업데이트된 복제본을 표시하는 재할당 파일의 예
{"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any","any"]}]}{"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any","any"]}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow --execute옵션을 사용하여 topic replica를 변경합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고브로커에서 복제본을 제거해도 데이터 간 데이터 이동이 필요하지 않으므로 복제를 방해할 필요가 없습니다. 복제본을 추가하는 경우 throttle 속도를 변경해야 할 수 있습니다.
--verify옵션을 사용하여 topic replicas에 대한 변경 사항이 완료되었는지 확인합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verify명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막--verify는 또한 reassignment throttles를 제거하는 효과가 있습니다.bin/kafka-topics.sh명령을--describe옵션과 함께 실행하여 주제 변경 결과를 확인합니다./opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --describe
/opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --describeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 주제의 복제본 수를 줄이는 결과
my-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 my-topic Partition: 1 Leader: 2 Replicas: 1,2,3 Isr: 1,2,3 my-topic Partition: 2 Leader: 3 Replicas: 2,3,4 Isr: 2,3,4
my-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 my-topic Partition: 1 Leader: 2 Replicas: 1,2,3 Isr: 1,2,3 my-topic Partition: 2 Leader: 3 Replicas: 2,3,4 Isr: 2,3,4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16장. 분산 추적 설정 링크 복사링크가 클립보드에 복사되었습니다!
분산 추적을 사용하면 분산 시스템의 애플리케이션 간 트랜잭션 진행 상황을 추적할 수 있습니다. 마이크로 서비스 아키텍처에서 추적은 서비스 간 트랜잭션 진행 상황을 추적합니다. 추적 데이터는 애플리케이션 성능을 모니터링하고 대상 시스템 및 최종 사용자 애플리케이션 관련 문제를 조사하는 데 유용합니다.
Apache Kafka용 Streams에서 추적은 소스 시스템에서 Kafka로 보낸 다음 Kafka에서 대상 시스템 및 애플리케이션까지 메시지의 엔드 투 엔드 추적을 용이하게 합니다. 이는 Cryostat 메트릭과 구성 요소 로거 에서 볼 수 있는 메트릭 을 보완합니다.
추적 지원은 다음 Kafka 구성 요소에 빌드됩니다.
- Kafka Connect
- MirrorMaker
- MirrorMaker 2
- Apache Kafka Kafka 브리지 스트림
Kafka 브로커에서는 추적이 지원되지 않습니다.
구성 요소의 속성 파일에 추적 구성을 추가합니다.
추적을 활성화하려면 환경 변수를 설정하고 추적 시스템의 라이브러리를 Kafka 클래스 경로에 추가합니다. Jaeger 추적의 경우 Jaeger Exporter를 사용하여 OpenTelemetry에 대한 추적 아티팩트를 추가할 수 있습니다.
Apache Kafka용 스트림은 더 이상 OpenTracing을 지원하지 않습니다. 이전에 Jaeger와 함께 OpenTracing을 사용하는 경우 대신 OpenTelemetry를 사용하도록 전환하는 것이 좋습니다.
Kafka 생산자, 소비자 및 Kafka Streams API 애플리케이션에서 추적을 활성화하려면 애플리케이션 코드를 측정합니다. 조정되면 클라이언트는 추적 데이터를 생성합니다(예: 메시지를 생성하거나 로그에 오프셋을 쓸 때).
Streams for Apache Kafka 이외의 애플리케이션 및 시스템에 대한 추적을 설정하는 것은 이 콘텐츠의 범위를 벗어납니다.
16.1. 절차의 개요 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka용 스트림 추적을 설정하려면 다음 절차를 순서대로 수행합니다.
Kafka Connect, MirrorMaker 2 및 MirrorMaker에 대한 추적을 설정합니다.
클라이언트의 추적을 설정합니다.
추적기가 있는 장비 클라이언트:
Kafka 브리지의 추적 활성화에 대한 자세한 내용은 Apache Kafka Kafka 브리지용 Streams 사용을 참조하십시오.
16.2. 추적 옵션 링크 복사링크가 클립보드에 복사되었습니다!
Jaeger 추적 시스템과 함께 OpenTelemetry를 사용합니다.
OpenTelemetry는 추적 또는 모니터링 시스템과 독립적인 API 사양을 제공합니다.
API를 사용하여 추적을 위한 애플리케이션 코드를 계측합니다.
- 조정된 애플리케이션은 분산 시스템에서 개별 요청에 대한 추적 을 생성합니다.
- 추적은 시간이 지남에 따라 특정 작업 단위를 정의하는 범위로 구성됩니다.
Jaeger는 마이크로 서비스 기반 분산 시스템의 추적 시스템입니다.
- Jaeger 사용자 인터페이스를 사용하면 추적 데이터를 쿼리, 필터링 및 분석할 수 있습니다.
간단한 쿼리를 표시하는 Jaeger 사용자 인터페이스
16.3. 추적을 위한 환경 변수 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 구성 요소에 대한 추적을 활성화하거나 Kafka 클라이언트의 추적기를 초기화할 때 환경 변수를 사용합니다.
환경 변수 추적은 변경될 수 있습니다. 최신 정보는 OpenTelemetry 설명서 를 참조하십시오.
다음 표에서는 추적기를 설정하기 위한 주요 환경 변수를 설명합니다.
| 속성 | 필수 항목 | 설명 |
|---|---|---|
|
| 제공됨 | OpenTelemetry에 대한 Jaeger 추적 서비스의 이름입니다. |
|
| 제공됨 | 추적에 사용되는 내보내기입니다. |
|
| 제공됨 |
추적에 사용되는 내보내기입니다. 기본적으로 |
16.4. Kafka Connect에 대한 추적 활성화 링크 복사링크가 클립보드에 복사되었습니다!
구성 속성을 사용하여 Kafka Connect에 대해 분산 추적을 활성화합니다. Kafka Connect 자체에서 생성하고 사용하는 메시지만 추적됩니다. Kafka Connect와 외부 시스템 간에 전송된 메시지를 추적하려면 해당 시스템의 커넥터에서 추적을 구성해야 합니다.
OpenTelemetry를 사용하는 추적을 활성화할 수 있습니다.
프로세스
-
opt/kafka/libs디렉터리에 추적 아티팩트를 추가합니다. 관련 Kafka Connect 구성 파일에서 생산자 및 소비자 추적을 구성합니다.
-
독립 실행형 모드에서 Kafka Connect를 실행하는 경우
/opt/kafka/config/connect-standalone.properties파일을 편집합니다. -
분산 모드에서 Kafka Connect를 실행하는 경우
/opt/kafka/config/connect-distributed.properties파일을 편집합니다.
구성 파일에 다음 추적 인터셉터 속성을 추가합니다.
OpenTelemetry 속성
producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptor consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptor
producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptor consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 추적이 활성화되면 Kafka Connect 스크립트를 실행할 때 추적을 초기화합니다.
-
독립 실행형 모드에서 Kafka Connect를 실행하는 경우
- 구성 파일을 저장합니다.
- 추적의 환경 변수를 설정합니다.
구성 파일을 매개 변수로 사용하여 독립 실행형 또는 분산 모드로 Kafka 연결을 시작합니다(연결 연결 속성 추가).
독립 실행형 모드에서 Kafka 연결 실행
su - kafka /opt/kafka/bin/connect-standalone.sh \ /opt/kafka/config/connect-standalone.properties \ connector1.properties \ [connector2.properties ...]
su - kafka /opt/kafka/bin/connect-standalone.sh \ /opt/kafka/config/connect-standalone.properties \ connector1.properties \ [connector2.properties ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 분산 모드에서 Kafka 연결 실행
su - kafka /opt/kafka/bin/connect-distributed.sh /opt/kafka/config/connect-distributed.properties
su - kafka /opt/kafka/bin/connect-distributed.sh /opt/kafka/config/connect-distributed.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka Connect의 내부 소비자 및 생산자가 이제 추적에 사용됩니다.
16.5. MirrorMaker 2의 추적 활성화 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 속성 파일에서 Interceptor 속성을 정의하여 MirrorMaker 2에 대해 분산 추적을 활성화합니다. Kafka 클러스터 간에 메시지가 추적됩니다. 추적 데이터는 MirrorMaker 2 구성 요소를 입력하고 나가는 메시지를 기록합니다.
OpenTelemetry를 사용하는 추적을 활성화할 수 있습니다.
프로세스
-
opt/kafka/libs디렉터리에 추적 아티팩트를 추가합니다. opt/kafka/config/connect-mirror-maker.properties파일에서 생산자 및 소비자 추적을 구성합니다.구성 파일에 다음 추적 인터셉터 속성을 추가합니다.
OpenTelemetry 속성
header.converter=org.apache.kafka.connect.converters.ByteArrayConverter producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptor consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptor
header.converter=org.apache.kafka.connect.converters.ByteArrayConverter producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptor consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow CryostatArrayConverter는 Kafka Connect가 메시지 헤더(추적 ID를 포함)를 base64 인코딩으로 변환하지 못하도록 합니다. 이렇게 하면 소스 및 대상 클러스터에서 메시지가 모두 동일합니다.추적이 활성화되면 Kafka MirrorMaker 2 스크립트를 실행할 때 추적을 초기화합니다.
- 구성 파일을 저장합니다.
- 추적의 환경 변수를 설정합니다.
생산자 및 소비자 구성 파일을 매개변수로 사용하여 MirrorMaker 2를 시작합니다.
su - kafka /opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.properties
su - kafka /opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 추적을 위해 MirrorMaker 2의 내부 소비자와 생산자가 활성화됩니다.
16.6. MirrorMaker의 추적 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Interceptor 속성을 소비자 및 생산자 구성 매개변수로 전달하여 MirrorMaker에 대한 분산 추적을 활성화합니다. 메시지는 소스 클러스터에서 대상 클러스터로 추적됩니다. 추적 데이터는 MirrorMaker 구성 요소를 입력하고 나가는 메시지를 기록합니다.
OpenTelemetry를 사용하는 추적을 활성화할 수 있습니다.
프로세스
-
opt/kafka/libs디렉터리에 추적 아티팩트를 추가합니다. /opt/kafka/config/producer.properties파일에서 생산자 추적을 구성합니다.다음 추적 인터셉터 속성을 추가합니다.
OpenTelemetry의 생산자 속성
producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptor
producer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingProducerInterceptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 구성 파일을 저장합니다.
/opt/kafka/config/consumer.properties파일에서 소비자 추적을 구성합니다.다음 추적 인터셉터 속성을 추가합니다.
OpenTelemetry의 소비자 속성
consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptor
consumer.interceptor.classes=io.opentelemetry.instrumentation.kafkaclients.TracingConsumerInterceptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 추적이 활성화되면 Kafka MirrorMaker 스크립트를 실행할 때 추적을 초기화합니다.
- 구성 파일을 저장합니다.
- 추적의 환경 변수를 설정합니다.
생산자 및 소비자 구성 파일을 매개변수로 사용하여 MirrorMaker를 시작합니다.
su - kafka /opt/kafka/bin/kafka-mirror-maker.sh \ --producer.config /opt/kafka/config/producer.properties \ --consumer.config /opt/kafka/config/consumer.properties \ --num.streams=2
su - kafka /opt/kafka/bin/kafka-mirror-maker.sh \ --producer.config /opt/kafka/config/producer.properties \ --consumer.config /opt/kafka/config/consumer.properties \ --num.streams=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 추적을 위해 MirrorMaker의 내부 소비자 및 생산자가 활성화됩니다.
16.7. Kafka 클라이언트의 추적 초기화 링크 복사링크가 클립보드에 복사되었습니다!
OpenTelemetry에 대한 추적기를 초기화한 다음 분산 추적을 위해 클라이언트 애플리케이션을 측정합니다. Kafka 생산자 및 소비자 클라이언트 및 Kafka Streams API 애플리케이션을 계측할 수 있습니다.
추적 환경 변수 세트를 사용하여 추적기를 구성하고 초기화합니다.
프로세스
각 클라이언트 애플리케이션에서 추적기에 대한 종속성을 추가합니다.
클라이언트 애플리케이션의
pom.xml파일에 Maven 종속성을 추가합니다.OpenTelemetry 종속 항목
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 추적 환경 변수를 사용하여 추적 프로그램의 구성을 정의합니다.
환경 변수로 초기화되는 추적기를 생성합니다.
OpenTelemetry용 추적기 생성
OpenTelemetry ot = GlobalOpenTelemetry.get();
OpenTelemetry ot = GlobalOpenTelemetry.get();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 추적기를 글로벌 추적기로 등록합니다.
GlobalTracer.register(tracer);
GlobalTracer.register(tracer);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클라이언트를 계측합니다.
16.8. 추적을 위한 생산자 및 소비자 처리 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 생산자 및 소비자에서 추적을 활성화하는 애플리케이션 코드입니다. 데코레이터 패턴 또는 인터셉터를 사용하여 추적을 위해 Java 생산자 및 소비자 애플리케이션 코드를 계측합니다. 그런 다음 메시지가 생성되거나 주제에서 검색될 때 추적을 기록할 수 있습니다.
OpenTelemetry 계측 프로젝트는 생산자 및 소비자의 계측을 지원하는 클래스를 제공합니다.
- 데코레이터 계측
- 데코레이터 계측을 위해 추적을 위해 수정된 생산자 또는 소비자 인스턴스를 생성합니다.
- 인터셉터 계측
- 인터셉터 계측의 경우 소비자 또는 생산자 구성에 추적 기능을 추가합니다.
사전 요구 사항
추적 JAR을 프로젝트에 종속 항목으로 추가하여 생산자 및 소비자 애플리케이션에서 계측을 활성화합니다.
프로세스
각 생산자 및 소비자 애플리케이션의 애플리케이션 코드에서 다음 단계를 수행합니다. 데코레이터 패턴 또는 인터셉터를 사용하여 클라이언트 애플리케이션 코드를 측정합니다.
데코레이터 패턴을 사용하려면 수정된 생산자 또는 소비자 인스턴스를 생성하여 메시지를 보내거나 받습니다.
원래
KafkaProducer또는KafkaConsumer클래스를 전달합니다.OpenTelemetry에 대한 데코레이터 계측 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용하려면 생산자 또는 소비자 구성에서 interceptor 클래스를 설정합니다.
일반적인 방식으로
KafkaProducer및KafkaConsumer클래스를 사용합니다.TracingProducerInterceptor및TracingConsumerInterceptor클래스는 추적 기능을 처리합니다.인터셉터를 사용한 생산자 구성 예
senderProps.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); KafkaProducer<Integer, String> producer = new KafkaProducer<>(senderProps); producer.send(...);senderProps.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); KafkaProducer<Integer, String> producer = new KafkaProducer<>(senderProps); producer.send(...);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용한 소비자 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.9. 추적을 위한 Kafka Streams 애플리케이션 조정 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Streams API 애플리케이션에서 추적을 활성화하는 애플리케이션 코드입니다. 데코레이터 패턴 또는 인터셉터를 사용하여 추적을 위해 Kafka Streams API 애플리케이션을 계측합니다. 그런 다음 메시지가 생성되거나 주제에서 검색될 때 추적을 기록할 수 있습니다.
- 데코레이터 계측
-
데코레이터 계측을 위해 추적을 위해 수정된 Kafka Streams 인스턴스를 생성합니다. OpenTelemetry의 경우 Kafka Streams에 추적 계측을 제공하기 위해 사용자 정의
TracingKafkaClientSupplier클래스를 생성해야 합니다. - 인터셉터 계측
- 인터셉터 계측의 경우 Kafka Streams 생산자 및 소비자 구성에 추적 기능을 추가합니다.
사전 요구 사항
추적 JAR을 프로젝트에 종속 항목으로 추가하여 Kafka Streams 애플리케이션에서 계측을 활성화합니다.
-
OpenTelemetry를 사용하여 Kafka Streams를 조정하려면 사용자 정의
TracingKafkaClientSupplier를 작성해야 합니다. 사용자 정의
TracingKafkaClientSupplier는 Kafka의DefaultKafkaClientSupplier를 확장하여 생산자 및 소비자 생성 방법을 재정의하여 Telemetry 관련 코드로 인스턴스를 래핑할 수 있습니다.사용자 정의
TracingKafkaClientSupplier의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
각 Kafka Streams API 애플리케이션에 대해 다음 단계를 수행합니다.
데코레이터 패턴을 사용하려면
TracingKafkaClientSupplier공급자 인터페이스 인스턴스를 생성한 다음 공급자 인터페이스를KafkaStreams에 제공합니다.데코레이터 계측 예
KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer); KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();
KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer); KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용하려면 Kafka Streams 생산자 및 소비자 구성에서 interceptor 클래스를 설정합니다.
TracingProducerInterceptor및TracingConsumerInterceptor클래스는 추적 기능을 처리합니다.인터셉터를 사용한 생산자 및 소비자 구성의 예
props.put(StreamsConfig.PRODUCER_PREFIX + ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); props.put(StreamsConfig.CONSUMER_PREFIX + ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingConsumerInterceptor.class.getName());
props.put(StreamsConfig.PRODUCER_PREFIX + ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); props.put(StreamsConfig.CONSUMER_PREFIX + ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingConsumerInterceptor.class.getName());Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.10. OpenTelemetry를 사용하여 추적 시스템 지정 링크 복사링크가 클립보드에 복사되었습니다!
기본 Jaeger 시스템 대신 OpenTelemetry에서 지원하는 다른 추적 시스템을 지정할 수 있습니다.
OpenTelemetry와 함께 다른 추적 시스템을 사용하려면 다음을 수행하십시오.
- 추적 시스템의 라이브러리를 Kafka 클래스 경로에 추가합니다.
추적 시스템의 이름을 추가 내보내기 환경 변수로 추가합니다.
Jaeger를 사용하지 않는 경우 추가 환경 변수
OTEL_SERVICE_NAME=my-tracing-service OTEL_TRACES_EXPORTER=zipkin OTEL_EXPORTER_ZIPKIN_ENDPOINT=http://localhost:9411/api/v2/spans
OTEL_SERVICE_NAME=my-tracing-service OTEL_TRACES_EXPORTER=zipkin1 OTEL_EXPORTER_ZIPKIN_ENDPOINT=http://localhost:9411/api/v2/spans2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.11. OpenTelemetry에 대한 사용자 정의 범위 이름 지정 링크 복사링크가 클립보드에 복사되었습니다!
추적 범위는 작업 이름, 시작 시간 및 기간이 있는 Jaeger의 논리적 작업 단위입니다. 범위에는 이름이 내장되어 있지만 Kafka 클라이언트 계측에 사용자 정의 범위 이름을 지정할 수 있습니다.
사용자 지정 범위 이름을 지정하는 것은 선택 사항이며 생산자 및 소비자 클라이언트 계측 또는 Kafka 스트림 조정에서 데코레이터 패턴을 사용하는 경우에만 적용됩니다.
사용자 지정 범위 이름은 OpenTelemetry로 직접 지정할 수 없습니다. 대신 클라이언트 애플리케이션에 코드를 추가하여 추가 태그 및 속성을 추출하여 범위 이름을 검색합니다.
특성을 추출하는 코드 예
17장. Kafka 내보내기 사용 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Exporter 는 Apache Kafka 브로커 및 클라이언트의 모니터링을 개선하는 오픈 소스 프로젝트입니다.
Kafka Exporter는 Kafka 클러스터 배포 시 오프셋, 소비자 그룹, 소비자 지연 및 주제와 관련된 Kafka 브로커에서 추가 지표 데이터를 추출하기 위해 Apache Kafka용 Streams가 제공됩니다.
예를 들어 지표 데이터는 느린 소비자를 식별하는 데 사용됩니다.
지연 데이터는 Prometheus 지표로 노출되며 분석을 위해 Grafana에 표시될 수 있습니다.
이미 Prometheus 및 Grafana를 사용하여 기본 제공 Kafka 메트릭을 모니터링하는 경우 Kafka Exporter Prometheus 끝점을 스크랩하도록 Prometheus를 구성할 수 있습니다.
Kafka는 Cryostat를 통해 지표를 노출합니다. 이 지표는 Prometheus 지표로 내보낼 수 있습니다. 자세한 내용은 Cryostat 를 사용하여 클러스터 모니터링을 참조하십시오.
17.1. 소비자 지연 링크 복사링크가 클립보드에 복사되었습니다!
소비자 지연은 메시지의 프로덕션 속도와 사용 속도의 차이를 나타냅니다. 특히 지정된 소비자 그룹의 소비자 지연은 파티션의 마지막 메시지와 해당 소비자가 현재 선택 중인 메시지 사이의 지연을 나타냅니다. 지연은 파티션 로그의 끝과 관련하여 소비자 오프셋의 위치를 반영합니다.
이러한 차이점은 Kafka 브로커 주제 파티션의 읽기 및 쓰기 위치인 생산자 오프셋과 소비자 오프셋 간의 delta 라고도 합니다.
주제가 1초에 100개의 메시지를 스트리밍한다고 가정합니다. 생산자 오프셋(주파 파티션 헤드)과 소비자가 읽은 마지막 오프셋은 10초 지연을 의미합니다.
소비자 지연 모니터링의 중요성
실시간 데이터의 처리에 의존하는 애플리케이션의 경우 소비자 지연을 모니터링하는 것이 너무 크지 않은지 확인하는 것이 중요합니다. 지연이 많을수록 프로세스가 실시간 처리 목표에서 이동합니다.
예를 들어 소비자 지연은 제거되지 않았거나 계획되지 않은 종료를 통해 오래된 데이터를 너무 많이 소비한 결과일 수 있습니다.
소비자 지연 감소
지연을 줄이기 위한 일반적인 작업은 다음과 같습니다.
- 새 소비자를 추가하여 소비자 그룹 확장
- 메시지가 주제에 남아 있도록 보존 시간 늘리기
- 메시지 버퍼를 늘리기 위해 디스크 용량을 더 추가
소비자 지연을 줄이기 위한 작업은 기본 인프라와 Apache Kafka의 스트림 스트림이 지원 중인 사용 사례에 따라 달라집니다. 예를 들어, 지연된 소비자는 브로커에서 디스크 캐시의 가져오기 요청을 서비스할 수 있는 이점이 줄어듭니다. 또한 특정 경우에는 소비자가 catch될 때까지 메시지를 자동으로 삭제하는 것이 허용될 수 있습니다.
17.2. Kafka Exporter 경고 규칙 예 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Exporter와 관련된 샘플 경고 알림 규칙은 다음과 같습니다.
UnderReplicatedPartition- 주제가 복제되지 않았으며 브로커가 충분한 파티션을 복제하지 않는다고 경고하는 경고입니다. 주제의 기본 구성은 하나 이상의 복제된 파티션이 있는 경우 경고용입니다. 경고는 Kafka 인스턴스가 다운되었거나 Kafka 클러스터가 과부하됨을 나타낼 수 있습니다. Kafka 브로커를 다시 시작하려는 경우 복제 프로세스를 다시 시작해야 할 수 있습니다.
TooLargeConsumerGroupLag- 소비자 그룹의 지연이 특정 주제 파티션에서 너무 커서 있음을 경고하는 경고입니다. 기본 구성은 1000개의 레코드입니다. 대규모 지연은 소비자가 너무 느리고 생산자 뒤에 속함을 나타낼 수 있습니다.
NoMessageForTooLong- 주제가 일정 기간 동안 메시지를 수신하지 않았다고 경고하는 경고입니다. 기간의 기본 설정은 10분입니다. 지연은 구성 문제로 인해 생산자가 메시지를 주제에 게시하지 못할 수 있습니다.
특정 요구 사항에 따라 경고 규칙을 조정할 수 있습니다.
17.3. Kafka 내보내기 메트릭 링크 복사링크가 클립보드에 복사되었습니다!
지연 정보는 Kafka Exporter에서 Grafana에서 프레젠테이션을 위한 Prometheus 지표로 노출됩니다.
Kafka Exporter는 브로커, 주제 및 소비자 그룹에 대한 메트릭 데이터를 노출합니다.
| 이름 | 정보 |
|---|---|
|
| Kafka 클러스터의 브로커 수 |
| 이름 | 정보 |
|---|---|
|
| 주제의 파티션 수 |
|
| 브로커의 현재 주제 파티션 오프셋 |
|
| 브로커의 가장 오래된 주제 파티션 오프셋 |
|
| 주제 파티션의 in-sync 복제본 수 |
|
| 주제 파티션의 리더 브로커 ID |
|
|
주제 파티션이 기본 브로커를 사용하는 경우 |
|
| 이 주제 파티션의 복제본 수 |
|
|
주제 파티션이 복제 아래에 있는 경우 |
| 이름 | 정보 |
|---|---|
|
| 소비자 그룹의 현재 주제 파티션 오프셋 |
|
| 주제 파티션에서 소비자 그룹에 대한 현재 대략적인 지연 |
17.4. Kafka 내보내기 실행 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Exporter를 실행하여 Grafana 대시보드에서 프레젠테이션에 대한 Prometheus 지표를 노출합니다.
Kafka Exporter 패키지를 다운로드하여 설치하여 Apache Kafka용 Streams와 함께 Kafka Exporter를 사용합니다. 패키지를 다운로드하고 설치하려면 Apache Kafka용 Streams가 필요합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Apache Kafka용 Streams에 대한 서브스크립션이 있습니다.
이 절차에서는 이미 Grafana 사용자 인터페이스에 액세스할 수 있고 Prometheus가 데이터 소스로 배포 및 추가된다고 가정합니다.
프로세스
Kafka Exporter 패키지를 설치합니다.
dnf install kafka_exporter
dnf install kafka_exporterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지가 설치되었는지 확인합니다.
dnf info kafka_exporter
dnf info kafka_exporterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 적절한 구성 매개변수 값을 사용하여 Kafka Exporter를 실행합니다.
kafka_exporter --kafka.server=<kafka_bootstrap_address>:9092 --kafka.version=3.7.0 --<my_other_parameters>
kafka_exporter --kafka.server=<kafka_bootstrap_address>:9092 --kafka.version=3.7.0 --<my_other_parameters>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 매개 변수에는 double-hyphen(
--) 규칙이 필요합니다.
--kafka.server매개변수는 Kafka 인스턴스에 연결할 호스트 이름과 포트를 지정합니다.
--kafka.version매개변수는 호환성을 보장하기 위해 Kafka 버전을 지정합니다.
사용 가능한 다른 매개변수에 대한 정보는kafka_exporter --help를 사용합니다.Kafka Exporter 지표를 모니터링하도록 Prometheus를 구성합니다.
Prometheus 구성에 대한 자세한 내용은 Prometheus 설명서 를 참조하십시오.
Grafana를 활성화하여 Prometheus에서 노출하는 Kafka Exporter 지표 데이터를 제공합니다.
자세한 내용은 Grafana에서 Kafka 내보내기 메트릭을 참조하십시오.
Kafka 내보내기 업데이트
Apache Kafka 설치용 Streams와 함께 Kafka Exporter의 최신 버전을 사용합니다.
업데이트를 확인하려면 다음을 사용합니다.
dnf check-update
dnf check-update
Kafka Exporter를 업데이트하려면 다음을 사용합니다.
dnf update kafka_exporter
dnf update kafka_exporter
17.5. Grafana에서 Kafka Exporter 메트릭 표시 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Exporter Prometheus 지표를 데이터 소스로 사용하면 Grafana 차트 대시보드를 생성할 수 있습니다.
예를 들어 메트릭에서 다음 Grafana 차트를 생성할 수 있습니다.
- 초당 메시지 (주석에서)
- 분별 메시지 (주석에서)
- 소비자 그룹의 지연
- 분당 소비되는 메시지(사용자 그룹별)
메트릭 데이터가 일정 동안 수집되면 Kafka 내보내기 차트가 채워집니다.
Grafana 차트를 사용하여 지연을 분석하고 지연을 줄이는 작업이 영향을 받는 소비자 그룹에 영향을 미치는지 확인합니다. 예를 들어 Kafka 브로커가 지연을 줄이기 위해 조정되면 대시보드에는 소비자 그룹 차트가 중단되고 분별 메시지 차트가 가동되는 메시지가 표시됩니다.
18장. Apache Kafka 및 Kafka의 스트림 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
다운타임 없이 Kafka 클러스터를 업그레이드합니다. Apache Kafka 2.8의 스트림은 Apache Kafka 버전 3.7.0을 지원하고 사용합니다. Kafka 3.6.0은 Apache Kafka 2.8용 Streams로 업그레이드하기 위한 목적으로만 지원됩니다. 최신 버전의 Apache Kafka를 설치할 때 지원되는 최신 Kafka 버전으로 업그레이드합니다.
18.1. 업그레이드 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
업그레이드 프로세스를 시작하기 전에 Red Hat Enterprise Linux 릴리스 노트의 Streams for Apache Kafka 2.8에 설명된 업그레이드 변경 사항을 숙지해야 합니다.
해당 버전으로 업그레이드하는 방법에 대한 정보는 특정 버전의 Apache Kafka를 지원하는 설명서를 참조하십시오.
18.2. Kafka 버전 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리를 위해 Zoo Cryostat를 사용할 때 Kafka 를 업그레이드하려면 Kafka 리소스 구성에서 Kafka 버전(Kafka.spec.kafka.version)과 브랜드 간 프로토콜 버전(inter.broker.protocol.version)을 업데이트해야 합니다. Kafka의 각 버전에는 해석 간 프로토콜의 호환 버전이 있습니다. broker 간 프로토콜은 브루커 간 통신에 사용됩니다. 프로토콜의 마이너 버전은 일반적으로 이전 표에 표시된 대로 Kafka의 마이너 버전과 일치하도록 증가합니다. broker 프로토콜 버전은 Kafka 리소스에서 클러스터 전체로 설정됩니다. 이를 변경하려면 Kafka.spec.kafka.config 에서 inter.broker.protocol.version 속성을 편집합니다.
다음 표는 Kafka 버전의 차이점을 보여줍니다.
| Apache Kafka 버전용 스트림 | Kafka 버전 | broker 프로토콜 버전 | 로그 메시지 형식 버전 | Zookeeper 버전 |
|---|---|---|---|---|
| 2.7 | 3.7.0 | 3.7 | 3.7 | 3.8.3 |
| 2.6 | 3.6.0 | 3.6 | 3.6 | 3.8.3 |
- Kafka 3.7.0은 프로덕션 용도로 지원됩니다.
- Kafka 3.6.0은 Apache Kafka 2.8용 Streams로 업그레이드하기 위한 목적으로만 지원됩니다.
로그 메시지 형식 버전
생산자가 Kafka 브로커에 메시지를 보내면 메시지는 특정 형식을 사용하여 인코딩됩니다. 형식은 Kafka 릴리스 간에 변경될 수 있으므로 메시지는 인코딩된 메시지 형식의 버전을 지정합니다.
특정 메시지 형식 버전을 설정하는 데 사용되는 속성은 다음과 같습니다.
-
주제의
message.format.version속성 -
Kafka 브로커의
log.message.format.version속성
Kafka 3.0.0에서 메시지 형식 버전 값은 inter.broker.protocol.version 과 일치하도록 가정되며 설정할 필요가 없습니다. 값은 사용된 Kafka 버전을 반영합니다.
Kafka 3.0.0 이상으로 업그레이드할 때 inter.broker.protocol.version 을 업데이트할 때 이러한 설정을 제거할 수 있습니다. 그러지 않으면 업그레이드할 Kafka 버전에 따라 메시지 형식 버전을 설정할 수 있습니다.
항목에 대한 message.format.version 의 기본값은 Kafka 브로커에 설정된 log.message.format.version 에 의해 정의됩니다. 주제 구성을 수정하여 주제의 message.format.version 을 수동으로 설정할 수 있습니다.
Kafka 버전 변경에서 롤링 업데이트
Kafka 버전이 업데이트되면 Cluster Operator가 Kafka 브로커에 대한 롤링 업데이트를 시작합니다. 추가 롤링 업데이트는 inter.broker.protocol.version 및 log.message.format.version 에 대한 구성에 따라 달라집니다.
Kafka.spec.kafka.config 에…이 포함된 경우 | Cluster Operator가…을 시작합니다. |
|---|---|
|
|
단일 롤링 업데이트. 업데이트 후 |
|
| 두 개의 롤링 업데이트 |
|
| 두 개의 롤링 업데이트 |
Kafka 3.0.0에서 inter.broker.protocol.version 이 3.0 이상으로 설정되면 log.message.format.version 옵션이 무시되고 설정할 필요가 없습니다. 브로커의 log.message.format.version 속성 및 주제의 message.format.version 속성은 더 이상 사용되지 않으며 Kafka의 향후 릴리스에서 제거됩니다.
Kafka 업그레이드의 일부로 Cluster Operator는 Zoo Cryostat에 대한 롤링 업데이트를 시작합니다.
- 단일 롤링 업데이트는 Zoo Cryostat 버전이 변경되지 않은 경우에도 발생합니다.
- 추가 롤링 업데이트는 Kafka의 새 버전에 새 Zoo Cryostat 버전이 필요한 경우 발생합니다.
18.3. 클라이언트 업그레이드 전략 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클라이언트를 업그레이드하면 새로운 버전의 Kafka에 도입된 기능, 수정 및 개선 사항의 이점을 누릴 수 있습니다. 업그레이드된 클라이언트는 다른 업그레이드된 Kafka 구성 요소와의 호환성을 유지합니다. 고객의 성능과 안정성도 개선될 수 있습니다.
원활한 전환을 위해 Kafka 클라이언트 및 브로커를 업그레이드하는 가장 좋은 방법을 고려하십시오. 선택한 업그레이드 전략은 브로커 또는 클라이언트를 먼저 업그레이드하는지 여부에 따라 달라집니다. Kafka 3.0부터는 브로커와 클라이언트를 어떤 순서로 독립적으로 업그레이드할 수 있습니다. 먼저 클라이언트 또는 브로커 업그레이드 결정은 업그레이드해야 하는 애플리케이션 수와 다운타임을 허용할 수 없는 여러 요인에 따라 달라집니다.
브로커 전에 클라이언트를 업그레이드하는 경우 일부 새로운 기능은 브로커가 아직 지원하지 않기 때문에 작동하지 않을 수 있습니다. 그러나 브로커는 다른 버전으로 실행되고 다른 로그 메시지 버전을 지원하는 생산자 및 소비자를 처리할 수 있습니다.
18.4. Kafka 브로커 및 Zoo Cryostat 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
최신 버전의 Apache Kafka를 사용하도록 호스트 머신에서 Kafka 브로커 및 Zoo Cryostat를 업그레이드합니다. 설치 파일을 업데이트한 다음 모든 Kafka 브로커를 구성하고 다시 시작하여 새 브로커 프로토콜 버전을 사용합니다. 이러한 단계를 수행한 후 새 브랜드 간 프로토콜 버전을 사용하여 Kafka 브로커 간에 데이터가 전송됩니다.
Kafka 3.0.0에서 메시지 형식 버전 값은 inter.broker.protocol.version 과 일치하도록 가정되며 설정할 필요가 없습니다. 값은 사용된 Kafka 버전을 반영합니다.
사전 요구 사항
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다. 별도의 호스트에서 사용 중인 Kafka 및 기타 Kafka 구성 요소를 설치했습니다.
자세한 내용은 3.1절. “설치 환경”의 내용을 참조하십시오.
- 설치 파일을 다운로드했습니다.
프로세스
Apache Kafka 클러스터용 Streams의 각 Kafka 브로커와 한 번에 하나씩 다음을 수행합니다.
Apache Kafka 소프트웨어 다운로드 페이지 에서는 Streams for Apache Kafka 아카이브 를 다운로드합니다.
참고메시지가 표시되면 Red Hat 계정에 로그인합니다.
명령줄에서 임시 디렉터리를 생성하고
amq-streams-<version>-bin.zip파일의 내용을 추출합니다.mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafka
mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 실행 중인 경우 호스트에서 실행 중인 Zoo Cryostat 및 Kafka 브로커를 중지합니다.
/opt/kafka/bin/zookeeper-server-stop.sh /opt/kafka/bin/kafka-server-stop.sh jcmd | grep zookeeper jcmd | grep kafka
/opt/kafka/bin/zookeeper-server-stop.sh /opt/kafka/bin/kafka-server-stop.sh jcmd | grep zookeeper jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다중 노드 클러스터에서 Kafka를 실행하는 경우 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
기존 설치에서
libs및bin디렉토리를 삭제합니다.rm -rf /opt/kafka/libs /opt/kafka/bin
rm -rf /opt/kafka/libs /opt/kafka/binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 임시 디렉토리에서
libs및bin디렉토리를 복사합니다.cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/
cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
필요한 경우 새 버전의 변경 사항을 반영하도록
config디렉터리의 구성 파일을 업데이트합니다. 임시 디렉터리를 삭제합니다.
rm -r /tmp/kafka
rm -r /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/kafka/config/server.properties속성 파일을 편집합니다.inter.broker.protocol.version및log.message.format.version속성을 현재 버전으로 설정합니다.예를 들어 Kafka 버전 3.6.0에서 3.7.0으로 업그레이드하는 경우 현재 버전은 3.6입니다.
inter.broker.protocol.version=3.6 log.message.format.version=3.6
inter.broker.protocol.version=3.6 log.message.format.version=3.6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 업그레이드 중인 Kafka 버전에 대해 올바른 버전을 사용합니다(
3.5,3.6등). 현재 설정에서inter.broker.protocol.version을 변경하지 않으면 브로커가 업그레이드 중에 계속 서로 통신할 수 있습니다.속성이 구성되지 않은 경우 현재 버전으로 추가합니다.
Kafka 3.0.0 이상에서 업그레이드하는 경우
inter.broker.protocol.version만 설정하면 됩니다.업데이트된 Zoo Cryostat 및 Kafka 브로커를 다시 시작하십시오.
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커 및 Zoo Cryostat는 최신 Kafka 버전에 바이너리를 사용하기 시작합니다.
멀티 노드 클러스터에서 브로커를 다시 시작하는 방법에 대한 자세한 내용은 4.3절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
재시작한 Kafka 브로커가 다음과 같은 파티션 복제본에 도달했는지 확인합니다.
kafka-topics.sh툴을 사용하여 브로커에 포함된 모든 복제본이 동기화되었는지 확인합니다. 지침은 항목 목록 및 설명을 참조하십시오.다음 단계에서 새 인터브로커 프로토콜 버전을 사용하도록 Kafka 브로커를 업데이트합니다.
한 번에 하나씩 각 브로커를 업데이트합니다.
주의다음 단계를 완료한 후에는 Apache Kafka용 스트림을 다운그레이드할 수 없습니다.
- 클라이언트를 업그레이드하기 위한 선택한 전략에 따라 모든 클라이언트 애플리케이션을 업그레이드하여 새 버전의 클라이언트 바이너리를 사용합니다.
/opt/kafka/config/server.properties파일에서inter.broker.protocol.version속성을3.7로 설정합니다.inter.broker.protocol.version=3.7
inter.broker.protocol.version=3.7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령줄에서 수정한 Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중이 아닌지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 수정한 Kafka 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 3.0.0 이전 버전에서 업그레이드하는 경우
/opt/kafka/config/server.properties파일에서log.message.format.version속성을3.7로 설정합니다.log.message.format.version=3.7
log.message.format.version=3.7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령줄에서 수정한 Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중이 아닌지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 수정한 Kafka 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 재시작한 Kafka 브로커가 다음과 같은 파티션 복제본에 도달했는지 확인합니다.
kafka-topics.sh툴을 사용하여 브로커에 포함된 모든 복제본이 동기화되었는지 확인합니다. 지침은 항목 목록 및 설명을 참조하십시오.-
업그레이드에 사용된 경우
server.properties파일에서 레거시log.message.format.version구성을 제거합니다.
18.5. Kafka 구성 요소 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
최신 버전의 Apache Kafka를 사용하도록 호스트 머신의 Kafka 구성 요소를 업그레이드합니다. Apache Kafka 설치 파일의 Streams를 사용하여 다음 구성 요소를 업그레이드할 수 있습니다.
- Kafka Connect
- MirrorMaker
- Kafka 브리지(Sparate ZIP 파일)
사전 요구 사항
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다. - 설치 파일을 다운로드했습니다.
Kafka를 업그레이드 했습니다.
Kafka 구성 요소가 Kafka와 동일한 호스트에서 실행 중인 경우 업그레이드 시 Kafka를 중지하고 시작해야 합니다.
프로세스
Kafka 구성 요소의 인스턴스를 실행하는 각 호스트에 대해 다음을 수행합니다.
Apache Kafka 소프트웨어 다운로드 페이지 에서는 Streams for Apache Kafka 또는 Kafka Bridge 설치 파일을 다운로드합니다.
참고메시지가 표시되면 Red Hat 계정에 로그인합니다.
명령줄에서 임시 디렉터리를 생성하고
amq-streams-<version>-bin.zip파일의 내용을 추출합니다.mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafka
mkdir /tmp/kafka unzip amq-streams-<version>-bin.zip -d /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka Bridge의 경우
amq-streams-<version>-bridge-bin.zip파일을 추출합니다.- 실행 중인 경우 호스트에서 실행되는 Kafka 구성 요소를 중지합니다.
기존 설치에서
libs및bin디렉토리를 삭제합니다.rm -rf /opt/kafka/libs /opt/kafka/bin
rm -rf /opt/kafka/libs /opt/kafka/binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 임시 디렉토리에서
libs및bin디렉토리를 복사합니다.cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/
cp -r /tmp/kafka/kafka_<version>/libs /opt/kafka/ cp -r /tmp/kafka/kafka_<version>/bin /opt/kafka/Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
필요한 경우 새 버전의 변경 사항을 반영하도록
config디렉터리의 구성 파일을 업데이트합니다. 임시 디렉터리를 삭제합니다.
rm -r /tmp/kafka
rm -r /tmp/kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 적절한 스크립트 및 속성 파일을 사용하여 Kafka 구성 요소를 시작합니다.
독립 실행형 모드에서 Kafka 연결 시작
/opt/kafka/bin/connect-standalone.sh \ /opt/kafka/config/connect-standalone.properties <connector1>.properties [<connector2>.properties ...]
/opt/kafka/bin/connect-standalone.sh \ /opt/kafka/config/connect-standalone.properties <connector1>.properties [<connector2>.properties ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 분산 모드에서 Kafka 연결 시작
/opt/kafka/bin/connect-distributed.sh \ /opt/kafka/config/connect-distributed.properties
/opt/kafka/bin/connect-distributed.sh \ /opt/kafka/config/connect-distributed.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 전용 모드에서 MirrorMaker 2 시작
/opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.properties
/opt/kafka/bin/connect-mirror-maker.sh \ /opt/kafka/config/connect-mirror-maker.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브리지 시작
su - kafka ./bin/kafka_bridge_run.sh \ --config-file=<path>/application.properties
su - kafka ./bin/kafka_bridge_run.sh \ --config-file=<path>/application.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 구성 요소가 실행 중인지 확인하고 데이터를 예상대로 생성하거나 사용합니다.
독립 실행형 모드에서 Kafka 연결 확인
jcmd | grep ConnectStandalone
jcmd | grep ConnectStandaloneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 분산 모드에서 Kafka 연결 확인
jcmd | grep ConnectDistributed
jcmd | grep ConnectDistributedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 전용 모드에서 MirrorMaker 2가 실행 중인지 확인
jcmd | grep mirrorMaker
jcmd | grep mirrorMakerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 로그를 확인하여 Kafka 브리지가 실행 중인지 확인
HTTP-Kafka Bridge started and listening on port 8080 HTTP-Kafka Bridge bootstrap servers localhost:9092
HTTP-Kafka Bridge started and listening on port 8080 HTTP-Kafka Bridge bootstrap servers localhost:9092Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19장. Cryostat를 사용하여 클러스터 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
메트릭을 수집하는 것은 Kafka 배포의 상태 및 성능을 이해하는 데 중요합니다. 메트릭을 모니터링하면 중요 상태가 되기 전에 문제를 적극적으로 식별하고 리소스 할당 및 용량 계획에 대한 정보에 입각한 결정을 내릴 수 있습니다. 메트릭이 없으면 Kafka 배포의 동작에 대한 가시성이 제한되어 문제 해결을 더 어렵고 시간이 많이 소요될 수 있습니다. 메트릭을 설정하면 장기적으로 시간과 리소스를 절약할 수 있으며 Kafka 배포의 안정성을 보장하는 데 도움이 됩니다.
Kafka 구성 요소는 메트릭을 통해 관리 정보를 공유하는 JMX(Java Management Extensions)를 사용합니다. 이러한 메트릭은 Kafka 클러스터의 성능 및 전반적인 상태를 모니터링하는 데 중요합니다. 다른 많은 Java 애플리케이션과 마찬가지로 Kafka는 Managed Cryostat(MBean)를 사용하여 모니터링 툴 및 대시보드에 지표 데이터를 제공합니다. Cryostat는 JVM 수준에서 작동하므로 외부 툴이 Kafka 구성 요소에서 관리 정보를 연결하고 검색할 수 있습니다. JVM에 연결하려면 이러한 툴은 일반적으로 동일한 시스템과 기본적으로 동일한 사용자 권한으로 실행해야 합니다.
19.1. Cryostat 에이전트 활성화 링크 복사링크가 클립보드에 복사되었습니다!
JVM 시스템 속성을 사용하여 Kafka 구성 요소의 Cryostat 모니터링을 활성화합니다. KAFKA_JMX_OPTS 환경 변수를 사용하여 Cryostat 모니터링을 활성화하는 데 필요한 Cryostat 시스템 속성을 설정합니다. Kafka 구성 요소를 실행하는 스크립트는 이러한 속성을 사용합니다.
프로세스
KAFKA_JMX_OPTS환경 변수를 Cryostat 모니터링을 활성화하기 위해 속성으로 설정합니다.export KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
export KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow <port>를 Kafka 구성 요소가 Cryostat 연결을 수신 대기할 포트 이름으로 바꿉니다.
org.apache.kafka.common.metrics.JmxReporter를server.properties파일의metric.reporters에 추가합니다.metric.reporters=org.apache.kafka.common.metrics.JmxReporter
metric.reporters=org.apache.kafka.common.metrics.JmxReporterCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
브로커의 경우
bin/kafka-server-start.sh또는 Kafka Connect용bin/connect-distributed.sh와 같은 적절한 스크립트를 사용하여 Kafka 구성 요소를 시작합니다.
원격 Cryostat 연결을 보호하도록 인증 및 SSL을 구성하는 것이 좋습니다. 이 작업을 수행하는 데 필요한 시스템 속성에 대한 자세한 내용은 Oracle 설명서 를 참조하십시오.
19.2. Cryostat 에이전트 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
KAFKA_JMX_OPTS 환경 변수를 업데이트하여 Kafka 구성 요소에 대한 Cryostat 모니터링을 비활성화합니다.
프로세스
KAFKA_JMX_OPTS환경 변수를 설정하여 Cryostat 모니터링을 비활성화합니다.export KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=false
export KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고192.0.2. 모니터링을 비활성화할 때 포트, 인증 및 SSL 속성과 같은 기타 Cryostat 속성을 지정할 필요가 없습니다.
Kafka
server.properties파일에서auto.include.jmx.reporter를false로 설정합니다.auto.include.jmx.reporter=false
auto.include.jmx.reporter=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고auto.include.jmx.reporter속성은 더 이상 사용되지 않습니다. Kafka 4에서 CryostatReporter는 속성 파일의metric.reporters구성에org.apache.kafka.common.metrics.JmxReporter가 추가된 경우에만 활성화됩니다.-
브로커의 경우
bin/kafka-server-start.sh또는 Kafka Connect용bin/connect-distributed.sh와 같은 적절한 스크립트를 사용하여 Kafka 구성 요소를 시작합니다.
19.3. 메트릭 이름 지정 규칙 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Cryostat 메트릭으로 작업할 때는 특정 메트릭을 식별하고 검색하는 데 사용되는 이름 지정 규칙을 이해하는 것이 중요합니다. Kafka Cryostat 메트릭은 다음 형식을 사용합니다.
메트릭 형식
<metric_group>:type=<type_name>,name=<metric_name><other_attribute>=<value>
<metric_group>:type=<type_name>,name=<metric_name><other_attribute>=<value>
- <metric_group>은 메트릭 그룹의 이름입니다.
- <type_name>은 메트릭 유형의 이름입니다.
- <metric_name>은 특정 메트릭의 이름입니다.
- <other_attribute>는 0개 이상의 추가 속성을 나타냅니다.
예를 들어, CryostatsInPerSec 메트릭은 kafka.server 그룹의 BrokerTopicMetrics 유형입니다.
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec
경우에 따라 메트릭은 엔터티의 ID를 포함할 수 있습니다. 예를 들어 특정 클라이언트를 모니터링할 때 메트릭 형식에는 클라이언트 ID가 포함됩니다.
특정 클라이언트의 메트릭
kafka.consumer:type=consumer-fetch-manager-metrics,client-id=<client_id>
kafka.consumer:type=consumer-fetch-manager-metrics,client-id=<client_id>
마찬가지로 메트릭을 특정 클라이언트 및 주제로 더 좁힐 수 있습니다.
특정 클라이언트 및 항목에 대한 메트릭
kafka.consumer:type=consumer-fetch-manager-metrics,client-id=<client_id>,topic=<topic_id>
kafka.consumer:type=consumer-fetch-manager-metrics,client-id=<client_id>,topic=<topic_id>
이러한 명명 규칙을 이해하면 모니터링 및 분석할 메트릭을 정확하게 지정할 수 있습니다.
Strimzi 설치에 사용 가능한 전체 Cryostat 메트릭 목록을 보려면 JConsole과 같은 그래픽 툴을 사용할 수 있습니다. JConsole은 Kafka를 포함한 Java 애플리케이션을 모니터링하고 관리할 수 있는 Java 모니터링 및 관리 콘솔입니다. 툴의 사용자 인터페이스를 사용하여 Kafka 구성 요소를 실행하는 JVM에 연결하여 메트릭 목록을 볼 수 있습니다.
19.4. 문제 해결을 위해 Kafka#159 메트릭 분석 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat는 성능 및 리소스 사용량을 모니터링하고 관리하기 위해 Kafka 브로커에 대한 메트릭을 수집하는 방법을 제공합니다. 이러한 메트릭을 분석하면 CPU 사용량, 메모리 누수, 스레드 경합 및 느린 응답 시간과 같은 일반적인 브로커 문제를 진단하고 해결할 수 있습니다. 특정 메트릭은 이러한 문제의 근본 원인을 확인할 수 있습니다.
Cryostat 메트릭은 Kafka 클러스터의 전반적인 상태 및 성능에 대한 인사이트도 제공합니다. 시스템의 처리량, 대기 시간 및 가용성을 모니터링하고 문제를 진단하고 성능을 최적화하는 데 도움이 됩니다. 이 섹션에서는 일반적인 문제를 식별하고 Kafka 클러스터의 성능에 대한 통찰력을 제공하기 위해 Cryostat 메트릭을 사용하는 방법에 대해 설명합니다.
Prometheus 및 Grafana와 같은 툴을 사용하여 이러한 지표를 수집하고 그래프로 표시하면 반환된 정보를 시각화할 수 있습니다. 이는 문제를 감지하거나 성능을 최적화하는 데 특히 유용할 수 있습니다. 시간이 지남에 따라 메트릭을 그래프로 표시하는 것은 추세를 식별하고 리소스 소비를 예측하는데 도움이 될 수 있습니다.
19.4.1. 복제되지 않은 파티션 확인 링크 복사링크가 클립보드에 복사되었습니다!
균형 잡힌 Kafka 클러스터는 최적의 성능을 위해 중요합니다. 분산된 클러스터에서 파티션과 리더는 모든 브로커에 균등하게 분배되며 I/O 메트릭은 이를 반영합니다. 메트릭을 사용하는 것 외에도 kafka-topics.sh 툴을 사용하여 복제되지 않은 파티션 목록을 가져오고 문제가 있는 브로커를 식별할 수 있습니다. 복제되지 않은 파티션의 수가 변동하거나 많은 브로커가 높은 요청 대기 시간을 표시하는 경우 일반적으로 조사가 필요한 클러스터의 성능 문제를 나타냅니다. 반면 클러스터의 많은 브로커가 보고한 비복제 파티션의 안정적인 수는 일반적으로 클러스터의 브로커 중 하나가 오프라인임을 나타냅니다.
kafka-topics.sh 툴의 describe --under-replicated-partitions 옵션을 사용하여 현재 클러스터에 복제된 파티션에 대한 정보를 표시합니다. 이러한 파티션은 구성된 복제 인수보다 적은 복제본입니다.
출력이 비어 있으면 Kafka 클러스터에 복제되지 않은 파티션이 없습니다. 그렇지 않으면 출력에 동기화 중이거나 사용할 수 없는 복제본이 표시됩니다.
다음 예제에서는 각 파티션에 대해 3개의 복제본 중 2개만 동기화되고 ISR(동기화 복제본)에서 복제본이 누락되어 있습니다.
명령줄에서 복제되지 않은 파티션에 대한 정보 반환
bin/kafka-topics.sh --bootstrap-server :9092 --describe --under-replicated-partitions Topic: topic-1 Partition: 0 Leader: 4 Replicas: 4,2,3 Isr: 4,3 Topic: topic-1 Partition: 1 Leader: 3 Replicas: 2,3,4 Isr: 3,4 Topic: topic-1 Partition: 2 Leader: 3 Replicas: 3,4,2 Isr: 3,4
bin/kafka-topics.sh --bootstrap-server :9092 --describe --under-replicated-partitions
Topic: topic-1 Partition: 0 Leader: 4 Replicas: 4,2,3 Isr: 4,3
Topic: topic-1 Partition: 1 Leader: 3 Replicas: 2,3,4 Isr: 3,4
Topic: topic-1 Partition: 2 Leader: 3 Replicas: 3,4,2 Isr: 3,4
다음은 I/O 및 비복제된 파티션을 확인하는 몇 가지 메트릭입니다.
복제되지 않은 파티션을 확인하는 지표
주제 구성이 고가용성으로 설정된 경우 주제 구성이 3개 이상이고, 최소 개수의 in-sync 복제본이 복제 요소보다 1보다 작으면 복제되지 않은 파티션을 계속 사용할 수 있습니다. 반대로 최소 ISR 미만의 파티션은 가용성을 줄였습니다. kafka.server:type=ReplicaManager,name=UnderMinIsr CryostatCount 메트릭과 kafka-topics.sh 툴의 under-min-isr-partitions 옵션을 사용하여 이러한 항목을 모니터링할 수 있습니다.
Cruise Control을 사용하여 Kafka 클러스터 모니터링 및 재조정 작업을 자동화하여 파티션 로드가 균등하게 분배되도록 합니다. 자세한 내용은 13장. 클러스터 재조정에 Cruise Control 사용의 내용을 참조하십시오.
19.4.2. Kafka 클러스터에서 성능 문제 확인 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 메트릭의 급증은 브로커 문제를 나타낼 수 있으며, 이는 종종 스토리지 장치의 속도 저하 또는 실패 또는 다른 프로세스의 중단과 관련된 경우가 많습니다. 운영 체제 또는 하드웨어 수준에서 문제가 없는 경우 Kafka 클러스터의 로드의 불균형이 발생할 수 있으며 일부 파티션에서는 동일한 Kafka 주제의 다른 항목과 비교하여 과도한 트래픽을 수신할 수 있습니다.
Kafka 클러스터에서 성능 문제를 예측하려면 RequestHandlerAvgIdlePercent 메트릭을 모니터링하는 것이 좋습니다. RequestHandlerAvgIdlePercent 는 클러스터가 작동하는 방식을 잘 나타내는 전체 지표를 제공합니다. 이 메트릭의 값은 0에서 1 사이입니다. Cryostat 아래의 값은 스레드가 시간 중 30%를 사용 중이고 성능이 저하되기 시작하는 것을 나타냅니다. 값이 50% 아래로 떨어지면 특히 클러스터를 확장하거나 재조정해야 하는 경우 문제가 발생할 수 있습니다. 30 %에서 클러스터는 거의 사용할 수 없습니다.
또 다른 유용한 메트릭은 kafka.network:type=Processor,name=IdlePercent 입니다. 이 메트릭은 Kafka 클러스터의 네트워크 프로세서가 유휴 상태인 범위(%)를 모니터링하는 데 사용할 수 있습니다. 메트릭은 프로세서가 초과되었는지 또는 활용도가 낮은지 여부를 식별하는 데 도움이 됩니다.
최적의 성능을 보장하기 위해 num.io.threads 속성을 하이퍼 스레드 프로세서를 포함하여 시스템의 프로세서 수와 동일하게 설정합니다. 클러스터가 균형을 유지하지만 단일 클라이언트가 요청 패턴을 변경하여 문제를 유발하는 경우 클러스터의 부하를 줄이거나 브로커 수를 늘리십시오.
단일 브로커의 단일 디스크 오류가 전체 클러스터의 성능에 심각한 영향을 미칠 수 있다는 점에 유의해야합니다. 생산자 클라이언트는 주제의 파티션을 유도하는 모든 브로커에 연결하고 해당 파티션이 전체 클러스터에 균등하게 분배되므로 성능이 좋지 않은 브로커는 요청을 생성하고 생산자의 백 압력을 유발하여 모든 브로커에 대한 요청을 느리게합니다. RAID(Redundant Array of Inexpensive Disks) 스토리지 구성으로 여러 물리적 디스크 드라이브를 단일 논리 단위로 결합하면 이 문제를 방지할 수 있습니다.
다음은 Kafka 클러스터의 성능을 확인하는 몇 가지 메트릭입니다.
Kafka 클러스터의 성능을 확인하는 메트릭
- 1
- Kafka 브로커의 스레드 풀에서 요청 처리기 스레드의 평균 유휴 백분율입니다.
OneMinuteRate및FifteenMinuteRate속성은 각각 마지막 1분 15분의 요청 속도를 표시합니다. - 2
- Kafka 브로커의 특정 리스너의 특정 네트워크 프로세서에서 새 연결이 생성되는 속도입니다.
listener속성은 리스너 이름을 참조하며networkProcessor속성은 네트워크 프로세서의 ID를 나타냅니다.connection-creation-rate속성은 초당 연결 생성 속도를 표시합니다. - 3
- 요청 큐의 현재 크기입니다.
- 4
- 응답 큐의 현재 크기입니다.
- 5
- 지정된 네트워크 프로세서가 유휴 상태인 시간 백분율입니다.
networkProcessor는 모니터링할 네트워크 프로세서의 ID를 지정합니다. - 6
- Kafka 서버에서 디스크에서 읽은 총 바이트 수입니다.
- 7
- Kafka 서버에서 디스크에 기록한 총 바이트 수입니다.
19.4.3. Kafka 컨트롤러를 사용하여 성능 문제 식별 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 컨트롤러는 브로커 등록, 파티션 재할당, 주제 관리와 같은 클러스터의 전체 상태를 관리합니다. Kafka 클러스터에서 컨트롤러의 문제는 진단하기가 어렵고 Kafka 자체의 버그 범주에 속하는 경우가 많습니다. 컨트롤러 문제는 브로커 메타데이터가 동기화되지 않거나, 브로커가 미세한 것처럼 보이는 경우 오프라인 복제본 또는 주제 생성이 올바르게 발생하지 않는 항목에 대한 작업으로 표시될 수 있습니다.
컨트롤러를 모니터링하는 방법은 많지 않지만 활성 컨트롤러 수와 컨트롤러 대기열 크기를 모니터링할 수 있습니다. 이러한 메트릭을 모니터링하면 문제가 있는 경우 높은 수준의 표시기가 제공됩니다. 큐 크기의 급증이 예상되지만 이 값이 지속적으로 증가하거나 높은 값을 유지하고 떨어지지 않는 경우 컨트롤러가 중단될 수 있음을 나타냅니다. 이 문제가 발생하면 컨트롤러를 다른 브로커로 이동할 수 있으므로 현재 컨트롤러 인 브로커를 종료해야합니다.
다음은 Kafka 컨트롤러의 성능을 확인하는 몇 가지 메트릭입니다.
Kafka 컨트롤러의 성능을 확인하는 메트릭
kafka.controller:type=KafkaController,name=ActiveControllerCount kafka.controller:type=KafkaController,name=OfflinePartitionsCount kafka.controller:type=ControllerEventManager,name=EventQueueSize
kafka.controller:type=KafkaController,name=ActiveControllerCount
kafka.controller:type=KafkaController,name=OfflinePartitionsCount
kafka.controller:type=ControllerEventManager,name=EventQueueSize
19.4.4. 요청 문제 식별 링크 복사링크가 클립보드에 복사되었습니다!
RequestHandlerAvgIdlePercent 메트릭을 사용하여 요청이 느린지 확인할 수 있습니다. 또한 요청 메트릭은 지연 및 기타 문제가 발생하는 특정 요청을 식별할 수 있습니다.
Kafka 요청을 효과적으로 모니터링하려면 다음 두 가지 주요 지표인 count 및 99번째 백분위 대기 시간을 수집하는 것이 중요합니다.
count 메트릭은 특정 시간 간격 내에서 처리된 요청 수를 나타냅니다. Kafka 클러스터에서 처리하는 요청 볼륨에 대한 인사이트를 제공하고 트래픽의 급증 또는 감소를 식별하는 데 도움이 됩니다.
99번째 백분위 대기 시간 메트릭은 요청 대기 시간을 측정하며, 이는 요청을 처리하는 데 걸리는 시간입니다. 이는 요청의 99 %가 처리되는 기간을 나타냅니다. 그러나 나머지 1%의 요청에 대한 정확한 지속 기간에 대한 정보는 제공하지 않습니다. 즉, 99번째 백분위 대기 시간 메트릭은 요청의 99 %가 특정 기간 내에 처리되고 나머지 1 %는 더 오래 걸릴 수 있지만 나머지 1 %의 정확한 기간은 알려져 있지 않습니다. 99번째 백분위 수를 선택하는 것은 주로 대부분의 요청에 중점을 두고 결과를 스케일 수 있는 아웃리저를 제외하는 것입니다.
이 메트릭은 대부분의 요청과 관련된 성능 문제 및 병목 현상을 식별하는 데 특히 유용하지만 적은 요청만으로 경험되는 최대 대기 시간을 완전히 파악하지는 않습니다.
count 및 99번째 백분위 대기 시간 지표를 모두 수집하고 분석하면 Kafka 클러스터의 전반적인 성능 및 상태를 이해하고 처리 중인 요청의 대기 시간을 파악할 수 있습니다.
다음은 Kafka 요청의 성능을 확인하는 몇 가지 메트릭입니다.
요청 성능을 확인하는 메트릭
- 1
- 요청 유형을 요청하여 요청 지표를 분리합니다.
- 2
- Kafka 브로커가 초당 처리하는 요청을 처리하는 속도입니다.
- 3
- 요청이 처리되기 전에 브로커의 요청 대기열에서 대기하는 시간(밀리초)입니다.
- 4
- 브로커가 응답을 클라이언트로 다시 보내는 시점까지 요청을 완료하는 데 걸리는 총 시간(밀리초)입니다.
- 5
- 요청이 로컬 시스템에서 브로커가 처리하는 데 걸리는 시간(밀리초)입니다.
- 6
- 요청이 클러스터의 다른 브로커에 의해 처리되는 시간(밀리초)입니다.
- 7
- 요청이 브로커에 의해 제한되는 데 소비되는 시간(밀리초)입니다. 제한은 브로커가 클라이언트가 너무 많은 요청을 너무 빨리 보내고 있고 속도를 늦어야 한다는 것을 결정할 때 발생합니다.
- 8
- 응답이 브로커의 응답 큐에서 대기하고 클라이언트로 다시 전송되는 시간(밀리초)입니다.
- 9
- 브로커가 생성한 후 응답이 클라이언트에 다시 전송되는 데 걸리는 시간(밀리초)입니다.
- 10
- 모든 요청 메트릭의 경우
Count및99thPercentile속성은 처리된 총 요청 수와 요청의 가장 느린 1%를 각각 완료하는 데 걸리는 시간을 표시합니다.
19.4.5. 메트릭을 사용하여 클라이언트의 성능 확인 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 메트릭을 분석하면 브로커에 연결된 Kafka 클라이언트(프로덕터 및 소비자)의 성능을 모니터링할 수 있습니다. 이렇게 하면 소비자가 소비자 그룹, 높은 요청 실패 속도 또는 빈번한 연결 해제와 같이 브로커 로그에 강조 표시된 문제를 식별하는 데 도움이 될 수 있습니다.
다음은 Kafka 클라이언트의 성능을 확인하는 몇 가지 메트릭입니다.
클라이언트 요청의 성능을 확인하는 메트릭
- 1
- (Consumer) 폴링 요청 간의 평균 및 최대 시간, 이는 소비자가 메시지 흐름을 따라잡을 수 있을 만큼 자주 메시지를 폴링하는지 결정하는 데 도움이 될 수 있습니다.
time- betweenween-poll-avg및time- betweenween-poll-max속성은 각각 소비자가 연속 폴링하는 평균 및 최대 밀리초(밀리초)를 표시합니다. - 2
- Kafka 소비자와 브로커 코디네이터 간의 조정 프로세스를 모니터링하기 위한 메트릭입니다. 속성은 하트비트, 조인 및 재조정 프로세스와 관련이 있습니다.
- 3
- (producer) Kafka 생산자의 성능을 모니터링하기 위한 지표입니다. 속성은 버퍼 사용, 요청 대기 시간, 진행 중 요청, 트랜잭션 처리 및 레코드 처리와 관련이 있습니다.
19.4.6. 메트릭을 사용하여 주제 및 파티션의 성능 확인 링크 복사링크가 클립보드에 복사되었습니다!
주제 및 파티션에 대한 메트릭은 Kafka 클러스터의 문제를 진단하는 데도 유용할 수 있습니다. 또한 클라이언트 메트릭을 수집할 수 없는 경우 특정 클라이언트의 문제를 디버깅하는 데 사용할 수도 있습니다.
다음은 특정 주제 및 파티션의 성능을 확인하는 몇 가지 메트릭입니다.
주제 및 파티션의 성능을 확인하는 메트릭
- 1
- 특정 항목에 대한 초당 들어오는 바이트 비율입니다.
- 2
- 특정 주제의 초당 발신 바이트 수입니다.
- 3
- 특정 주제의 초당 실패한 가져오기 요청 속도입니다.
- 4
- 특정 항목에 대해 초당 실패한 생성 요청 속도입니다.
- 5
- 특정 주제에 대해 초당 들어오는 메시지 속도입니다.
- 6
- 특정 주제에 대한 초당 총 가져오기 요청 속도(성공 및 실패)입니다.
- 7
- 특정 주제에 대한 초당 총 가져오기 요청 속도(성공 및 실패)입니다.
- 8
- 특정 파티션의 로그 크기(바이트)입니다.
- 9
- 특정 파티션의 로그 세그먼트 수입니다.
- 10
- 특정 파티션의 로그에 있는 마지막 메시지의 오프셋입니다.
- 11
- 특정 파티션의 로그에서 첫 번째 메시지의 오프셋
부록 A. 서브스크립션 사용 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka의 스트림은 소프트웨어 서브스크립션을 통해 제공됩니다. 서브스크립션을 관리하려면 Red Hat 고객 포털에서 계정에 액세스하십시오.
계정 액세스
- access.redhat.com 으로 이동합니다.
- 계정이 없는 경우 계정을 생성합니다.
- 계정에 로그인합니다.
서브스크립션 활성화
- access.redhat.com 으로 이동합니다.
- 내 서브스크립션 으로 이동합니다.
- 서브스크립션 활성화로 이동하여 16자리 활성화 번호를 입력합니다.
Zip 및 Tar 파일 다운로드
zip 또는 tar 파일에 액세스하려면 고객 포털을 사용하여 다운로드할 관련 파일을 찾습니다. RPM 패키지를 사용하는 경우 이 단계는 필요하지 않습니다.
- 브라우저를 열고 Red Hat Customer Portal 제품 다운로드 페이지에 access.redhat.com/downloads.
- INTEGRATION 및 AUTOMATION 카테고리에서 Apache Kafka에 대한 Streams for Apache Kafka 항목을 찾습니다.
- Apache Kafka 제품에 대해 원하는 Streams를 선택합니다. 소프트웨어 다운로드 페이지가 열립니다.
- 구성 요소에 대한 다운로드 링크를 클릭합니다.
DNF를 사용하여 패키지 설치
패키지 및 모든 패키지 종속 항목을 설치하려면 다음을 사용합니다.
dnf install <package_name>
dnf install <package_name>
로컬 디렉터리에서 이전에 다운로드한 패키지를 설치하려면 다음을 사용합니다.
dnf install <path_to_download_package>
dnf install <path_to_download_package>
2024-04-30에 최종 업데이트된 문서