5.6. 이벤트 전달

이벤트가 이벤트 싱크로 전달되지 않는 경우 적용되는 이벤트 전달 매개변수를 구성할 수 있습니다. dead letter sink를 포함하여 이벤트 전달 매개변수를 구성하면 이벤트 싱크로 전달되지 못한 이벤트를 다시 수행할 수 있습니다. 그렇지 않으면 전달되지 않은 이벤트가 삭제됩니다.

5.6.1. 채널 및 브로커에 대한 이벤트 전달 동작 패턴

다양한 채널 및 브로커 유형에는 이벤트 전달을 위해 그 뒤에 자체 동작 패턴이 있습니다.

5.6.1.1. Knative Kafka 채널 및 브로커

이벤트가 Kafka 채널 또는 브로커 수신자에게 성공적으로 전달되면 수신자는 202 상태 코드로 응답합니다. 즉, 이벤트가 Kafka 주제 내부에 안전하게 저장되어 손실되지 않습니다.

수신자가 다른 상태 코드로 응답하는 경우 이벤트는 안전하게 저장되지 않으며 문제를 해결하기 위해 사용자가 단계를 수행해야 합니다.

5.6.2. 구성 가능한 이벤트 전달 매개변수

이벤트 전달을 위해 다음 매개변수를 구성할 수 있습니다.

dead letter sink
이벤트가 전달되지 않으면 지정된 이벤트 싱크에 저장되도록 deadLetterSink 전달 매개변수를 구성할 수 있습니다. dead letter sink에 저장되지 않은 이벤트가 삭제됩니다. dead letter sink는 Knative 서비스, Kubernetes 서비스 또는 URI와 같은 Knative Eventing 싱크 계약을 준수하는 주소 지정 가능한 오브젝트입니다.
retries
재시도 전달 매개변수를 정수 값으로 구성하여 이벤트가 dead letter sink로 전송되기 전에 전달을 retry해야 하는 최소 횟수를 설정할 수 있습니다.
back off delay
backoffDelay 전달 매개변수를 설정하여 실패 후 이벤트 전달을 재시도하기 전에 시간 지연을 지정할 수 있습니다. backoffDelay 매개변수의 기간은 ISO 8601 형식을 사용하여 지정합니다. 예를 들어 PT1S는 1초 지연을 지정합니다.
back off policy
backoffPolicy 전달 매개 변수를 사용하여 재시도 정책을 지정할 수 있습니다. 정책을 linear 또는 exponential로 지정할 수 있습니다. linear 백오프 정책을 사용하는 경우 백오프 지연은 backoffDelay * <numberOfRetries>와 동일합니다. exponential 백오프 정책을 사용하는 경우 백오프 지연은 backoffDelay*2^<numberOfRetries>와 동일합니다.

5.6.3. 이벤트 전달 매개변수 구성 예

브로커,트리거,채널, 서브스크립션 오브젝트에 대한 이벤트 전달 매개변수를 구성할 수 있습니다. 브로커 또는 채널에 대한 이벤트 전달 매개변수를 구성하는 경우 이러한 매개변수는 해당 오브젝트에 대해 생성된 트리거 또는 서브스크립션으로 전파됩니다. 브로커 또는 채널의 설정을 재정의하도록 트리거 또는 서브스크립션에 대한 이벤트 전달 매개변수를 설정할 수도 있습니다.

Broker 오브젝트의 예

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
...
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: eventing.knative.dev/v1alpha1
        kind: KafkaSink
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Trigger 오브젝트의 예

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
...
spec:
  broker: <broker_name>
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Channel 오브젝트의 예

apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
...
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Subscription 개체 예

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
...
spec:
  channel:
    apiVersion: messaging.knative.dev/v1
    kind: Channel
    name: <channel_name>
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

5.6.4. 트리거의 이벤트 전달 순서 구성

Kafka 브로커를 사용하는 경우 트리거에서 이벤트 싱크로 이벤트 전달 순서를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, Knative Kafka가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Kafka 브로커는 클러스터에서 사용할 수 있도록 활성화되며 Kafka 브로커를 생성했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift(oc) CLI를 설치했습니다.

절차

  1. Trigger 오브젝트를 생성하거나 수정하고 kafka.eventing.knative.dev/delivery.order 주석을 설정합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: <trigger_name>
      annotations:
         kafka.eventing.knative.dev/delivery.order: ordered
    ...

    지원되는 소비자 제공 보장은 다음과 같습니다.

    순서가 지정되지 않음
    순서가 지정되지 않은 소비자는 적절한 오프셋 관리를 유지하면서 순서가 지정되지 않은 메시지를 전달하는 비차단 소비자입니다.
    ordered

    순서가 지정된 소비자는 CloudEvent 구독자의 성공적인 응답을 기다린 후 파티션의 다음 메시지를 전달하기 전에 대기 중인 소비자별 소비자입니다.

    기본 주문 보장은 순서가 지정되지 않습니다.

  2. Trigger 오브젝트를 적용합니다.

    $ oc apply -f <filename>