6장. 채널
6.1. 채널 및 서브스크립션
채널은 단일 이벤트 전달 및 지속성 계층을 정의하는 사용자 정의 리소스입니다. 이벤트 소스 또는 생산자에서 채널로 이벤트를 보낸 후에는 서브스크립션을 사용하여 이러한 이벤트를 여러 Knative 서비스 또는 기타 싱크로 보낼 수 있습니다.
지원되는 Channel
오브젝트를 인스턴스화하여 채널을 생성하고 Subscription
오브젝트의 delivery
사양을 수정하여 재전송 시도를 구성할 수 있습니다.
Channel
오브젝트를 생성한 후에는 변경 승인 Webhook에서 기본 채널 구현을 기반으로 Channel
오브젝트에 일련의 spec.channelTemplate
속성을 추가합니다. 예를 들어 InMemoryChannel
기본 구현의 경우 Channel
오브젝트는 다음과 같습니다.
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default spec: channelTemplate: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel
그런 다음 채널 컨트롤러에서 spec.channelTemplate
구성에 따라 지원 채널 인스턴스를 생성합니다.
spec.channelTemplate
속성은 사용자가 아닌 기본 채널 메커니즘에 의해 설정되기 때문에 생성 후에는 변경할 수 없습니다.
이 메커니즘을 앞의 예제와 함께 사용하면 일반 지원 채널과 InMemoryChannel
채널이라는 두 개의 오브젝트가 생성됩니다. 다른 기본 채널 구현을 사용하는 경우 InMemoryChannel이
구현에 고유한 채널로 교체됩니다. 예를 들어 Apache Kafka의 Knative 브로커를 사용하면 KafkaChannel
채널이 생성됩니다.
지원 채널은 서브스크립션을 사용자가 생성한 채널 오브젝트에 복사하고 지원 채널의 상태를 반영하도록 사용자가 생성한 채널 오브젝트의 상태를 설정하는 프록시 역할을 합니다.
6.1.1. 채널 구현 유형
OpenShift Serverless에서는 InMemoryChannel
및 KafkaChannel
채널 구현을 지원합니다. InMemoryChannel
채널은 제한 사항으로만 개발 용도로 사용하는 것이 좋습니다. 프로덕션 환경에 KafkaChannel
채널을 사용할 수 있습니다.
다음은 InMemoryChannel
유형 채널에 대한 제한 사항입니다.
- 이벤트 지속성은 제공되지 않습니다. Pod가 다운되면 해당 Pod의 이벤트도 손실됩니다.
-
InMemoryChannel
채널에서는 이벤트에 순서를 지정하지 않으므로 해당 채널에서 두 개의 이벤트를 동시에 수신하는 경우 이벤트를 순서와 관계없이 구독자에게 전달할 수 있습니다. -
구독자가 이벤트를 거부하면 기본적으로 재전송을 시도하지 않습니다.
Subscription
오브젝트의delivery
사양을 수정하여 재전송 시도 횟수를 구성할 수 있습니다.