Kafka API 사용
Kafka에서는 다양한 언어로 풍부한 API 및 클라이언트 세트를 제공합니다. API에는 코어 API, Streams API및 Connect API가 포함됩니다.
- Kafka 의 핵심 API(소비자, 생산자 및 관리자 API)
하나 이상의 Kafka 주제에서 직접 메시지를 보내고 받는 데 사용합니다. Kafka Admin 클라이언트는 Kafka 리소스 관리를 위해 Kafka API를 통한 단순 인터페이스를 제공합니다. 주제를 작성, 삭제 및 관리할 수 있습니다. 또한 Admin 클라이언트를 사용하여 이용자 그룹 및 구성을 관리할 수도 있습니다. - 스트림 API
주제 간 이벤트를 쉽게 소비, 변환, 생성할 수 있는 상위 수준의 스트림 처리 API입니다. - 연결 API
재사용 가능한 또는 표준 통합을 통해 데이터베이스와 같은 외부 시스템으로 이벤트를 스트리밍할 수 있는 프레임워크입니다.
다음 표에서는 Event Streams와 함께 사용할 수 있는 사항을 요약합니다.
| Enterprise 플랜 | Standard 플랜 | Lite 플랜 | |
|---|---|---|---|
| 클러스터의 Kafka 버전 | Kafka 3.8 | Kafka 3.8 | Kafka 3.8 |
| 최소 권장 Kafka 클라이언트 버전 | Kafka 2.6.0 또는 그 이후 | Kafka 2.6.0 또는 그 이후 | Kafka 2.6.0 또는 그 이후 |
| 지원되는 클라이언트 버전 | 모든 권장 클라이언트에 대한 지원 요약 을 참조하십시오. | ||
| 지원되는 Kafka Connect | 예 | 예 | 아니오 |
| 지원되는 Kafka Streams | 예 | 예 | 아니오 |
| 지원되는 ksqlDB | 예 | 아니오 | 아니오 |
| 인증 요구사항 | 클라이언트는 SASL 일반 메커니즘을 사용하여 인증을 지원해야 하며 TLSv1.2 프로토콜에 대한 SNI(서버 이름 표시) 확장을 사용해야 합니다. | 클라이언트는 SASL 일반 메커니즘을 사용하여 인증을 지원해야 하며 TLSv1.2 프로토콜에 대한 SNI(서버 이름 표시) 확장을 사용해야 합니다. | 클라이언트는 SASL 일반 메커니즘을 사용하여 인증을 지원해야 하며 TLSv1.2 프로토콜에 대한 SNI(서버 이름 표시) 확장을 사용해야 합니다. |
Event Streams와 사용할 Kafka 클라이언트 선택
Kafka API의 공식 클라이언트는 Java로 작성되며 최신 기능과 버그 수정을 포함합니다. 이 API에 대한 자세한 내용은 Kafka 생산자 API 3.8 및 Kafka 소비자 API 3.8 를 참조하세요.
기타 언어의 경우 다음 클라이언트 중 하나를 실행하십시오. 이 클라이언트는 모두 Event Streams를 사용하여 테스트됩니다.
모든 권장 클라이언트의 지원 요약
| 클라이언트 | 언어 | 권장 버전 | 지원되는 최소 버전 [1] | 샘플 링크 |
|---|---|---|---|---|
| 공식 Apache Kafka 클라이언트: | ||||
| Apache Kafka 클라이언트 | Java | 3.8.1 또는 그 이후 | 2.5.0 | Java 콘솔 샘플 |
| 써드파티 클라이언트: | ||||
| 컨플루언트-카프카-자바스크립트 | Node.js | 최신 | 1.0.0 | |
| confluent-kafka-python | Python | 최신 | 1.4.0 | Kafka Python 샘플 |
| confluent-kafka-go | Go | 최신 | 1.4.0 | |
| librdkafka | C 또는 C++ | 최신 | 1.4.0 | |
| node-rdkafka | Node.js | 최신 | 2.8.0 | Node.js 샘플 |
| 사라마(sarama) | Go | 최신 | 1.40.0 | Sarama 예제 |
Event Streams에 클라이언트 연결
Event Streams에 연결하기 위해 Java 클라이언트를 구성하는 방법에 관한 정보는 클라이언트 구성을 참조하십시오.
Kafka API 클라이언트 구성
연결을 설정하려면 클라이언트가 최소한 TLSv1.2 을 통해 SASL PLAIN 또는 SASL OAUTHBEARER를 사용하도록 구성하고 사용자 이름과 부트스트랩 서버 목록을 필요로 해야 합니다. TLSv1.2 는 연결이 암호화되도록 하고 브로커의 신뢰성을 검증합니다(중간자 공격을 방지하기 위해). SASL는 모든 연결에서 인증을 적용합니다.
사용자 이름, 비밀번호 및 부트스트랩 서버 목록을 검색하려면 서비스 인스턴스에 대한 서비스 자격 증명 개체 또는 서비스 키가 필요합니다. 이러한 오브젝트 작성에 대한 자세한 정보는 Event Streams에 연결의 내용을 참조하십시오.
SASL PLAIN 사용
다음 문자열 및 특성을 사용하십시오.
bootstrap_endpoints문자열을 부트스트랩 서버의 목록으로 사용하고 호스트 및 포트 쌍의 이 문자열을 Kafka 클라이언트에 전달하십시오.- 사용자 이름 및 비밀번호로
user및api_key특성을 사용하십시오.
Java 클라이언트의 경우 다음 예에서는 ${USERNAME}, ${PASSWORD}, ${BOOTSTRAP_ENDPOINTS} 을 이전에 검색한 값으로 대체할 최소 속성 집합을 보여 줍니다.
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="${USERNAME}" password="${PASSWORD}";
security.protocol=SASL_SSL
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
0.10.2.1 버전 이전의 Kafka 클라이언트를 사용하는 경우 sasl.jaas.config 속성은 지원되지 않으며, 대신 JAAS 구성 파일에 클라이언트 구성을 제공해야 합니다.
SASL OAUTHBEARER 사용
Java 클라이언트에 대한 SASL 메커니즘을 구성하기 전에 두 가지 전제조건이 있습니다.
- 지원되는 최소 Kafka Java 클라이언트 버전은 3.1.0입니다.
- Maven Central에서 추가 jar 패키지를 다운로드하여 클래스 경로에서 사용 가능하게 해야 합니다.
Maven이 빌드 시스템에서 사용되는 경우 다음 정보를 종속성 섹션의 pom.xml 파일에 추가하십시오.
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>1.4.0</version>
</dependency>
Gradle 이 빌드 시스템에서 사용되는 경우 종속성 섹션의 build.gradle 파일에 다음 정보를 추가하십시오.
implementation com.ibm.cloud.eventstreams:oauth-client:1.4.0
IBM Cloud® Identity and Access Management 신원 서비스는 무기명 토큰을 생성하는 여러 가지 방법을 지원하며, 이 중 두 가지 방법이 이 OAuth 클라이언트 라이브러리에서 지원됩니다.
- API 키.
- 신뢰할 수 있는 프로필 및 컴퓨팅 리소스 토큰입니다.
API 키와 함께 SASL OAUTHBEARER 사용
다음 문자열 및 특성을 사용하십시오.
BOOTSTRAP_ENDPOINTS문자열을 부트스트랩 서버의 목록으로 사용하고 호스트 및 포트 쌍의 이 문자열을 Kafka 클라이언트에 전달하십시오.IAMOAuthBearerLoginCallbackHandler는 jar 패키지com.ibm.cloud.eventstreams:oauth-client:+에서 제공됩니다.- IBM Cloud® Identity and Access Management의 토큰 엔드포인트
https://iam.cloud.ibm.com/identity/token는 jaas 구성에서 지정된 권한 부여 유형을 사용하여 API키에서 토큰을 생성하도록 구성됩니다. 이는 클라이언트 측에서 수행되므로 API키는 서버 측으로 전송되지 않으며 수명이 긴 API키보다 더 나은 보안을 제공합니다. - Cloud Identity and Access Management의 키 엔드포인트
https://iam.cloud.ibm.com/identity/keys는 토큰의 유효성을 검증하도록 구성됩니다. grant_typesasl.jaas.config에서urn:ibm:params:oauth:grant-type:apikeyapikey의sasl.jaas.config는 클라이언트 측에서 무기명 토큰을 생성하는 데 사용되는 API 키입니다. 사용자 또는 서비스 ID 중 하나에서 가져올 수 있습니다.
Java 클라이언트의 경우 다음 예에서는 ${BOOTSTRAP_ENDPOINTS} 및 ${APIKEY} 을 이전에 검색한 값으로 대체할 최소 속성 집합을 보여 줍니다.
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:apikey" apikey="${APIKEY}";
신뢰할 수 있는 프로필 및 컴퓨팅 리소스 토큰과 함께 SASL OAUTHBEARER 사용
API 키는 sasl.jaas.config 가 다르다는 점을 제외하면 모든 속성이 동일합니다.
grant_type의sasl.jaas.config은urn:ibm:params:oauth:grant-type:cr-token입니다.profile_id에서sasl.jaas.config는 신뢰할 수 있는 프로필 ID를 저장하는 파일 위치입니다. 이 파일은 Kafka 클라이언트 코드를 실행하는 Kubernetes 파드에 읽기 전용 볼륨으로 마운트하여 Kafka 클라이언트 코드에서 사용할 수 있도록 할 수 있습니다.cr_token의sasl.jaas.config는 Kafka 클라이언트 코드를 실행하는 Kubernetes 파드의 서비스 계정 토큰을 저장하는 파일 위치입니다. 서비스 계정 토큰이란 무엇인가 요?
아래 예시를 참조하세요
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:cr-token" profile_id="${TRUSTED_PROFILE_ID_FILE_PATH}" cr_token="${SERVICE_ACCOUNT_TOKEN_FILE_PATH}";
신뢰할 수 있는 프로필을 설정하는 방법에 대한 자세한 내용
Oauth 클라이언트의 소스 코드는 Event Streams Java SDK를 참조하세요.
샘플 클라이언트 코드는 Event Streams 샘플을 참조하세요.
기타 Kafka 클라이언트 라이브러리의 경우 OAUTHBEARER 지원을 구현하는 방법에 대한 문서를 참조하십시오. 예:.
- sarama:
AccessTokenProvider인터페이스의 구현이 필요합니다. - librdkafka:
oauthbearer_token_refresh_cb콜백을 구현해야 합니다.
API키를 사용하여 IBM Cloud IAM 토큰을 생성하는 방법에 대한 정보는 IBM Cloud® Identity and Access Management의 문서 를 참조하십시오.
-
지속적인 테스트를 통해 검증된 가장 초기 버전입니다. 일반적으로 지난 12개월 이내에 출시된 초기 버전이 사용되며, 중요한 문제가 있는 것으로 알려진 경우 최신 버전이 사용됩니다. 나열된 클라이언트 중 어느 것도 실행할 수 없는 경우 다음 최소 요구 사항을 충족하는 다른 타사 클라이언트(예: librdkafka )를 사용할 수 있습니다. 1. Kafka 1.40이상을 지원합니다. 2. TLSv1.2 에서 SASL PLAIN을 사용하여 연결 및 인증할 수 있습니다. 서버의 호스트 이름이 TLS 핸드셰이크에 포함되는 TLS용 SNI 확장을 지원합니다. 4. 타원 곡선 암호화를 지원합니다. 모든 경우에 최신 버전의 클라이언트를 사용하십시오. ↩︎