Apache Kafka용 Azure Event Hubs란?
이 문서에서는 Azure Event Hubs를 사용하여 Kafka 클러스터를 직접 설정하지 않고 Apache Kafka 애플리케이션에서 데이터를 스트리밍하는 방법을 설명합니다.
개요
Azure Event Hubs는 사용자가 Kafka 프로토콜을 사용하여 이벤트 허브에 연결할 수 있도록 하는 이벤트 허브에 Apache Kafka 엔드포인트를 제공합니다. 코드 변경 없이 애플리케이션에서 이벤트 허브의 Kafka 엔드포인트를 사용할 수 있는 경우가 많습니다. 구성만 수정합니다. 즉, Kafka 클러스터를 가리키는 대신 이벤트 허브에서 노출된 Kafka 엔드포인트를 가리키도록 구성에서 연결 문자열을 업데이트합니다. 그런 다음, Kafka 프로토콜을 사용하는 애플리케이션에서 Kafka 항목에 해당하는 이벤트 허브로 이벤트 스트리밍을 시작할 수 있습니다.
Apache Kafka 애플리케이션을 Azure Event Hubs로 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.
참고 항목
- 이 기능은 표준, 프리미엄 및 전용 계층에서만 지원됩니다.
- Apache Kafka 에코시스템용 Event Hubs는 Apache Kafka 버전 1.0 이상을 지원합니다.
Apache Kafka 및 Azure Event Hubs 개념적 매핑
개념적으로 Apache Kafka 및 Event Hubs는 매우 유사합니다. 둘 다 스트리밍 데이터용으로 빌드된 분할 로그이며, 클라이언트는 보관된 로그에서 읽을 부분을 제어합니다. 다음 표에서는 Apache Kafka와 Event Hubs 간의 개념을 매핑합니다.
Apache Kafka 개념 | Event Hubs 클러스터 |
---|---|
클러스터 | 네임스페이스 |
항목 | 이벤트 허브 |
파티션 | 파티션 |
소비자 그룹 | 소비자 그룹 |
Offset | Offset |
Azure Event Hubs에서 지원되는 Apache Kafka 기능
Kafka 스트림
Kafka Streams는 Apache Kafka 오픈 소스 프로젝트의 일부이지만 Apache Kafka 이벤트 브로커와는 별개인 스트림 분석용 클라이언트 라이브러리입니다.
참고 항목
Kafka Streams는 현재 프리미엄 및 전용 계층에서 공개 미리 보기로 제공됩니다.
Azure Event Hubs는 Kafka Streams 클라이언트 라이브러리를 지원하며 여기에서 사용할 수 있는 세부 정보 및 개념을 제공합니다.
Azure Event Hubs 고객이 Kafka Streams 지원을 요청하는 가장 일반적인 이유는 Confluent의 "ksqlDB" 제품에 관심이 있기 때문입니다. "ksqlDB"는 "서비스 제공 소프트웨어, 서비스 제공 플랫폼, 서비스 제공 인프라 또는 Confluent 제품이나 서비스와 경쟁하는 기타 유사한 온라인 서비스를 제공"하는 공급업체가 "ksqlDB" 지원을 사용하거나 제공할 수 없도록 사용이 허가된 독점 공유 원본 프로젝트입니다. 실제로 ksqlDB를 사용하는 경우 Kafka를 직접 운영하거나 Confluent의 클라우드 제품을 사용해야합니다. 라이선스 조건은 라이선스에서 제외된 목적으로 서비스를 제공하는 Azure 고객에게도 영향을 줄 수 있습니다.
독립 실행형이며 ksqlDB가 없는 Kafka Streams는 많은 대체 프레임워크와 서비스보다 기능이 적으며 대부분은 기본 제공 스트리밍 SQL 인터페이스가 있으며 현재 모두 Azure Event Hubs와 통합됩니다.
- Azure Stream Analytics
- Azure Synapse Analytics(Event Hubs 캡처를 통해)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Azure Kubernetes Service의 HDInsight의 Apache Flink
- Akka Streams
Kafka 트랜잭션
참고 항목
Kafka 트랜잭션은 현재 프리미엄 및 전용 계층에서 공개 미리 보기로 제공됩니다.
Azure Event Hubs는 Kafka 트랜잭션을 지원합니다. 지원 및 개념에 대한 자세한 내용은 여기를 참조하세요 .
압축
참고 항목
Event Hubs에 대한 Kafka 압축은 현재 프리미엄 및 전담 계층에서만 지원됩니다.
Apache Kafka 클라이언트의 클라이언트 쪽 압축 기능은 생성자 쪽에서 여러 메시지 일괄 처리를 단일 메시지로 압축하고 소비자 쪽에서 일괄 처리 압축을 풀어 컴퓨팅 리소스와 대역폭을 절약합니다. Apache Kafka 브로커는 배치를 특수 메시지로 처리합니다.
Kafka 생산자 애플리케이션 개발자는 압축.형식 속성을 설정하여 메시지 압축을 사용하도록 설정할 수 있습니다. Azure Event Hubs는 현재 gzip
압축을 지원합니다.
Compression.type = none | gzip
이 기능은 Apache Kafka 트래픽 생산자 및 소비자 트래픽에 대해서만 지원되지만 AMQP 소비자는 압축된 Kafka 트래픽을 압축된 메시지로 사용할 수 있습니다.
Apache Kafka와 Azure Event Hubs의 주요 차이점
Apache Kafka는 일반적으로 설치 및 운영에 필요한 소프트웨어이지만 Event Hubs는 완전 관리형 클라우드 네이티브 서비스입니다. 관리하고 모니터링할 서버, 디스크 또는 네트워크가 없으며 고려하거나 구성할 브로커가 없습니다. 정규화된 도메인 이름의 엔드포인트인 네임스페이스를 만든 다음, 해당 네임스페이스 내에 Event Hubs(토픽)를 만듭니다.
Event Hubs 및 네임스페이스에 대한 자세한 내용은 Event Hubs 기능을 참조하세요. 클라우드 서비스로서 Event Hubs는 안정적인 단일 가상 IP 주소를 엔드포인트로 사용하므로 클라이언트는 클러스터 내에서 브로커 또는 컴퓨터에 대해 알 필요가 없습니다. Event Hubs가 동일한 프로토콜을 구현하더라도 이 차이점은 모든 파티션에 대한 모든 Kafka 트래픽이 클러스터의 모든 브로커에 대한 방화벽 액세스를 요구하지 않고 이 하나의 엔드포인트를 통해 예측 가능하게 라우팅됨을 의미합니다.
Event Hubs 규모는 구매한 처리량 단위(TU) 또는 처리 단위 수에 따라 제어됩니다. 표준 계층 네임스페이스에 대해 자동 확장 기능을 사용하도록 설정하는 경우 처리량 제한에 도달하면 Event Hubs가 자동으로 TU를 확장합니다. 이 기능은 Apache Kafka 프로토콜 지원에서도 작동합니다. 프리미어 계층 네임스페이스의 경우 네임스페이스에 할당된 처리 단위 수를 늘릴 수 있습니다.
Apache Kafka가 워크로드에 적합한 솔루션인가요?
Apache Kafka를 사용하여 애플리케이션을 빌드할 때 Azure Event Hubs가 Azure Service Bus 및 Azure Event Grid를 포함하는 서비스 집합의 일부임을 이해하는 것도 유용합니다.
Apache Kafka의 일부 상용 배포 공급자는 Apache Kafka가 모든 메시징 플랫폼 요구 사항을 위한 원 스톱 상점이라고 할 수 있지만, 실제로 Apache Kafka는 경쟁 소비자 큐 패턴을 구현하지 않고, 구독자가 일반 오프셋 이외의 서버 평가 규칙을 기반으로 수신 메시지에 액세스할 수 있도록 허용하는 수준에서 게시-구독을 지원하지 않으며, 메시지에 의해 시작된 작업의 수명 주기를 추적하거나 잘못된 메시지를 배달 실패 메시지 큐로 분류하는 기능이 없습니다. 이들 모두 많은 엔터프라이즈 메시징 시나리오의 기본입니다.
패턴 간 차이점과 어느 서비스에서 어느 패턴을 가장 잘 다루는지 이해하려면 Azure의 비동기 메시징 옵션 참고 자료를 참조하세요. Apache Kafka 사용자는 지금까지 Kafka로 실현한 통신 경로를 훨씬 적은 기본 복잡성과 Event Grid 또는 Service Bus를 사용하는 더 강력한 기능으로 실현할 수 있습니다.
Apache Kafka용 Event Hubs 인터페이스를 통해 사용할 수 없는 Apache Kafka의 특정 기능이 필요하거나 구현 패턴이 Event Hubs 할당량을 초과하는 경우 Azure HDInsight에서 네이티브 Apache Kafka 클러스터를 실행할 수도 있습니다.
보안 및 인증
Kafka용 Event Hubs에서 이벤트를 게시하거나 이용할 때마다 클라이언트가 Event Hubs 리소스에 액세스하려고 합니다. 권한이 부여된 엔터티를 사용하여 리소스에 액세스할 수 있는지 확인하려고 합니다. 클라이언트에서 Apache Kafka 프로토콜을 사용하는 경우 SASL 메커니즘을 사용하여 인증 및 암호화에 대한 구성을 설정할 수 있습니다. Kafka에 Event Hubs를 사용하려면 TLS 암호화가 필요합니다(Event Hubs 전송 중인 모든 데이터는 TLS 암호화됨). 구성 파일에서 SASL_SSL 옵션을 지정하여 수행할 수 있습니다.
Azure Event Hubs는 보안 리소스에 대한 액세스 권한을 부여하는 여러 옵션을 제공합니다.
- OAuth 2.0
- 공유 액세스 서명(SAS)
OAuth 2.0
Event Hubs는 OAuth 2.0 호환 중앙 권한 부여 서버를 제공하는 Microsoft Entra ID와 통합됩니다. Microsoft Entra ID를 사용하면 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 클라이언트 ID에 세분화된 권한을 부여할 수 있습니다. 프로토콜에 대해 SASL_SSL을 지정하고 메커니즘에 대해 OAUTHBEARER를 지정하여 Kafka 클라이언트에서 이 기능을 사용할 수 있습니다. 액세스 범위 지정을 위한 Azure 역할 및 수준에 대한 자세한 내용은 Microsoft Entra ID로 액세스 권한 부여을 참조하세요.
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler
참고 항목
이러한 구성 속성은 Java 프로그래밍 언어용입니다. 다양한 프로그래밍 언어를 사용하여 Kafka용 Event Hubs에서 OAuth를 사용하는 방법을 보여주는 샘플은 GitHub의 샘플을 참조하세요.
공유 액세스 서명(SAS)
Event Hubs는 Kafka용 Event Hubs 리소스에 대한 위임된 액세스를 위해 SAS(공유 액세스 서명)도 제공합니다. OAuth 2.0 토큰 기반 메커니즘을 사용하여 액세스 권한을 부여하면 SAS보다 뛰어난 보안과 사용 편의성이 제공됩니다. 기본 제공 역할을 사용하면 사용자가 유지 및 관리해야 하는 ACL 기반 권한 부여도 필요 없습니다. 프로토콜에 대해 SASL_SSL을 지정하고 메커니즘에 대해 PLAIN을 지정하여 Kafka 클라이언트에서 이 기능을 사용할 수 있습니다.
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
Important
{YOUR.EVENTHUBS.CONNECTION.STRING}
을 Event Hubs 네임스페이스의 연결 문자열로 바꿉니다. 연결 문자열을 가져오는 방법에 대한 지침은 Event Hubs 연결 문자열 가져오기를 참조하세요. sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";
구성의 예는 다음과 같습니다.
참고 항목
Kafka 클라이언트에서 SAS 인증을 사용하는 경우 SAS 키가 다시 생성될 때 설정된 연결이 끊어지지 않습니다.
참고 항목
Apache Kafka 엔드포인트용 Event Hubs를 사용할 때 생성된 공유 액세스 서명 토큰은 지원되지 않습니다.
샘플
이벤트 허브를 만들고 SAS 또는 OAuth를 사용하여 액세스하는 단계별 지침이 포함된 자습서는 빠른 시작: Kafka 프로토콜을 사용하여 Event Hubs로 데이터 스트리밍을 참조하세요.
기타 Azure Event Hubs 기능
Apache Kafka용 Event Hubs 기능은 HTTP 및 AMQP와 함께 Azure Event Hubs에서 동시에 사용할 수 있는 세 가지 프로토콜 중 하나입니다. 현재 Apache Kafka 생산자가 Apache Kafka를 통해 계속 게시할 수 있도록 이러한 프로토콜 중 하나로 쓰고 다른 프로토콜로 읽을 수 있지만 읽기 권한자는 Azure Stream Analytics 또는 Azure Functions와 같은 Event Hubs의 AMQP 인터페이스와 기본 통합의 이점을 제공합니다. 반대로 Azure Event Hubs를 대상 엔드포인트로 AMQP 라우팅 네트워크에 쉽게 통합할 수 있지만 Apache Kafka 통합을 통해 데이터를 읽을 수 있습니다.
또한 Azure Blob Storage와 Azure Data Lake Storage를 통해 매우 비용 효율적인 장기 보관을 가능하게 하는 캡처와 같은 Event Hubs 기능과 지리적 재해 복구는 Kafka용 Event Hubs 기능에서도 작동합니다.
멱등성
Apache Kafka용 Azure Event Hubs는 멱등 생산자와 멱등 소비자를 모두 지원합니다.
Azure Event Hubs의 핵심 원칙 중 하나는 한 번 이상 전달이라는 개념입니다. 이 방법을 사용하면 이벤트가 항상 배달됩니다. 또한 함수와 같은 소비자가 이벤트를 두 번 이상, 심지어 반복적으로 받을 수 있음을 의미합니다. 이러한 이유로 소비자가 멱등(idempotent) 소비자 패턴을 지원하는 것이 중요합니다.
관련 콘텐츠
이 문서는 Kafka용 Event Hubs에 대한 소개를 제공합니다. 자세한 내용은 Azure Event Hubs용 Apache Kafka 개발자 가이드를 참조하세요.
이벤트 허브를 만들고 SAS 또는 OAuth를 사용하여 액세스하는 단계별 지침이 포함된 자습서는 빠른 시작: Kafka 프로토콜을 사용하여 Event Hubs로 데이터 스트리밍을 참조하세요.
또한 GitHub의 OAuth 샘플을 참조하세요.