Kafka에서 Pub/Sub Lite로 마이그레이션

이 문서는 자체 관리형 Apache Kafka에서 Pub/Sub Lite로 마이그레이션을 고려하려는 경우에 유용합니다.

Pub/Sub Lite 개요

Pub/Sub Lite는 저렴한 운영 비용을 위해 빌드된 대용량 메시지 서비스입니다. Pub/Sub Lite는 사전 프로비저닝된 용량과 함께 영역별, 리전별 스토리지를 제공합니다. Pub/Sub Lite 내에서 영역별 또는 리전별 라이트 주제를 선택할 수 있습니다. 리전별 라이트 주제는 Pub/Sub 주제와 동일한 가용성 SLA를 제공합니다. 그러나 Pub/Sub와 Pub/Sub Lite는 메시지 복제 측면에서 안정성에 차이가 있습니다.

Pub/Sub 및 Pub/Sub Lite에 대한 자세한 내용은 Pub/Sub란 무엇인가요?를 참조하세요.

라이트 지원 리전 및 영역에 대한 자세한 내용은 Pub/Sub Lite 위치를 참조하세요.

Pub/Sub Lite의 용어

다음은 Pub/Sub Lite의 몇 가지 주요 용어입니다.

  • 메시지. Pub/Sub Lite 서비스를 통해 이동하는 데이터

  • 주제. 메시지 피드를 나타내는, 이름이 지정된 리소스. Pub/Sub Lite 내에서는 영역 또는 리전 라이트 주제를 만들 수 있습니다. Pub/Sub Lite 리전 주제는 단일 리전의 두 영역에 데이터를 저장합니다. Pub/Sub Lite 영역 주제는 단일 영역 내에서만 데이터를 복제합니다.

  • 예약. 리전의 여러 라이트 주제에서 공유하는 이름이 지정된 처리량 용량 풀

  • 구독 특정 라이트 주제에서 메시지 수신 의향을 나타내는 이름이 지정된 리소스. 구독은 단일 주제에만 연결되는 Kafka의 소비자 그룹과 비슷합니다.

  • 구독자. 라이트 주제 및 지정된 구독에서 메시지를 수신하는 Pub/Sub Lite 클라이언트. 구독에는 여러 구독자 클라이언트가 있을 수 있습니다. 이러한 경우 메시지가 구독자 클라이언트 전체에서 부하 분산됩니다. Kafka에서는 구독자를 소비자라고 합니다.

  • 게시자. 메시지를 만들어 특정 라이트 주제로 전송(게시)하는 애플리케이션. 한 주제에 여러 게시자가 있을 수 있습니다. Kafka에서는 게시자를 제작자라고 합니다.

Kafka와 Pub/Sub Lite 간 차이점

Pub/Sub Lite는 개념적으로 Kafka와 비슷하지만, 데이터 수집에 중점을 둔 더 좁은 범위의 API를 사용하는 다른 시스템입니다. 이러한 차이가 스트림 수집 및 처리에서는 중요하지 않지만 이러한 차이가 중요한 몇 가지 구체적인 사용 사례가 있습니다.

데이터베이스로서의 Kafka

Kafka와 달리 Pub/Sub Lite는 현재 트랜잭션 게시 또는 로그 압축을 지원하지 않습니다. 단, 멱등성이 지원됩니다. 이러한 Kafka 기능은 메시징 시스템보다 Kafka를 데이터베이스로 사용하는 경우에 더 유용합니다. Kafka를 주로 데이터베이스로 사용하는 경우 자체 Kafka 클러스터를 실행하거나 Confluent Cloud와 같은 관리형 Kafka 솔루션을 사용하는 것이 좋습니다. 이러한 솔루션을 옵션으로 사용할 수 없는 경우 Cloud Spanner와 같이 수평으로 확장 가능한 데이터베이스를 사용할 수도 있습니다.

Kafka 스트림

Kafka Streams는 Kafka를 기반으로 빌드된 데이터 처리 시스템입니다. 소비자 클라이언트의 삽입을 허용하지만 모든 관리자 작업에 대한 액세스 권한이 필요합니다. Kafka Streams는 내부 메타데이터 저장을 위해 Kafka의 트랜잭션 데이터베이스 속성도 사용합니다. 따라서 현재 Pub/Sub Lite는 Kafka Streams 애플리케이션에 사용할 수 없습니다.

Apache Beam은 Kafka, Pub/Sub, Pub/Sub Lite와 통합된 유사한 스트리밍 데이터 처리 시스템입니다. Dataflow를 통해서나 기존 Apache FlinkApache Spark 클러스터에서 완전 관리형 방식으로 Beam 파이프라인을 실행할 수 있습니다.

모니터링

Kafka 클라이언트는 서버 측 측정항목을 읽을 수 있습니다. Pub/Sub Lite에서 게시자 및 구독자 동작과 관련된 측정항목은 추가 구성 없이 Cloud Monitoring을 통해 관리됩니다.

용량 관리

Kafka 주제의 용량은 클러스터 용량에 따라 결정됩니다. 복제, 키 압축, 일괄 설정은 Kafka 클러스터에서 특정 주제를 제공하는 데 필요한 용량을 결정합니다. Kafka 주제의 처리량은 브로커가 실행되는 머신의 용량에 따라 제한됩니다. 반면에 Pub/Sub Lite 주제의 경우 스토리지 및 처리량 용량을 모두 정의해야 합니다. Pub/Sub Lite 스토리지 용량은 주제의 구성 가능한 속성입니다. 처리량 용량은 구성된 예약의 용량 및 고유하거나 파티션당 구성된 한도를 기준으로 합니다.

인증 및 보안

Apache Kafka는 여러 개방형 인증 및 암호화 메커니즘을 지원합니다. Pub/Sub Lite를 사용하는 경우 인증은 IAM 시스템을 기반으로 합니다. 보안은 저장 데이터 암호화 및 전송 중인 데이터 암호화를 통해 보장됩니다. 이 문서의 뒷부분에 있는 마이그레이션 워크플로 섹션에서 Pub/Sub Lite 인증에 대한 자세한 내용을 알아보세요.

Kafka 속성을 Pub/Sub Lite 속성에 매핑

Kafka에는 주제 구조, 한도, 브로커 속성을 제어하는 여러 구성 옵션이 있습니다. 이 섹션에서는 데이터 수집에 유용한 몇 가지 일반적인 내용을 Pub/Sub Lite에서의 동일 옵션과 함께 설명합니다. Pub/Sub Lite는 관리형 시스템이므로 많은 브로커 속성을 고려할 필요가 없습니다.

주제 구성 속성

Kafka 속성 Pub/Sub Lite 속성 설명
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="dV7DQA4y7L7qKMxOHGc8kmZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfqProEiKpRjlB87eKAtLChinJJVZe4MddwFRESYOiHj80=">retention.bytes </aclass="external"> 파티션당 저장용량 라이트 주제의 모든 파티션은 동일하게 구성된 스토리지 용량을 갖습니다. 라이트 주제의 총 스토리지 용량은 해당 주제에서 총 파티션의 스토리지 용량 합계입니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="QnWVoAipx5CRcevnGcXwAGZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfqProEiKpRjlB87eKAtLChis7tgVJs7v0+f6/z72IBgl0=">retention.ms </aclass="external"> 메시지 보관 기간 라이트 주제가 메시지를 저장하는 최대 기간입니다. 메시지 보관 기간을 지정하지 않으면 스토리지 용량을 초과할 때까지 라이트 주제에 메시지가 저장됩니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="1EnWqBFYsbXCkJvluoFZHWZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfqabn4RbnazUIXATmdGtrPyqrz+M3RfOj6o9TWwqB6UaE=">flush.ms, <aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="D8tZ+YryF011zrRlSlCouGZb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKEN/weLnW8ody8JZUs0+mzHw==">acks </aclass="external"></aclass="external"> Pub/Sub Lite에서 구성할 수 없음 복제 스토리지에 유지되는 것이 확정될 때까지 게시 내용이 확인되지 않습니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="w2C6ltfFLx0WhPQQ+xq7GmZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfq+EJHRL9vqmxrEWQgG1UleYQ3+ziPJbJIEqItRIDSEGQ=">max.message.bytes </aclass="external"> Pub/Sub Lite에서 구성할 수 없음 Pub/Sub Lite에 전송할 수 있는 최대 메시지 크기는 3.5MiB입니다. 메시지 크기는 반복 가능한 방식으로 계산됩니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="uByJEasoVxsHiHGi2vZFpWZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfqQgNEpY+vqWEChVRJLLgf+Nbws6STZxXZA3AjaBgIpr4=">message.timestamp.type </aclass="external"> Pub/Sub Lite에서 구성할 수 없음 소비자 구현을 사용할 때, 이벤트 타임스탬프는 존재할 때 선택되거나 게시 타임스탬프가 대신 사용됩니다. Beam을 사용하면 게시 타임스탬프와 이벤트 타임스탬프를 모두 사용할 수 있습니다.

라이트 주제 속성에 대한 자세한 내용은 라이트 주제의 속성을 참조하세요.

제작자 구성 속성

Pub/Sub Lite는 제작자 유선 프로토콜을 지원합니다. 일부 속성은 제작자 Cloud 클라이언트 라이브러리의 동작을 변경합니다. 다음 표에 일반적인 속성에 대해 설명되어 있습니다.

Kafka 속성 Pub/Sub Lite 속성 설명
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="ka6ek6z5j1AUV6h0GyHmOWZb6gHWkZLxLSo7Ja3t8sRw5UOg9XUG3SbKp/CA/UGEa9PU2/IZ1QB5PzPEKwJwii23M7pePF8367yuVtiwSCgqumajQ5CIdQL0uKISUd+2">auto.create.topics.enable </aclass="external"> Pub/Sub Lite에서 구성할 수 없음 Pub/Sub Lite의 단일 주제에 대한 소비자 그룹과 거의 동일한 주제 및 구독을 만듭니다. 콘솔, gcloud CLI, API 또는 Cloud 클라이언트 라이브러리를 사용할 수 있습니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="w2C6ltfFLx0WhPQQ+xq7GmZb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKEX+jyP6Bz5/wh8WHRaM+1VDjc6rJHP+OLVS8WtNmcQtc=">key.serializer, <aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="pSX6SpdSWGS3KbkuJBUem2Zb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKESqwlEsmDjQNe631xyd/OBEmINreu72SEhtSVBm5Rw0w=">value.serializer </aclass="external"></aclass="external"> Pub/Sub Lite에서 구성할 수 없음

유선 프로토콜을 사용하여 Kafka 제작자 또는 동등한 라이브러리 통신을 사용할 때 필요합니다.

<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="/nUcmkQCz7NdVnO/fs/U8WZb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKEp3gb5Htxs2OZOSLAVFokTJHSiK/dsgG9NhPtFx1kAW8=">batch.size </aclass="external"> Pub/Sub Lite에서 지원됨 일괄 처리가 지원됩니다. 최적의 성능을 위해 이 값에 권장되는 값은 10MiB입니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="QnWVoAipx5CRcevnGcXwAGZb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKE5j8zTzynZ+3TyWdN4ior8uAuE8JMvyLpVzWxDJ8mdak=">linger.ms </aclass="external"> Pub/Sub Lite에서 지원됨 일괄 처리가 지원됩니다. 최적의 성능을 위해 이 값의 권장 값은 50ms입니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="pSX6SpdSWGS3KbkuJBUem2Zb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKEj7ilyCdDp4ecsK36QQ4uhQDXcklDhZxjwV3LA3JE6Ds=">max.request.size </aclass="external"> Pub/Sub Lite에서 지원됨 서버는 배치당 20MiB의 한도를 적용합니다. Kafka 클라이언트에서는 이 값을 20MiB 미만으로 설정합니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="9mE3X9aIpBVps4x1lRMwdGZb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKE8lAxDO6sfSpMmM8Pg2RTBboAuzIbyLjMx0U1d0C7yvo=">enable.idempotence </aclass="external"> Pub/Sub Lite에서 지원됨
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="pSX6SpdSWGS3KbkuJBUem2Zb6gHWkZLxLSo7Ja3t8sRqk6OxyqMTCHV662ootwKEufyeVlB0ORvuIlCupIX+AqOrJcy9AO52Q6rW+KM5+Uw=">compression.type </aclass="external"> Pub/Sub Lite에서 지원되지 않음 이 값을 none로 명시적으로 설정해야 합니다.

소비자 구성 속성

Pub/Sub Lite는 소비자 유선 프로토콜을 지원합니다. 일부 속성은 소비자 Cloud 클라이언트 라이브러리의 동작을 변경합니다. 다음 표에 일반적인 속성에 대해 설명되어 있습니다.

Kafka 속성 설명
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="pSX6SpdSWGS3KbkuJBUem2Zb6gHWkZLxLSo7Ja3t8sQyhicHhp9oG2sYdjqrOOFMesHcoabWpmRWc4QGiNw/Nt3N4FAWfkLBFxu1XIPZ/mc=">key.deserializer, <aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="9mE3X9aIpBVps4x1lRMwdGZb6gHWkZLxLSo7Ja3t8sQyhicHhp9oG2sYdjqrOOFMOo1Ck57YWd7phlgbFg6bnNPnjld49QCIfr57dmq9W6Y=">value.deserializer </aclass="external"></aclass="external">

유선 프로토콜을 사용하여 Kafka 소비자 또는 동등한 라이브러리 통신을 사용할 때 필요합니다.

<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="6Yq99Si1ofpPBF++wTnR6WZb6gHWkZLxLSo7Ja3t8sQyhicHhp9oG2sYdjqrOOFMukQRfA+0/fiRFxWe1F7rREaszCrdgu3LDJfajV9VYJw=">auto.offset.reset </aclass="external"> 이 구성은 지원되지 않거나 필요하지 않습니다. 구독은 만들어진 후 정의된 오프셋 위치를 갖습니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="uByJEasoVxsHiHGi2vZFpWZb6gHWkZLxLSo7Ja3t8sQHgM1RbUvT8FDCmfNOUyfqQgNEpY+vqWEChVRJLLgf+Nbws6STZxXZA3AjaBgIpr4=">message.timestamp.type </aclass="external"> 게시 타임스탬프는 항상 Pub/Sub Lite에서 사용할 수 있으며 파티션별로 감소하지 않도록 보장됩니다. 이벤트 타임스탬프는 게시 시 메시지에 첨부되었는지 여부에 따라 존재하거나 존재하지 않을 수 있습니다. Dataflow를 사용하면 게시 타임스탬프와 이벤트 타임스탬프를 동시에 사용할 수 있습니다.
<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="C1w6rZRsJ3qdhnqUpePxxmZb6gHWkZLxLSo7Ja3t8sQyhicHhp9oG2sYdjqrOOFMUP9pWM0gsH8dBz8z/Znyl06tJetNspNa7O8sf20qNfcwoG4LrkKWpCzFW/9ML1dc">max.partition.fetch.bytes, <aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="pSX6SpdSWGS3KbkuJBUem2Zb6gHWkZLxLSo7Ja3t8sQyhicHhp9oG2sYdjqrOOFMUP9pWM0gsH8dBz8z/Znyl4gSgXAmfEcOnKjDPqz24u4=">max.poll.records </aclass="external"></aclass="external"> Poll() 호출에서 반환된 레코드 및 바이트 수와 내부 가져오기 요청에서 반환된 바이트 수에 대한 소프트 제한을 적용합니다. `max.partition.fetch.bytes`의 기본값인 1MiB는 클라이언트의 처리량을 제한할 수 있습니다. 이 값을 늘리는 것이 좋습니다.

Kafka 및 Pub/Sub Lite 기능 비교

다음 표에서는 Apache Kafka 기능을 Pub/Sub Lite 기능과 비교합니다.

기능 Kafka Pub/Sub Lite
메시지 순서
메시지 중복 삭제 예, Dataflow 사용
push 구독 아니요 예, Pub/Sub 내보내기 사용
트랜잭션 아니요
메시지 스토리지 사용 가능한 머신 저장용량으로 제한됨 무제한
메시지 재생
로그 기록 및 모니터링 자체 관리형 Cloud Monitoring을 통해 자동화됨
스트림 처리 예(Kafka Streams, Apache Beam 또는 Dataproc의 경우) 예(Beam 또는 Dataproc의 경우)

다음 표에서는 Kafka를 사용해 자체 호스팅되는 기능과 Pub/Sub Lite를 사용하여 Google에서 관리되는 기능을 비교합니다.

기능 Kafka Pub/Sub Lite
사용 가능 여부 Kafka를 추가 위치에 수동으로 배포 전 세계에 배포됨. 위치를 참조하세요.
재해 복구 자체 백업 및 복제를 설계 및 유지보수 Google에서 관리하는 설정
인프라 관리 가상 머신(VM) 또는 머신을 수동으로 배포 및 운영 일관된 버전 관리 및 패치 유지 Google에서 관리하는 설정
용량 계획 사전에 수동으로 스토리지 및 컴퓨팅 요구사항 계획 Google에서 관리하는 설정. 언제든지 컴퓨팅과 스토리지를 늘릴 수 있습니다.
지원 없음 24시간 대기 중인 직원과 지원 서비스

Kafka 및 Pub/Sub Lite 비용 비교

Pub/Sub Lite에서 비용을 예측하고 관리하는 방법은 Kafka와 다릅니다. 온프레미스 또는 클라우드의 Kafka 클러스터 비용에는 머신, 디스크, 네트워킹, 인바운드 메시지, 아웃바운드 메시지의 비용이 포함됩니다. 또한 이러한 시스템 및 관련 인프라를 관리 및 유지관리하기 위한 오버헤드 비용도 포함됩니다. Kafka 클러스터를 관리할 때는 머신을 수동으로 업그레이드하고, 클러스터 용량을 계획하고, 광범위한 계획과 테스트를 포함하는 재해 복구를 구현해야 합니다. 실제적인 총소유비용(TCO)을 확인하려면 이러한 모든 다양한 비용을 집계해야 합니다.

Pub/Sub Lite 가격에는 예약 비용(게시된 바이트, 구독 바이트, Kafka 프록시에서 처리된 바이트), 프로비저닝된 스토리지 비용이 포함됩니다. 아웃바운드 메시지 요금 외에 예약된 리소스에 대해 정확히 비용을 지불합니다. 가격 계산기를 사용하여 예상 비용을 산출할 수 있습니다.

마이그레이션 워크플로

주제를 Kafka 클러스터에서 Pub/Sub Lite로 마이그레이션하려면 다음 안내를 따르세요.

Pub/Sub Lite 리소스 구성

  1. 마이그레이션하는 모든 주제의 예상 처리량에 대한 Pub/Sub Lite 예약을 만듭니다.

    Pub/Sub Lite 가격 계산기를 사용하여 기존 Kafka 주제의 집계 처리량 측정항목을 계산합니다. 예약 만들기 방법에 대한 자세한 내용은 라이트 예약 만들기 및 관리를 참조하세요.

  2. Kafka의 각 해당 주제에 대해 하나의 Pub/Sub Lite 주제를 만듭니다.

    라이트 주제를 만드는 방법에 대한 자세한 내용은 라이트 주제 만들기 및 관리를 참조하세요.

  3. Kafka 클러스터의 각 해당 소비자 그룹 및 주제 쌍에 대해 하나의 Pub/Sub Lite 구독을 만듭니다.

    예를 들어 topic-atopic-b에서 소비하는 consumers 이름의 소비자 그룹의 경우, topic-a에 연결된 consumers-a 구독과 topic-b에 연결된 consumers-b 구독을 만들어야 합니다. 구독을 만드는 방법에 대한 자세한 내용은 라이트 구독 만들기 및 관리를 참조하세요.

Pub/Sub Lite에 인증

Kafka 클라이언트 유형에 따라 다음 방법 중 하나를 선택합니다.

자바 기반 Kafka 클라이언트 버전 3.1.0 이상(재빌드)

Kafka 클라이언트를 실행하는 인스턴스에서 재빌드할 수 있는 버전 3.1.0 이상의 자바 기반 Kafka 클라이언트의 경우:

  1. com.google.cloud:pubsublite-kafka-auth 패키지를 설치합니다.

  2. com.google.cloud.pubsublite.kafka.ClientParameters.getParams를 통해 Pub/Sub Lite에 인증하는 데 필요한 매개변수를 가져옵니다.

    getParams() 방법(코드 샘플 참조)이 다음 JAASSASL 구성을 Pub/Sub Lite에 인증하기 위한 매개변수로 초기화합니다.

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

버전 3.1.0 이상을 실행하는 자바 기반 Kafka 클라이언트(재빌드 없음)

KIP-768을 지원하는 Kafka 클라이언트의 경우 Python 사이드카 스크립트를 사용하는 구성 전용 OAUTHBEARER 인증을 지원합니다. 이러한 버전에는 2022년 1월 자바 버전 3.1.0 이상이 포함됩니다.

Kafka 클라이언트를 실행하는 인스턴스에서 다음 단계를 수행합니다.

  1. Python 3.6 이상을 설치합니다.

    Python 설치를 참조하세요.

  2. Google 인증 패키지를 설치합니다. pip install google-auth

    이 라이브러리는 Google API에 액세스하기 위한 다양한 서버 대 서버 인증 메커니즘을 단순화합니다. google-auth 페이지를 참조하세요.

  3. kafka_gcp_credentials.py 스크립트를 실행합니다.

    이 스크립트는 로컬 HTTP 서버를 시작하고 google.auth.default()를 사용하여 환경에 기본 Google Cloud 사용자 인증 정보를 가져옵니다.

    가져온 사용자 인증 정보의 주 구성원은 사용 중인 Google Cloud 프로젝트와 연결하려는 위치에 대한 pubsublite.locations.openKafkaStream 권한이 있어야 합니다. Pub/Sub 라이트 게시자(roles/pubsublite.publisher) 및 Pub/Sub 라이트 구독자(roles/pubsublite.subscriber) 역할에는 필요한 권한이 있습니다. 이러한 역할을 주 구성원에 추가합니다.

    사용자 인증 정보는 Kafka 클라이언트의 SASL/OAUTHBEARER 인증에 사용됩니다.

    Kafka 클라이언트에서 Pub/Sub Lite를 인증하기 위해서는 속성에 다음 매개변수가 필요합니다.

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    PROJECT_ID를 Pub/Sub Lite를 실행하는 프로젝트의 ID로 바꿉니다.

다른 모든 클라이언트(재빌드 없음)

다른 모든 클라이언트에 대해 다음 단계를 수행합니다.

  1. 클라이언트에 사용할 서비스 계정의 서비스 계정 키 JSON 파일을 다운로드합니다.

  2. 인증 문자열로 사용할 base64-encode를 사용하여 서비스 계정 파일을 인코딩합니다.

    Linux 또는 macOS 시스템에서는 다음과 같이 base64 명령어(기본적으로 설치되는 경우가 많음)를 사용할 수 있습니다.

    base64 < my_service_account.json > password.txt
    

    다음 매개변수를 사용하여 인증에 비밀번호 파일의 콘텐츠를 사용할 수 있습니다.

    자바

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    PROJECT_ID를 Pub/Sub를 실행하는 프로젝트의 ID로 바꿉니다.

    librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    PROJECT_ID를 Pub/Sub를 실행하는 프로젝트의 ID로 바꿉니다.

Kafka Connect를 사용하여 데이터 클론하기

Pub/Sub Lite팀은 Kafka Connect Sink의 구현을 유지관리합니다. Kafka Connect 클러스터를 사용하여 Kafka 주제에서 Pub/Sub Lite 주제로 데이터를 복사하도록 이 구현을 구성할 수 있습니다.

데이터 복사를 수행하도록 커넥터를 구성하려면 Pub/Sub Group Kafka Connector를 참조하세요.

파티션 어피니티가 마이그레이션 프로세스의 영향을 받지 않도록 하려면 kafka 주제 및 Pub/Sub Lite 주제의 파티션 수가 동일하고 pubsublite.ordering.mode 속성이 KAFKA로 설정되어 있어야 합니다. 이렇게 하면 커넥터가 원래 게시된 kafka 파티션과 동일한 색인을 통해 Pub/Sub Lite 파티션으로 메시지를 라우팅합니다.

소비자 마이그레이션

Pub/Sub Lite의 리소스 모델은 Kafka와 다릅니다. 특히 소비자 그룹과 달리 구독은 명시적인 리소스이며 정확히 하나의 주제와 연결됩니다. 이러한 차이로 인해 topic을 전달해야 하는 Kafka Consumer API의 모든 위치는 대신 전체 구독 경로를 전달해야 합니다.

Kafka 클라이언트에 대한 SASL 구성 외에도 Kafka Consumer API를 사용하여 Pub/Sub Lite와 상호 작용할 때 다음 설정이 필요합니다.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

REGION을 Pub/Sub Lite 구독이 있는 리전으로 바꿉니다.

주어진 구독에 대한 첫 번째 Pub/Sub Lite 소비자 작업을 시작하기 전에 관리자 탐색 작업을 시작(대기하지 않음)하여 소비자의 초기 위치를 설정할 수 있습니다.

소비자를 시작하면 메시지 백로그의 현재 오프셋에 다시 연결됩니다. 동작을 확인하는 데 시간이 걸리는 한 이전 클라이언트와 새 클라이언트를 모두 동시에 실행한 다음 이전 소비자 클라이언트를 종료합니다.

제작자 마이그레이션

Kafka 클라이언트의 SASL 구성 외에도 Kafka Producer API를 사용하여 Pub/Sub Lite와 상호작용할 때 다음 사항이 제작자 매개변수로 필요합니다.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

REGION을 Pub/Sub Lite 주제가 있는 리전으로 바꿉니다.

Pub/Sub Lite에서 읽을 주제의 모든 소비자를 마이그레이션한 후 Pub/Sub Lite에 직접 쓰도록 프로듀서 트래픽을 이동합니다.

제작자 클라이언트가 Kafka 주제 대신 Pub/Sub Lite 주제에 쓰도록 점진적으로 마이그레이션합니다.

제작자 클라이언트를 다시 시작하여 새 구성을 적용합니다.

Kafka Connect 종료

Pub/Sub Lite에 직접 쓰도록 제작자를 모두 마이그레이션하면 커넥터가 더 이상 데이터를 복사하지 않습니다.

Kafka Connect 인스턴스를 종료할 수 있습니다.

Kafka 연결 문제 해결

Kafka 클라이언트는 맞춤형 유선 프로토콜을 통해 통신하므로 모든 요청의 실패에 대한 오류 메시지를 제공할 수 없습니다. 메시지의 일부로 전송된 오류 코드를 사용합니다.

org.apache.kafka 프리픽스의 로깅 수준을 FINEST로 설정하여 클라이언트에서 발생하는 오류에 대한 자세한 내용을 확인할 수 있습니다.

낮은 처리량 및 증가하는 백로그

처리량이 낮고 백로그가 증가하는 이유는 다양합니다. 한 가지 이유는 용량 부족일 수 있습니다.

주제 수준에서 또는 예약을 사용하여 처리량 용량을 구성할 수 있습니다. 구독 및 게시를 위한 처리량 용량이 부족하게 구성되면 구독 및 게시에 해당하는 처리량이 제한됩니다.

이러한 처리량 오류는 게시자의 topic/flow_control_status 측정항목과 구독자의 subscription/flow_control_status 측정항목에 의해 표시됩니다. 측정항목은 다음 상태를 제공합니다.

  • NO_PARTITION_CAPACITY: 이 메시지는 파티션당 처리량 한도에 도달했음을 나타냅니다.

  • NO_RESERVATION_CAPACITY: 이 메시지는 예약당 처리량 한도에 도달했음을 나타냅니다.

주제나 예약 게시 및 구독 할당량에 대한 사용률 그래프를 보고 사용률이 100% 또는 거의 근접했는지 확인할 수 있습니다.

이 문제를 해결하려면 주제 또는 예약의 처리량 용량을 늘립니다.

주제 승인 실패 오류 메시지

Kafka API를 사용하여 게시하려면 라이트 서비스 에이전트에 Pub/Sub Lite 주제에 게시할 수 있는 적절한 권한이 있어야 합니다.

Pub/Sub Lite 주제에 게시할 적절한 권한이 없으면 클라이언트에 TOPIC_AUTHORIZATION_FAILED 오류가 발생합니다.

이 문제를 해결하려면 프로젝트의 라이트 서비스 에이전트가 인증 구성에 전달되었는지 확인합니다.

잘못된 주제 오류 메시지

Kafka API를 사용하여 구독하려면 Kafka Consumer API에서 topic이 예상되는 모든 위치의 전체 구독 경로를 전달해야 합니다.

올바른 형식의 구독 경로를 전달하지 않으면 소비자 클라이언트에서 INVALID_TOPIC_EXCEPTION 오류가 발생합니다.

예약을 사용하지 않는 경우의 잘못된 요청

kafka 유선 프로토콜 지원을 사용하려면 모든 주제에 사용 요금 청구를 위한 예약이 연결되어 있어야 합니다.