Kafka 행사 기획사와의 협업
Code Engine Kafka 구독은 Kafka 인스턴스에 새로운 메시지가 표시되는지 감시합니다. 주제 세트에 대한 등록을 작성할 때 앱 또는 작업은 주제 중 하나에 표시되는 각 새 메시지에 대해 별도의 이벤트를 수신합니다. 프로젝트당 최대 100개의 Kafka 구독을 생성할 수 있습니다.
Kafka 의 어떤 인스턴스든 사용할 수 있지만, 이 항목의 예제에서는 IBM® Event Streams for IBM Cloud® 서비스를 사용합니다. Event Streams 는 Kafka 이벤트를 위한 IBM 이벤트 스트리밍 서비스입니다. 이 서비스에 대한 자세한 내용은 Event Streams 문서를 참조하십시오.
Kafka 이벤트 프로듀서 설정하기
Kafka 메시지 프로듀서를 설정하여 Code Engine Kafka 이벤트 구독으로 메시지를 전송할 수 있습니다. Code Engine Kafka 이벤트 구독을 사용하여 Kafka 메시지가 수신될 때 애플리케이션이나 작업을 트리거할 수 있습니다.
시작하려면 이벤트 스트리밍 서비스에 대한 Event Streams 서비스 인스턴스를 작성 하십시오. 콘솔 또는 CLI를 사용할 수 있는 동안 다음 단계에서는 CLI를 사용하여 Event Streams 이벤트 생성자를 설정하는 방법을 설명합니다.
Event Streams CLI 환경 설정
-
IBM Cloud CLI를 다운로드하여 설치하십시오. IBM Cloud에 로그인하십시오.
ibmcloud login -
Code Engine CLI를 다운로드하고 설치하십시오.
ibmcloud plugin install code-engine -f -
Kafka 인스턴스를 작성하기 위해 Event Streams 서비스를 사용하려면 Event Streams CLI 를 다운로드하여 설치하십시오.
ibmcloud plugin install event-streams -f -
IBM Cloud 계정에 로그인하고 리소스 그룹을 대상으로 지정하십시오. 다음 명령을 실행하여 리소스 그룹을 대상으로 지정하십시오. 리소스 그룹 목록을 확인하려면
ibmcloud resource groups명령을 실행하세요.ibmcloud target -g <resource_group>
Kafka 인스턴스 설정하기
-
Event Streams에 대한 서비스 인스턴스를 작성하십시오. Event Streams CLI 서비스의 이름은
messagehub입니다. 이 예의 경우 이름이myeventstream인 Event Streams 서비스 인스턴스를 작성하십시오.ibmcloud resource service-instance-create myeventstream messagehub lite us-south -
서비스 키를 작성하여 서비스 인스턴스에 인증 정보를 제공하십시오.
ibmcloud resource service-key-create myeventstream-key Manager --instance-name myeventstream출력 예
Creating service key of service instance myeventstream under account <user_account>... OK Service key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd was created. Name: myeventstream-key ID: crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd Created At: Mon Mar 21 18:36:09 UTC 2022 State: active Credentials: api_key: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh apikey: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh iam_apikey_description: Auto-generated for key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd iam_apikey_name: myeventstream-key iam_role_crn: crn:v1:bluemix:public:iam::::serviceRole:Manager iam_serviceid_crn: crn:v1:bluemix:public:iam-identity::a/e43abfcbd191404cb17ef650e9681dd3::serviceid:ServiceId-3e99caa5-b174-4f04-9845-5c5d783b8bc7 instance_id: c0736069-3f4a-438a-b614-6846877d692d kafka_admin_url: https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com kafka_brokers_sasl: [broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093] kafka_http_url: https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com password: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh user: token서비스 키에 대한
user,password및kafka-brokers_sasl의 값을 기록해 두십시오. Code Engine Kafka 구독을 설정할 때 이 정보가 필요합니다.password및apikey의 값은 Event Streams 서비스 인스턴스의 서비스 키에서 동일합니다.ibmcloud resource service-key myeventstream-key명령을 사용하여 서비스 키 정보를 검색할 수도 있습니다. -
Event Streams 서비스 인스턴스에 상대적인 Event Streams 플러그인을 초기화하십시오.
ibmcloud es init --instance-name myeventstream -
Event Streams 주제를 생성합니다.
ibmcloud es topic-create kafka-topic1
Kafka 메시지를 생성하도록 Code Engine 샘플 앱 설정
이 시나리오의 경우 Code Engine 애플리케이션을 사용하여 Kafka 메시지의 이벤트 생성자 역할을 합니다. 이 애플리케이션의 목적은 Event Streams 인스턴스에 연결하고 Kafka 메시지를 전송하는 것입니다. 이 애플리케이션은 Code Engine Kafka 송신자 샘플 앱 을 사용하여 Kafka 메시지를 전송합니다. 이 샘플 송신자 이미지에는 BROKERS 환경 변수 및 password 신임 정보를 포함하는 시크릿이 필요합니다. 이 애플리케이션은 콘솔이나 CLI를 통해 생성할 수 있습니다.
Event Streams 으로 Kafka 메시지를 전송할 때는 반드시 Content-Type 헤더를 명시해야 합니다. 이용자가 예상 컨텐츠 유형 (예: application/json) 의 메시지를 수신할 수 있도록 이 헤더를 지정하십시오.
Kafka 샘플에 필요한 신임 정보를 사용하여 시크릿 작성
Code Engine 애플리케이션을 작성하여 Kafka 메시지를 전송하기 전에 필수 신임 정보를 포함하는 Code Engine 시크릿을 작성하십시오.
시작하기 전에
- 사용할 Code Engine 프로젝트를 판별하고 이 프로젝트가 선택되었는지 확인하십시오. 프로젝트 작성 및 작업 을 참조하십시오.
이 시나리오를 간단하게 설명하기 위해, ‘ kafka-subscription-secret ’라는 하나의 시크릿을 생성하여, ‘ Kafka ’ 발신자 샘플 앱과 ‘ Kafka ’ 수신자 샘플을 사용하는 ‘ Kafka ’ 이벤트 구독 모두에 필요한 자격 증명을 포함시킵니다. 이 인증 정보는 샘플 Kafka 발신자 앱과 Code Engine Kafka 이벤트 구독이 Event Streams 서비스 인스턴스와
통신하는 데 필요합니다. Kafka 발신자 앱과 이벤트 구독을 생성하기 전에 이 시크릿을 반드시 생성해야 하는 것은 아니지만, 이렇게 하면 필요한 절차를 간소화할 수 있습니다.
콘솔에서 Kafka 샘플에 필요한 신임 정보를 사용하여 시크릿 작성
콘솔에서 kafka-subscription-secret 시크릿을 작성하려면 시크릿 및 configmaps 로 이동하여 작성 을 클릭하고 작성할 시크릿을 선택하십시오. 자세한 정보는 콘솔에서 시크릿 작성 을 참조하십시오.
- Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열된
user의 값으로username키를 지정하십시오. Event Streams 서비스 인스턴스의 경우 이 값은token입니다. 이 키는 Code Engine Kafka 이벤트 등록과 Kafka 메시지 브로커 간의 인증에 필요합니다. - Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열된
apikey의 값으로password키를 지정하십시오. 이 키는 송신자 샘플에 필요하며 Code Engine Kafka 이벤트 구독과 Kafka 메시지 브로커 간의 통신을 사용으로 설정하는 데 필요합니다.
CLI를 사용하여 Kafka 샘플에 필요한 신임 정보로 시크릿 작성
CLI를 사용하여 kafka-subscription-secret 시크릿을 작성하려면 password 및 username 에 대한 리터럴 환경 변수를 추가하십시오. 자세한 정보는 CLI를 사용하여 시크릿 작성 을 참조하십시오.
-
Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열된
user의 값으로username키를 지정하십시오. Event Streams 서비스 인스턴스의 경우 이 값은token입니다. 이 키는 Code Engine Kafka 이벤트 등록과 Kafka 메시지 브로커 간의 인증에 필요합니다. -
Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열된
apikey의 값으로password키를 지정하십시오. 이 키는 송신자 샘플에 필요하며 Code Engine Kafka 이벤트 구독과 Kafka 메시지 브로커 간의 통신을 사용으로 설정하는 데 필요합니다.ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=<value_of_apikey> --from-literal username=<value_of_user>예를 들면 다음과 같습니다.
ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh --from-literal username=token
이벤트를 전송할 Code Engine 앱 작성
Event Streams 인스턴스에 연결하고, Kafka 메시지를 수신하는 수신자( Kafka 소비자)에게 Kafka 메시지를 생성(전송)하는 Code Engine 앱을 생성합니다.
콘솔에서 이벤트를 전송하기 위해 Code Engine 앱 작성
콘솔에서 ‘ kafka-sender-app ’ 애플리케이션을 생성하려면 다음 단계를 따르십시오.
-
Code Engine 애플리케이션 작성 (다음 정보와 함께
kafka-sender-app라고 함).- 이 앱에 대한
icr.io/codeengine/kafka-sender컨테이너 이미지를 참조하십시오. 이 이미지는sender.go에서 빌드되며, 이는 IBM Cloud Code Engine GitHub 저장소의 샘플에서 사용 가능합니다. 이 샘플 송신자 앱에는password및BROKERS의 값이 필요합니다. - 환경 변수 (선택사항) 섹션에서 다음 환경 변수를 추가하십시오.
- 리터럴 환경 변수
BROKERS를 추가하십시오. 이 키의 값에 대해 Event Streams 서비스 인스턴스에서 서비스 신임 정보의 세부사항에 나열되는 하나 이상의 브로커 호스트를 지정하십시오. - 전체 시크릿 참조,
kafka-subscription-secret에 다른 환경 변수를 추가하십시오. 이 시크릿에는password에 대한 신임 정보가 포함되어 있습니다.
- 리터럴 환경 변수
- (선택사항) 리소스 & 스케일링 섹션에서 앱이 항상 실행 중이고 0으로 스케일링되지 않는 인스턴스를 포함하도록 최소 인스턴스 수에 대해
1를 지정하십시오. 항상 실행 중인 인스턴스가 있도록 앱을 구성하면 로그를 볼 때 유용합니다. 프로덕션 환경에서 실행 중인 경우 앱의 실행 중인 인스턴스를 유지하는 비용을 고려하거나 Code Engine 에서 자동 스케일링을 0으로 설정할지 여부를 고려하십시오. 기본적으로 앱은 사용하지 않을 때 0으로 스케일링됩니다. - 작성 을 클릭하여 앱을 작성하고 배치하십시오.
- 이 앱에 대한
-
이 앱이
ready상태인지 확인하십시오.
CLI를 사용하여 이벤트를 전송하기 위한 Code Engine 앱 작성
CLI를 사용하여 kafka-sender-app 애플리케이션을 작성하려면 다음 명령을 사용하십시오.
-
Code Engine 애플리케이션 작성 (다음 정보와 함께
kafka-sender-app라고 함).--image옵션을 지정하여icr.io/codeengine/kafka-sender컨테이너 이미지를 참조하십시오. 이 이미지는sender.go에서 빌드되며, 이는 IBM Cloud Code Engine GitHub 저장소의 샘플에서 사용 가능합니다. 이 샘플 송신자 앱에는kafka-subscription-secret에 저장된password신임 정보가 필요하며BROKERS환경 변수가 필요합니다.password신임 정보를 포함하는 전체 시크릿kafka-subscription-secret를 참조하려면--env-from-secret옵션을 지정하십시오.--env옵션을 지정하여 리터럴 환경 변수BROKERS를 추가하고 Event Streams 서비스 인스턴스에서 서비스 신임 정보의 세부사항에 나열된 브로커 호스트 중 하나의 이름을 제공하십시오. 그러나 둘 이상의 브로커 호스트 이름을 지정하려면--env BROKERS-broker1,broker2,broker3형식을 사용하십시오.- (선택 사항) 앱에 항상 실행 중인 인스턴스가 유지되고 인스턴스 수가 0으로 줄어들지 않도록 하려면
--min-scale=1옵션을 지정하십시오. 항상 실행 중인 인스턴스가 있도록 앱을 구성하면 로그를 볼 때 유용합니다. 프로덕션 환경에서 실행 중인 경우 앱의 실행 중인 인스턴스를 유지하는 비용을 고려하거나 Code Engine 에서 자동 스케일링을 0으로 설정할지 여부를 고려하십시오. 기본적으로 앱은 사용하지 않을 때 0으로 스케일링됩니다.
ibmcloud ce app create --name kafka-sender-app --image icr.io/codeengine/kafka-sender --env-from-secret kafka-subscription-secret --env BROKERS=broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --min-scale 1
앱에 대한 Kafka 이벤트를 수신하도록 Code Engine 설정
Code Engine 가 Kafka 이벤트를 처리하도록 하려면, 콘솔이나 CLI를 사용하여 Code Engine Kafka 이벤트 구독을 설정하고, Kafka 이벤트 브로커에 연결하여 Kafka 이벤트를 수신 대기해야 합니다. 또한, Kafka 이벤트의 수신자 역할을 할 Code Engine 앱(또는 작업)을 설정하십시오. Kafka 이벤트 구독은 Kafka 의 이벤트 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의합니다.
Code Engine Kafka 이벤트 구독은 Kafka 메시지 브로커에 연결하여 수신되는 각 Kafka 메시지에 대한 HTTP 게시 요청을 수신자 애플리케이션으로 보냅니다. 자세한 정보는 이벤트에 대한 HTTP 헤더 및 본문 정보를 참조하십시오.
콘솔에서 앱의 ‘ Kafka ’ 이벤트 구독하기
콘솔을 사용하여 Kafka 이벤트 구독을 설정하면, 이벤트가 Code Engine 애플리케이션으로 전송됩니다.
콘솔에서 Kafka 이벤트를 수신하도록 Code Engine 앱 작성
- Kafka 메시지의 이벤트 이용자로 작동하고 Kafka 이벤트를 수신하도록 Code Engine 애플리케이션 을 작성하십시오. 예를 들어,
icr.io/codeengine/kafka-receiver이미지를 사용하는kafka-receiver-app이라는 애플리케이션을 작성하십시오. 이 이미지는receiver.go에서 빌드되며, 이는 IBM Cloud Code Engine GitHub 저장소의 샘플에서 사용 가능합니다. 이 샘플에는 환경 변수가 필요하지 않습니다. - 이 앱을 배치한 후
ready상태인지 확인하십시오.
콘솔을 사용할 때, ‘ Kafka ’ 이벤트를 수신하는 데 사용하는 앱이나 작업이 ‘ Kafka ’ 이벤트 구독을 생성하기 전에 반드시 존재해야 하는 것은 아닙니다. 그러나 이벤트 등록을 작성할 때 앱 또는 작업이 존재하지 않는 경우 등록 상태는 이용자가 존재하지 않음을 반영합니다. 등록이 준비 상태가 되기 전에 앱 또는 작업을 작성해야 하며 이 등록을 통해 이벤트를 수신할 수 있습니다.
콘솔에서 앱에 대한 Code Engine Kafka 이벤트 등록 작성
Kafka 이벤트 구독은 Kafka 의 이벤트 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의합니다.
시작하기 전에
- 사용할 Code Engine 프로젝트를 판별하고 이 프로젝트가 선택되었는지 확인하십시오. 프로젝트 작성 및 작업 을 참조하십시오.
콘솔에서 애플리케이션에 대한 ‘ Kafka ’ 이벤트 구독을 생성하려면 다음 단계를 따르십시오.
- Code Engine 의 ‘프로젝트’ 페이지 에서 해당 프로젝트로 이동하세요.
- 개요 페이지에서 이벤트 구독을 클릭하십시오.
- 이벤트 구독 페이지에서 작성을 클릭하여 구독을 작성하십시오.
- 이벤트 서브스크립션 작성 페이지에서
Event Streams / Kafka타일을 선택하여 이벤트 유형을 지정하십시오. - 일반의 경우
Event Streams / Kafka등록의 이름을 제공하십시오. 다음을 클릭하여 계속 진행하십시오. - 메시지 브로커 세부 정보 의 경우,
- 이 구독을 통해 이벤트로 수신되는 메시지가 포함된 메시지 큐에 대한 ‘ Kafka ’ 메시지 브로커 호스트를 지정하십시오. 브로커 호스트, 토픽 및 액세스 신임 정보에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스에 대한 서비스 신임 정보 세부사항을 보십시오. 예를 들어,
myeventstream-key서비스 인스턴스의 메시지 브로커 호스트에 대해"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"를 지정하십시오.Kafka_brokers_sasl필드의 Event Streams 에서 서비스 인스턴스에 대한 브로커를 찾을 수 있습니다. - 구성 을 클릭하여 메시지 브로커에 대한 액세스를 구성하십시오. Code Engine 에서 Kafka 또는 Event Streams 인스턴스로 인증하려면 메시지 브로커 액세스 시크릿을 제공해야 합니다.
- 새 시크릿을 작성하거나, 기존 시크릿을 선택하거나, 메시지 브로커에 액세스하는 데 신임 정보가 필요하지 않은 경우
None를 선택할 수 있습니다. - 시크릿을 작성하려면 작성을 클릭하십시오. 시크릿의 이름과
username및password의 값을 제공하십시오.username및password의 값은 Kafka 또는 Event Streams 인스턴스에 대한 서비스 인증 정보의 값과 일치해야 합니다. 예를 들어,username의 값은 Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열되는user의 값입니다.password의 값은 Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열되는apikey의 값입니다. - 이 예제의 경우 이전에 작성된 기존
kafka-subscription-secret시크릿을 사용하십시오.
- 새 시크릿을 작성하거나, 기존 시크릿을 선택하거나, 메시지 브로커에 액세스하는 데 신임 정보가 필요하지 않은 경우
- 메시지 큐에 대한 기존 토픽의 이름을 지정하십시오. 예를 들어,
kafka-topic1입니다. 서비스 인스턴스의 기존 주제에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스로 이동하여 주제를 보십시오. - (선택사항) 이용자 그룹을 지정하십시오. Kafka 메시지의 이용자는 이용자 그룹 으로 그룹화할 수 있습니다. 이용자 그룹을 사용 중인 경우 토픽 구성은 이용자 그룹의 이용자에 대한 메시지 플로우를 제어합니다. 이용자가 이용자 그룹에 추가되거나 이용자 그룹에서 제거될 때마다 해당 토픽의 메시지 플로우가 변경될 수 있습니다. 이 조치를 수행하면 기존 이용자가 더 이상 해당 토픽에서 메시지를 수신하지 않을 수 있습니다.
- 다음을 클릭하여 계속 진행하십시오.
- 이 구독을 통해 이벤트로 수신되는 메시지가 포함된 메시지 큐에 대한 ‘ Kafka ’ 메시지 브로커 호스트를 지정하십시오. 브로커 호스트, 토픽 및 액세스 신임 정보에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스에 대한 서비스 신임 정보 세부사항을 보십시오. 예를 들어,
- 이벤트 수신자의 경우, 이벤트를 수신할 ‘ Code Engine ’ 애플리케이션을 지정하십시오. 정의된 애플리케이션 및 작업 목록에서 선택하거나 아직 작성되지 않은 앱 (또는 작업) 의 이름을 제공할 수 있습니다. 콘솔을 사용하여 이벤트 등록을 작성할 때 앱 또는 작업이 필요하지 않습니다. 그러나 구독이 작성될 때 구독의 상태는 이용자가 존재하지 않음을 반영합니다. 등록이 준비 상태가 되기
전에 앱 또는 작업을 작성해야 하며 이 등록을 통해 이벤트를 수신할 수 있습니다. 이 예에서는
icr.io/codeengine/kafka-receiver이미지를 참조하는kafka-receiver-app애플리케이션이 사용됩니다. 앱이 없는 경우 Kafka 구독을 작성한 후 애플리케이션의 이름을 제공하고 애플리케이션을 작성 하십시오. 애플리케이션의 경우 선택적으로 경로를 지정할 수 있습니다. 기본적으로 이벤트는 대상 애플리케이션의 루트 URL로 라우팅됩니다. 경로를 지정하여 앱 내의 다른 대상으로 이벤트를 전송할 수 있습니다. 예를 들어, 구독 경로에/events가 지정된 경우 이벤트가https://<base application URL>/events로 전송됩니다. 다음을 클릭하여 계속 진행하십시오. - 요약하자면, ‘ Kafka ’ 이벤트 구독 설정을 검토하고 필요한 경우 변경하십시오. 준비가 되면 ‘생성’을 클릭하여 ‘ Kafka ’ 구독을 생성하세요.
콘솔에서 수신 앱으로 이벤트 전송
kafka-receiver-app 애플리케이션을 참조하는 Kafka 이벤트 구독이 생성되었으므로, kafka-sender-app 을 사용하여 수신자 애플리케이션으로 메시지 이벤트를 전송하십시오.
-
수신자 애플리케이션에 대한 로깅을 시작하여 콘솔에서 애플리케이션 로그를 보고 이벤트를 확인하십시오.
-
(선택사항) 송신자 애플리케이션에 대한 로깅을 시작하여 콘솔에서 애플리케이션 로그를 보고 전송되는 이벤트에 대한 정보를 확인하십시오.
-
로깅이 시작된 후
curl으로kafka-sender-app애플리케이션을 호출하고kafka-sender-app의 공개 URL, 토픽 이름, 전송할 메시지 수를 지정합니다. 애플리케이션의 도메인 매핑 탭에서 이 애플리케이션의 공개 URL 를 얻을 수 있습니다. 예를 들면 다음과 같습니다.curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
값이 단일 문자열로 처리되도록 값을 따옴표로 묶어야 합니다.
CLI를 사용하여 앱의 Kafka 이벤트를 구독하기
CLI를 사용하여 Kafka 이벤트 구독을 설정하면, 이벤트가 Code Engine 애플리케이션으로 전송됩니다.
이벤트는 애플리케이션에 HTTP POST 요청으로 전송됩니다. Kafka 이벤트에 포함된 정보에 대한 자세한 내용은 HTTP 의 이벤트 헤더 및 본문 정보를 참조하십시오. 이벤트가 Code Engine 작업으로 전송되면, 해당 작업은 이벤트를 환경 변수로 수신합니다. Kafka 구독의 환경 변수에 대한 자세한 내용은 ‘이벤트용 환경 변수’를 참조하세요.
CLI를 사용하여 Kafka 이벤트를 수신하도록 Code Engine 앱 작성
시작하기 전에
-
Kafka 메시지의 이벤트 이용자로 작동하고 Kafka 이벤트를 수신하도록 Code Engine 애플리케이션 을 작성하십시오. 예를 들어,
icr.io/codeengine/kafka-receiver이미지를 사용하는kafka-receiver-app2이라는 애플리케이션을 작성하십시오. 이 이미지는receiver.go에서 빌드되며, 이는 IBM Cloud Code Engine GitHub 저장소의 샘플에서 사용 가능합니다. 이 샘플에는 환경 변수가 필요하지 않습니다. 선택적으로--min-scale=1옵션을 지정하면, 앱에 항상 실행 중인 인스턴스가 유지되고 인스턴스 수가 0으로 줄어들지 않도록 할 수 있습니다. 항상 실행 중인 인스턴스가 있도록 앱을 구성하면 로그를 볼 때 유용합니다. 프로덕션 환경에서 실행 중인 경우 앱의 실행 중인 인스턴스를 유지하는 비용을 고려하거나 Code Engine 에서 자동 스케일링을 0으로 설정할지 여부를 고려하십시오. 기본적으로 앱은 사용하지 않을 때 0으로 스케일링됩니다.ibmcloud ce app create -n kafka-receiver-app2 --image icr.io/codeengine/kafka-receiver --min-scale 1기본적으로 이벤트는 대상 애플리케이션의 루트 URL로 라우팅됩니다.
--path옵션을 사용하여 앱 내의 다른 대상에 이벤트를 전송할 수 있습니다. 예를 들어, 구독에--path /event가 지정된 경우 이벤트가https://<base application URL>/events로 전송됩니다. -
이 앱을 배치한 후
app get명령을 실행하여 앱이ready상태인지 확인하십시오.ibmcloud ce app get -n kafka-receiver-app2
CLI를 사용하여 앱에 대한 Code Engine Kafka 이벤트 등록 작성
CLI를 사용하여 이벤트의 ‘ Kafka ’ 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의하는 ‘ Kafka ’ 이벤트 구독을 생성할 수 있습니다.
-
ibmcloud ce sub kafka create명령을 사용하여 Kafka 이벤트에 대한 Code Engine Kafka 이벤트 등록을 작성하십시오. 이전에 작성한kafka-subscription-secret시크릿을 사용하여 메시지 브로커에 액세스하십시오. Kafka 리소스에 대한 서비스 신임 정보를 기반으로 브로커 정보를 지정하십시오. 이 예의 경우,ibmcloud resource service-key myeventstream-key명령의 출력에서 브로커 정보를 얻을 수 있습니다. 토픽의 각 브로커에 대해--broker옵션을 지정해야 합니다.--destination옵션은 이벤트를 수신하는 Code Engine 자원을 지정합니다.ibmcloud ce sub kafka create --name mykafkasubscription --destination kafka-receiver-app2 --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 -
Kafka 이벤트 구독에 대한 세부 정보를 표시합니다.
ibmcloud ce sub kafka get -n mykafkasubscription출력 예
Getting Kafka event subscription 'mykafkasubscription'... OK Name: mykafkasubscription [...] Destination Type: app Destination: kafka-receiver-app2 Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340 Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true Conditions: Type OK Age Reason ConnectionEstablished true 24s InitialOffsetsCommitted true 24s Ready true 24s Scheduled true 24s SinkProvided true 24s Events: Type Reason Age Source Messages Normal FinalizerUpdate 26s kafkasource-controller Updated "mykafkasubscription" finalizers
CLI를 사용하여 수신 앱에 이벤트 전송
kafka-receiver-app 애플리케이션을 참조하는 Kafka 이벤트 구독이 생성되었으므로, kafka-sender-app 을 사용하여 수신자 애플리케이션으로 메시지 이벤트를 전송하십시오.
-
명령을 사용하여 대상 앱의 공개 URL (
kafka-sender-app)를 가져옵니다ibmcloud ce app get명령을--output url옵션과 함께 사용하여 앱의 URL 을 찾습니다.ibmcloud ce app get -n kafka-sender-app --output url출력 예
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
Kafka 이벤트 생성자 앱,
kafka-sender-app를 실행하여 대상 Code Engine 애플리케이션으로 이벤트를 전송하십시오.curl를 사용하여kafka-sender-app애플리케이션을 호출하고 토픽에 대한 값 및 메시지 수를 지정하십시오. 다음 명령어의 출력을 사용하여ibmcloud ce app get명령어의 출력 결과를 사용하여 앱의 공개 URL 를 찾으세요. 값이 단일 문자열로 처리되도록 값을 따옴표로 묶어야 합니다.curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"예를 들면 다음과 같습니다.
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
로그에서 이벤트를 봅니다. Kafka 이벤트 구독이 올바른 브로커, 토픽 및 액세스 시크릿을 사용하여 작성되고 해당 토픽 (예:
kafka-sender-app) 에 대한 메시지를 생성하는 Kafka 애플리케이션이 있는 경우,kafka-receiver-app와 같은 Kafka 메시지를 수신하는 대상 Code Engine 애플리케이션에 대한 로그에서 이벤트를 볼 수 있습니다. Kafka 수신자 앱 (icr.io/codeengine/kafka-receiver) 을 사용하는 경우 수신자 애플리케이션의 로그에서Event data를 검색하여 수신되는 메시지를 확인하십시오.ibmcloud ce app logs -n kafka-receiver-app2출력 예
Getting logs for all instances of application 'kafka-receiver-app2'... OK kafka-receiver-app2-00001-deployment-66976f7988-9xttm/user-container: 2022/03/31 22:19:45 Listening on port 8080 2022/03/31 22:19:46 ---------- 2022/03/31 22:19:46 Path: / 2022/03/31 22:19:46 Header: Accept-Encoding=[gzip] 2022/03/31 22:19:46 Header: Ce-Id=[partition:0/offset:167] 2022/03/31 22:19:46 Header: Ce-Source=[/apis/v1/namespaces/glxo4k7nj7d/kafkasources/mykafkasubscription#kafka-topic1] 2022/03/31 22:19:46 Header: Ce-Specversion=[1.0] 2022/03/31 22:19:46 Header: Ce-Subject=[partition:0#167] 2022/03/31 22:19:46 Header: Ce-Time=[2022-03-31T22:19:36.499Z] 2022/03/31 22:19:46 Header: Ce-Type=[dev.knative.kafka.event] 2022/03/31 22:19:46 Header: Content-Length=[8] 2022/03/31 22:19:46 Header: Forwarded=[for=172.30.208.213;proto=http, for=127.0.0.6] 2022/03/31 22:19:46 Header: K-Proxy-Request=[activator] 2022/03/31 22:19:46 Header: Traceparent=[00-b033708685c715a7c2384cdf05797785-65540b0937e9b0ce-00] 2022/03/31 22:19:46 Header: User-Agent=[Go-http-client/1.1] 2022/03/31 22:19:46 Header: X-B3-Parentspanid=[e1a785d7fdbead6c] 2022/03/31 22:19:46 Header: X-B3-Sampled=[1] 2022/03/31 22:19:46 Header: X-B3-Spanid=[abcde9901e6bf83f] 2022/03/31 22:19:46 Header: X-B3-Traceid=[abcde490a426573772fa0bf60caf5ddb] 2022/03/31 22:19:46 Header: X-Envoy-Attempt-Count=[1] 2022/03/31 22:19:46 Header: X-Forwarded-For=[172.30.208.213, 127.0.0.6, 127.0.0.6] 2022/03/31 22:19:46 Header: X-Forwarded-Proto=[http] 2022/03/31 22:19:46 Header: X-Request-Id=[abcdeb4e-c5ac-abcd-abcd-60e6278abcde] 2022/03/31 22:19:46 Event data: test1: 1앱에 대한 로그 정보는 1시간 동안만 보관된다는 점에 유의하시기 바랍니다. 앱 (또는 작업) 의 로그 보기에 대한 자세한 정보는 로그 보기 를 참조하십시오.
앱에 전달되는 Kafka 이벤트에 대한 헤더 및 본문 정보
애플리케이션에 전달되는 모든 이벤트는 HTTP POST 메시지로 수신됩니다. 이벤트에는 이벤트 본문(비즈니스 논리)을 보지 않고 이벤트에 대한 정보의 키 비트를 신속하게 결정하는 데 도움이 되는 특정 HTTP 헤더가 포함되어 있습니다. 자세한 내용은 ‘ CloudEvents ’ 사양을 참조하십시오.
앱의 헤더
| 헤더 | 설명 |
|---|---|
ce-id |
이벤트가 재생되지 않는 한, 이벤트의 고유 ID입니다. 이 경우 동일한 ID가 지정됩니다. |
ce-source |
이벤트 생성자 내에서 이 이벤트가 시작된 위치를 표시하는 URI 참조입니다. Kafka 이벤트의 경우 이 헤더의 형식은 /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME] 입니다. |
ce-specversion |
CloudEvents 스펙의 버전입니다. 이 값은 항상 1.0입니다. |
ce-subject |
Kafka 파티션 번호 및 오프셋입니다. 예를 들어, partition:0#1 는 파티션 0 및 오프셋 1 을 참조합니다. |
ce-time |
이벤트가 생성된 시간입니다. |
ce-type |
이벤트의 유형입니다. Kafka 이벤트의 경우 이는 dev.knative.kafka.event 입니다. |
출력 예
Ce-Id=[partition:0/offset:0]
Ce-Source=[/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription#kafka-topic1]
Ce-Specversion=[1.0]
Ce-Subject=[partition:0#0]
Ce-Time=[2021-09-27T16:39:01.36Z]
Ce-Type=[dev.knative.kafka.event]
HTTP 앱용 본문
HTTP 본문에는 Kafka 메시지가 포함되어 있으며, 이는 구독을 생성하거나 업데이트할 때 지정한 형식을 따릅니다.
작업에 대한 Kafka 이벤트를 수신하도록 Code Engine 설정
Code Engine 가 Kafka 이벤트를 처리하도록 하려면, 콘솔이나 CLI를 사용하여 Code Engine Kafka 이벤트 구독을 설정하고, Kafka 이벤트 브로커에 연결하여 Kafka 이벤트를 수신 대기해야 합니다. 또한, Kafka 이벤트의 수신자 역할을 할 Code Engine 작업(또는 앱)을 설정하세요. Kafka 이벤트 구독은 Kafka 의 이벤트 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의합니다.
콘솔에서 Kafka 이벤트에 구직 목적으로 구독하기
콘솔을 사용하여 ‘ Kafka ’ 이벤트 구독을 설정하면, 이벤트가 ‘ Code Engine ’ 작업으로 전송됩니다.
작업에 대한 이벤트 등록을 작성할 때 트리거되는 각 이벤트에 대해 작업 실행이 작성됩니다. 이 작업 실행에는 작업과 관련된 환경 변수가 있습니다. Code Engine Kafka 이벤트 구독은 Kafka 메시지 브로커에 연결되어 해당 작업과 관련된 환경 변수를 전송합니다. Kafka 에서 전송되는 환경 변수에 대한 자세한 내용은 ‘이벤트용 환경 변수’를 참조하십시오.
콘솔에서 Kafka 이벤트를 수신하기 위한 Code Engine 작업 작성
- Code Engine 작업 을 작성하여 Kafka 메시지의 이벤트 이용자 역할을 하고 Kafka 이벤트를 수신하십시오. 예를 들어, ‘
kafka-receiver-job’라는 이름의 작업을 생성하고, ‘icr.io/codeengine/codeengine’ 샘플 이미지를 사용하도록 설정합니다. 이 이미지는codeengine.go에서 가져온 것으로, IBM Cloud Code Engine GitHub 저장소의 샘플 에서 확인할 수 있습니다. 이 샘플에는 환경 변수가 필요하지 않습니다. - 이 작업을 작성한 후
ready상태인지 확인하십시오.
콘솔을 사용할 때, ‘ Kafka ’ 이벤트를 수신하는 데 사용하는 앱이나 작업이 ‘ Kafka ’ 이벤트 구독을 생성하기 전에 반드시 존재해야 하는 것은 아닙니다. 그러나 이벤트 등록을 작성할 때 앱 또는 작업이 존재하지 않는 경우 등록 상태는 이용자가 존재하지 않음을 반영합니다. 등록이 준비 상태가 되기 전에 앱 또는 작업을 작성해야 하며 이 등록을 통해 이벤트를 수신할 수 있습니다.
콘솔에서 작업에 대한 Code Engine Kafka 이벤트 등록 작성
Kafka 이벤트 구독은 Kafka 의 이벤트 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의합니다.
시작하기 전에
- 사용할 Code Engine 프로젝트를 판별하고 이 프로젝트가 선택되었는지 확인하십시오. 프로젝트 작성 및 작업 을 참조하십시오.
콘솔에서 애플리케이션에 대한 ‘ Kafka ’ 이벤트 구독을 생성하려면 다음 단계를 따르십시오.
- Code Engine 의 ‘프로젝트’ 페이지 에서 해당 프로젝트로 이동하세요.
- 개요 페이지에서 이벤트 구독을 클릭하십시오.
- 이벤트 구독 페이지에서 작성을 클릭하여 구독을 작성하십시오.
- 이벤트 서브스크립션 작성 페이지에서
Event Streams / Kafka타일을 선택하여 이벤트 유형을 지정하십시오. - 일반의 경우
Event Streams / Kafka등록의 이름을 제공하십시오. 다음을 클릭하여 계속 진행하십시오. - 메시지 브로커 세부 정보 의 경우,
- 이 구독을 통해 이벤트로 수신되는 메시지가 포함된 메시지 큐에 대한 ‘ Kafka ’ 메시지 브로커 호스트를 지정하십시오. 브로커 호스트, 토픽 및 액세스 신임 정보에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스에 대한 서비스 신임 정보 세부사항을 보십시오. 예를 들어,
myeventstream-key서비스 인스턴스의 메시지 브로커 호스트에 대해"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"를 지정하십시오. - 구성 을 클릭하여 메시지 브로커에 대한 액세스를 구성하십시오. Code Engine 에서 Kafka 또는 Event Streams 인스턴스로 인증하려면 메시지 브로커 액세스 시크릿을 제공해야 합니다.
- 새 시크릿을 작성하거나, 기존 시크릿을 선택하거나, 메시지 브로커에 액세스하는 데 신임 정보가 필요하지 않은 경우
None를 선택할 수 있습니다. - 시크릿을 작성하려면 작성을 클릭하십시오. 시크릿의 이름과
username및password의 값을 제공하십시오.username및password의 값은 Kafka 또는 Event Streams 인스턴스에 대한 서비스 인증 정보의 값과 일치해야 합니다. 예를 들어,username의 값은 Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열되는user의 값입니다.password의 값은 Event Streams 서비스 인스턴스에서 서비스 인증 정보의 세부사항에 나열되는apikey의 값입니다. - 이 예제의 경우 이전에 작성된 기존
kafka-subscription-secret시크릿을 사용하십시오.
- 새 시크릿을 작성하거나, 기존 시크릿을 선택하거나, 메시지 브로커에 액세스하는 데 신임 정보가 필요하지 않은 경우
- 메시지 큐에 대한 기존 토픽의 이름을 지정하십시오. 예를 들어,
kafka-topic1입니다. 서비스 인스턴스의 기존 주제에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스로 이동하여 주제를 보십시오. - (선택사항) 이용자 그룹을 지정하십시오. Kafka 메시지의 이용자는 이용자 그룹 으로 그룹화할 수 있습니다. 이용자 그룹을 사용 중인 경우 토픽 구성은 이용자 그룹의 이용자에 대한 메시지 플로우를 제어합니다. 이용자가 이용자 그룹에 추가되거나 이용자 그룹에서 제거될 때마다 해당 토픽의 메시지 플로우가 변경될 수 있습니다. 이 조치를 수행하면 기존 이용자가 더 이상 해당 토픽에서 메시지를 수신하지 않을 수 있습니다.
- 다음을 클릭하여 계속 진행하십시오.
- 이 구독을 통해 이벤트로 수신되는 메시지가 포함된 메시지 큐에 대한 ‘ Kafka ’ 메시지 브로커 호스트를 지정하십시오. 브로커 호스트, 토픽 및 액세스 신임 정보에 대한 정보를 얻으려면 Event Streams 콘솔에서 서비스 인스턴스에 대한 서비스 신임 정보 세부사항을 보십시오. 예를 들어,
- 이벤트 수신자의 경우, 이벤트를 수신할 ‘ Code Engine ’ 작업을 지정하십시오. 정의된 작업 및 앱 목록에서 선택하거나 아직 작성되지 않은 작업 (또는 앱) 의 이름을 제공할 수 있습니다. 콘솔을 사용하여 이벤트 등록을 작성할 때 앱 또는 작업이 필요하지 않습니다. 그러나 구독이 작성될 때 구독의 상태는 이용자가 존재하지 않음을 반영합니다. 등록이 준비 상태가 되기 전에 작업 (또는
앱) 을 작성해야 하며 이 등록을 통해 이벤트를 수신할 수 있습니다. 이 예제의 경우,
job를 컴포넌트 유형으로 선택하고icr.io/codeengine/codeengine이미지를 컴포넌트로 참조하는kafka-receiver-job작업을 사용하여 이벤트를 수신하십시오. 해당 작업이 존재하지 않는 경우, 작업 이름을 입력하고 ‘ Kafka ’ 구독을 생성한 후 해당 작업을 생성하십시오. 애플리케이션의 경우 선택적으로 경로를 지정할 수 있습니다. 다음을 클릭하여 계속 진행하십시오. - 요약하자면, ‘ Kafka ’ 이벤트 구독 설정을 검토하고 필요한 경우 변경하십시오. 준비가 되면 ‘생성’을 클릭하여 ‘ Kafka ’ 구독을 생성하세요.
콘솔에서 수신 작업으로 이벤트 전송
kafka-receiver-job 작업을 참조하는 Kafka 이벤트 구독이 생성되었으므로, kafka-sender-app 를 사용하여 수신자 작업으로 메시지 이벤트를 전송하십시오.
-
이벤트를 보려면 수신자 작업에 대한 로깅을 시작하여 콘솔에서 작업 로그 보기 를 수행하십시오.
-
(선택사항) 송신자 애플리케이션에 대한 로깅을 시작하여 콘솔에서 애플리케이션 로그를 보고 전송되는 이벤트에 대한 정보를 확인하십시오.
-
로깅이 시작된 후
curl으로kafka-sender-app애플리케이션을 호출하고kafka-sender-app의 공개 URL, 토픽 이름, 전송할 메시지 수를 지정합니다. 애플리케이션의 도메인 매핑 탭에서 이 애플리케이션의 공개 URL 를 얻을 수 있습니다. 예를 들면 다음과 같습니다.curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
값이 단일 문자열로 처리되도록 값을 따옴표로 묶어야 합니다.
Kafka 구독이 올바른 브로커, 토픽 및 액세스 시크릿으로 작성되고 해당 토픽 (예: kafka-sender-app) 에 대한 메시지를 생성하는 Kafka 작업이 있는 경우, Kafka 메시지 (예: kafka-receiver-job) 를 수신하는 Code Engine 작업에 대한 로그에서 이벤트를 볼 수 있습니다. Kafka 수신자 작업 (icr.io/codeengine/codeengine)
을 사용할 때 수신자 작업에 대한 로그에서 CE_DATA 를 검색하여 수신되는 메시지를 확인하십시오.
CLI를 사용하여 Kafka 이벤트에 구독하여 작업 수행하기
CLI를 사용하여 Kafka 이벤트 구독을 설정하면, 이벤트가 Code Engine 작업으로 전송되도록 할 수 있습니다.
작업에 대한 이벤트 등록을 작성할 때 트리거되는 각 이벤트에 대해 작업 실행이 작성됩니다. 이 작업 실행에는 작업과 관련된 환경 변수가 있습니다. Code Engine Kafka 이벤트 구독은 Kafka 메시지 브로커에 연결되어 해당 작업과 관련된 환경 변수를 전송합니다. Kafka 에서 전송되는 환경 변수에 대한 자세한 내용은 ‘이벤트용 환경 변수’를 참조하십시오.
CLI를 사용하여 Kafka 이벤트를 수신하기 위한 Code Engine 작업 작성
시작하기 전에
-
Code Engine 작업 을 작성하여 Kafka 메시지의 이벤트 이용자 역할을 하고 Kafka 이벤트를 수신하십시오. 예를 들어,
icr.io/codeengine/codeengine이미지를 사용하는kafka-receiver-job이라는 작업을 작성하십시오. 이 이미지는codeengine.go에서 가져온 것으로, IBM Cloud Code Engine GitHub 저장소의 샘플 에서 확인할 수 있습니다.ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine -
(선택사항) 이 작업을 작성한 후
job get명령을 실행하여 이 작업에 대한 정보를 보십시오.ibmcloud ce job get -n kafka-receiver-job
CLI를 사용하여 작업에 대한 Code Engine Kafka 이벤트 등록 작성
CLI를 사용하여 이벤트의 ‘ Kafka ’ 프로듀서(발신자)와 컨슈머(수신자) 간의 관계를 정의하는 ‘ Kafka ’ 이벤트 구독을 생성할 수 있습니다.
-
ibmcloud ce sub kafka create명령을 사용하여 Kafka 이벤트에 대한 Code Engine Kafka 이벤트 등록을 작성하십시오. 이전에 작성한kafka-subscription-secret시크릿을 사용하여 메시지 브로커에 액세스하십시오. Kafka 리소스에 대한 서비스 신임 정보를 기반으로 브로커 정보를 지정하십시오. 이 예의 경우,ibmcloud resource service-key myeventstream-key명령의 출력에서 브로커 정보를 얻을 수 있습니다. 토픽의 각 브로커에 대해--broker옵션을 지정해야 합니다.--destination옵션은 이벤트를 수신하는 Code Engine 자원을 지정합니다. 수신 작업에 대해 작업할 때--destination-type옵션도 지정하여 자원이 작업임을 지정해야 합니다. 이 옵션의 기본값은app입니다.ibmcloud ce sub kafka create --name mykafkasubscription-withjob --destination-type job --destination kafka-receiver-job --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 -
Kafka 이벤트 구독에 대한 세부 정보를 표시합니다.
ibmcloud ce sub kafka get -n mykafkasubscription-withjob출력 예
Getting Kafka event subscription 'mykafkasubscription-withjob'... OK Name: mykafkasubscription-withjob [...] Destination Type: job Destination: kafka-receiver-job Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340 Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true [...]
CLI를 사용하여 수신 작업에 이벤트 전송
kafka-receiver-job 애플리케이션을 참조하는 Kafka 이벤트 구독이 생성되었으므로, kafka-sender-app 을 사용하여 수신자 애플리케이션으로 메시지 이벤트를 전송하십시오.
-
명령을 사용하여 대상 앱의 공개 URL (
kafka-sender-app)를 가져옵니다ibmcloud ce app get명령을 사용하여 앱의 URL 을 찾습니다.ibmcloud ce app get -n kafka-sender-app --output url출력 예
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
Kafka 이벤트 생성자 앱,
kafka-sender-app를 실행하여 대상 Code Engine 작업에 이벤트를 전송하십시오.curl를 사용하여kafka-sender-app애플리케이션을 호출하고 토픽에 대한 값 및 메시지 수를 지정하십시오. 명령의 출력을 사용하여ibmcloud ce app get명령의 출력을 사용하여 이벤트를 생성하는 앱의 공개 URL 를 찾습니다. 값이 단일 문자열로 처리되도록 값을 따옴표로 묶어야 합니다. 예를 들면 다음과 같습니다.curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"예를 들면 다음과 같습니다.
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
로그에서 이벤트를 봅니다. Kafka 이벤트 구독이 올바른 브로커, 토픽 및 액세스 시크릿을 사용하여 작성되고 해당 토픽 (예:
kafka-sender-app) 에 대한 메시지를 생성하는 Kafka 앱이 있는 경우, Kafka 메시지 (예:kafka-receiver-job) 를 수신하는 대상 Code Engine 작업에 대한 로그에서 이벤트를 볼 수 있습니다.curl를 사용하여 전송되는 각 메시지에 대해 동일한 수의 작업 실행이 Kafka 이벤트에 의해 트리거됩니다. 작업에 전송된 이벤트를 보려면ibmcloud ce jobrun logs명령을 사용하십시오.ibmcloud ce jobrun list명령을 사용하여kafka-receiver-job작업에 대한 작업 실행을 나열하십시오.
ibmcloud ce jobrun list --job kafka-receiver-job ``` 2. **`ibmcloud ce jobrun logs`** 명령을 사용하여 특정 작업 실행에 대한 로그를 확보하십시오. ```txt {: pre} ibmcloud ce jobrun logs -n kafka-receiver-job-abcde ``` 출력 예 ```txt {: screen} Getting logs for all instances of job run 'kafka-receiver-job-abcde'... Getting jobrun 'kafka-receiver-job-abcde'... Getting instances of jobrun 'kafka-receiver-job-abcde'... OK kafka-receiver-job-abcde-0-0/kafka-receiver-job: Hello from helloworld! I'm a batch job! Index: 0 Hello World from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- CE_DATA=test1: 2 CE_DOMAIN=us-south.codeengine.appdomain.cloud CE_ID=partition:0/offset:249 CE_JOB=kafka-receiver-job CE_JOBRUN=kafka-receiver-job-abcde CE_SOURCE=/apis/v1/namespaces/p99k7iy919d/kafkasources/kafkasub-job-ui#kafka-topic1 CE_SPECVERSION=1.0 CE_SUBDOMAIN=p99k7iy919d CE_SUBJECT=partition:0#249 CE_TIME=2022-06-21T12:19:24.06Z CE_TYPE=dev.knative.kafka.event HOME=/root HOSTNAME=kafka-receiver-job-abcde-0-0 JOB_INDEX=0 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 z=Set env var 'SHOW' to see all variables ``` Kafka 수신자 작업 (`icr.io/codeengine/codeengine`) 을 사용할 때 수신자 작업에 대한 로그에서 `CE_DATA` 를 검색하여 수신되는 메시지를 확인하십시오. 작업 실행에 대한 로그 정보는 1시간 동안만 보관된다는 점에 유의하십시오. 앱 또는 작업에 대한 로그 보기에 대한 자세한 정보는 [로그 보기](/docs/codeengine?topic=codeengine-logging) 를 참조하십시오.
작업으로 전달되는 ‘ Kafka ’ 이벤트에 대한 환경 변수
작업에 전달되는 모든 이벤트는 환경 변수로 수신됩니다. 이러한 환경 변수들은 CE_ 접두사를 포함하며, CloudEvents 사양을 기반으로 합니다.
각 이벤트에는 이벤트가 작업에 전달될 때마다 표시되는 몇 개의 공통 환경 변수가 포함됩니다. 각 이벤트의 실제 변수 세트에는 추가 옵션이 포함될 수 있습니다. 자세한 내용은 ‘ CloudEvent ’ 속성을 참조하십시오.
다음 표에는 ‘ Kafka ’ 이벤트에 특화된 환경 변수들이 설명되어 있습니다.
| 가변 | 설명 |
|---|---|
CE_DATA |
이벤트에 대한 데이터(본문)입니다. |
CE_DOMAIN |
애플리케이션(및 프로젝트) URL의 도메인 이름 부분입니다. |
CE_ID |
이벤트가 재생되지 않는 한, 이벤트의 고유 ID입니다. 이 경우 동일한 ID가 지정됩니다. |
CE_SOURCE |
이벤트 생성자 내에서 이 이벤트가 시작된 위치를 표시하는 URI 참조입니다. Kafka 이벤트의 경우 이 헤더의 형식은 /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME] 입니다. |
CE_SPECVERSION |
CloudEvents 스펙의 버전입니다. 이 값은 항상 1.0입니다. |
CE_SUBDOMAIN |
애플리케이션(및 프로젝트)과 연관된 URL의 서브도메인 부분입니다. Kubernetes에 익숙한 경우, CE_SUBDOMAIN은 프로젝트와 연관된 Kubernetes 네임스페이스에 맵핑됩니다. |
CE_SUBJECT |
Kafka 파티션 번호 및 오프셋입니다. 예를 들어, partition:0#1 는 파티션 0 및 오프셋 1 을 참조합니다. |
CE_TIME |
이벤트가 생성된 시간입니다. |
CE_TYPE |
이벤트의 유형입니다. Kafka 이벤트의 경우 이는 dev.knative.kafka.event 입니다. |
출력 예
CE_DATA={"message":"This is a test message #","message_number":1}
CE_DOMAIN=us-south.codeengine.appdomain.cloud
CE_ID=partition:0/offset:46
CE_SOURCE=/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription-job#kafka-topic1
CE_SPECVERSION=1.0
CE_SUBDOMAIN=ewgz38l13ts
CE_SUBJECT=partition:0#46
CE_TIME=2021-09-27T18:02:17.7Z
CE_TYPE=dev.knative.kafka.event
Kafka 이벤트 구독 보기 및 업데이트
Kafka 이벤트 구독에 대한 세부 정보를 확인하거나 구독 내용을 업데이트할 수 있습니다.
콘솔에서 Kafka 이벤트 구독 보기 및 업데이트
-
이벤트 구독에 대한 정보를 확인하려면
- Code Engine 의 ‘프로젝트’ 페이지 에서 해당 프로젝트로 이동하세요.
- 개요 페이지에서 이벤트 구독을 클릭하여 정의된 구독 목록을 확인하십시오.
-
이벤트 구독을 업데이트하려면
- 구독 페이지로 이동하십시오. 등록 페이지로 이동하려면 이벤트 등록 페이지로 이동하여 업데이트할 등록의 이름을 클릭하십시오.
- 구독을 업데이트하십시오. 예를 들어, Kafka 구독에 대한 토픽을 다른 토픽으로 변경하십시오. 메시지 브로커 세부사항 탭의 토픽 섹션에서 기존 토픽을 제거하고 새 토픽의 이름을 추가하십시오.
- 저장을 클릭하여 변경사항을 저장하십시오.
CLI를 사용하여 Kafka 이벤트 등록 보기 및 업데이트
-
CLI를 사용하여 이벤트 등록에 대한 정보를 보려면
ibmcloud ce subscription kafka get명령을 사용하십시오.ibmcloud ce sub kafka get -n mykafkasubscription출력 예
Getting Kafka event subscription 'mykafkasubscription'... OK Name: mykafkasubscription ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2m4s Created: 2022-06-18T16:59:12-04:00 Destination Type: app Destination: kafka-receiver-app2 Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-c577b304-dccd-40c8-bb62-138c39f6112a Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true Conditions: Type OK Age Reason ConnectionEstablished true 53m InitialOffsetsCommitted true 53m Ready true 52m Scheduled true 52m SinkProvided true 53m Events: Type Reason Age Source Messages Normal FinalizerUpdate 53m kafkasource-controller Updated "mykafkasubscription" finalizers -
CLI를 사용하여 이벤트 등록을 업데이트하려면
ibmcloud ce subscription kafka update명령을 사용하십시오. 다음 예제는 주제 이름을 업데이트합니다.ibmcloud ce sub kafka update -n mykafkasubscription --topic kafka-topic2다음
ibmcloud ce subscription kafka update명령을 사용하여 Kafka 구독의 값을 업데이트할 수 있습니다. 그러나 이 명령으로 이용자 그룹의 값을 수정할 수는 없습니다. 구독을 업데이트하여 다른 토픽을 참조하도록 하려면, 구독을 업데이트하기 전에 Kafka 토픽이 존재하는지 확인하십시오.
Kafka 이벤트 등록 삭제
Kafka 구독이 더 이상 필요하지 않으면 삭제할 수 있습니다.
구독을 삭제하면, Event Streams 서비스 인스턴스의 서비스 자격 증명이 사용되어 Event Streams 서비스 인스턴스에서 소비자 그룹이 제거됩니다. 구독을 삭제할 때 서비스 자격 증명이 이미 삭제되었거나 유효하지 않은 경우, ‘ Event Streams ’ 서비스 인스턴스에서 소비자 그룹을 제거할 수 없습니다. Code Engine 의 Kafka 이벤트 구독 삭제 요청이 실패했습니다.
콘솔에서 ‘ Kafka ’ 구독 삭제하기
- Code Engine 의 ‘프로젝트’ 페이지 에서 해당 프로젝트로 이동하세요.
- 개요 페이지에서 이벤트 구독을 클릭하여 정의된 구독 목록을 확인하십시오.
- 구독 목록에서 애플리케이션 또는 작업에서 제거할 구독을 삭제하십시오.
구독과 연관된 작업 또는 앱을 삭제해도 구독은 삭제되지 않습니다. 애플리케이션 또는 작업(또는 동일한 이름의 다른 앱 또는 작업)을 다시 작성하면 구독이 앱 또는 작업과 다시 연결됩니다.
CLI를 사용하여 ‘ Kafka ’ 구독 삭제하기
Kafka 구독은 다음 ibmcloud ce subscription kafka delete 명령을 실행하여 xml-ph-0000@deepl.internal 구독을 삭제할 수 있습니다.
예를 들어, mykafkasubscription 라는 이름의 ‘ Kafka ’ 구독을 삭제하려면 다음 명령을 사용하십시오
ibmcloud ce subscription kafka delete --name mykafkasubscription
구독과 연관된 작업 또는 앱을 삭제해도 구독은 삭제되지 않습니다. 대신, 구독은 앱 또는 작업의 가용성에 따라 달라지므로 준비 상태 false로 이동합니다. 애플리케이션 또는 작업(또는 동일한 이름의 다른 앱 또는 작업)을 다시 작성하면 구독이 다시 연결되고 준비 상태는 true가 됩니다.
추가 이벤트 속성 정의
구독을 작성할 때 생성되는 모든 이벤트에 포함될 추가 CloudEvent 속성을 정의할 수 있습니다. 이러한 속성은 이벤트 전달의 다른 CloudEvent 속성과 유사하게 표시됩니다. 기존 CloudEvent 속성의 이름을 지정하도록 선택하면 이벤트에 포함된 원래 값을 대체합니다.
추가 속성을 정의하려면 ibmcloud ce subscription kafka create CLI 명령과 함께 --extension 옵션을 사용하십시오.
자세한 정보는 다른 CloudEvents 스펙을 사용할 수 있습니까?를 참조하세요.